小さなビデオデモ、および以下で作成プロセスについて説明します。
文字を入力できるようにするために、12ボタンキーボードを備えた携帯電話で入力するという原則を選びました。 たとえば、文字「a」を入力するには、デュースを1回回転する必要があり、文字「f」については3回3回回転する必要があります。
考え直すことなく、友人同士でデバイス自体の検索(友人の祖母が見つけた)を整理し、ArduinoとLCD 16 * 2行の画面、はんだ付けアクセサリー、自由時間、そして自分の手で何かをしたいという切望を持ち出しました。
Arduinoを入手したら、すぐにLCDを接続し、LED、ボタン、LCDスクリーンのテストケースをひねりました。 ArduinoのWebサイトで見つけることができます。
電話ケースのカバーを取り外して内部を調べたところ、ダイヤラー自体は非常にシンプルであることがわかりました。3つの接点があり、そのうちの1つは他の2つと閉じています。 最初の場合-ディスクがスクロールしている場合、および2番目の場合-デフォルトで閉じられますが、ディスクが元の状態に戻る過程で、ディスクが移動を開始した数に応じて特定の回数開きます。 これはすべて肉眼で見ることができましたが、接点が短絡したときにビープ音を発するマルチメーターを使用して、正しい動作をさらに確認できます。 また、「デバイス上の受話器」/「受話器がオフ」の状態もプログラムで使用できることが明らかになりました。これは、このアクションが電話ボード上のボタンの接点を単に開閉するためです。
この知識を考えると、おおまかに言えば、3つのボタンを処理していることが明らかになりました。3つのボタンからデータをプログラムで読み取る必要があり、その他はすべてアルゴリズムの問題です。 そのため、 サイトからArduinoデジタルポートまでのスキームに従ってそれぞれを接続し、このすべてをブレッドボードにまとめました。
開発環境を開き、デジタルポートからパルスを読み取り、それらを文字に変換してtwitterに送信するコードを記述することは残っています。 Arduino用の通信ボードが手元になかったため、Arduinoシリアルポートから行を読み取り、それらを送信するスクリプトを実行するコンピューターにUSB経由で電話を接続することにしました。
プロセス全体のアルゴリズムは非常に簡単なので、ここではすべてのコードを説明するのではなく、ディスクから収集されたデータがどのように読み取られるかについてのみ説明します。
まず、デジタルポートを使用するには、初期化中にこのポートのモードを指定する必要があります。
const unsigned int diskState = 7;
const unsigned int diskCounter = 8;
void setup() {
pinMode(diskState, INPUT);
pinMode(diskCounter, INPUT);
}
リストからわかるように、ダイヤラーを直接接続するためにポート7と8を使用しました。
次に、スクリプトが実行される無限ループ内で、最初のポートの状態を確認する必要があります。論理的な「yes」がある場合は、ユーザーがディスクのスピンを開始したことを意味します。 ディスクが戻るまで、2番目のポートが開くたびにカウンターを増やす必要があります。
unsigned int prevDiskCountState = HIGH;
void loop() {
unsigned int currDiskState = digitalRead(diskState);
unsigned int currDiskCountState = digitalRead(diskCounter);
if (currDiskState == HIGH) {
if (prevDiskCountState == HIGH && currDiskCountState == LOW) {
currDiskCount++;
delay(100);
}
prevDiskCountState = currDiskCountState;
} else {
if (currDiskCount > 0) {
//
}
}
}
ハンドセットのステータスについても同じチェックが実行され、テキストがあり、ハンドセットがハングアップしている場合、回線はシリアルポートに書き込まれます。
Serial.println(msg);
そして、小さなRubyスクリプトがコンピューター上で起動され、その行が読み取られてTwitterに送信されます。
<br/> require "serialport" <br/> require "twitter" <br/> <br/> # params for serial port <br/>port_str = "/dev/tty.usbserial-A900cdNp" <br/>baud_rate = 9600 <br/>data_bits = 8 <br/>stop_bits = 1 <br/>parity = SerialPort::NONE<br/> <br/>sp = SerialPort. new (port_str, baud_rate, data_bits, stop_bits, parity)<br/> <br/> # twitter auth <br/> require './Config.rb' <br/>Twitter.configure do |config|<br/> config.consumer_key = YOUR_CONSUMER_KEY<br/> config.consumer_secret = YOUR_CONSUMER_SECRET<br/> config.oauth_token = YOUR_OAUTH_TOKEN<br/> config.oauth_token_secret = YOUR_OAUTH_TOKEN_SECRET<br/> end <br/> <br/>client = Twitter::Client.new<br/> <br/> while true do <br/> line = sp. gets <br/> if line<br/> puts line<br/> client. update (line)<br/> end <br/> end <br/> <br/>sp.close <br/>
すべてが正常に機能することを確認した後、回路全体をブレッドボードから回路基板に移し、ディスプレイ用の穴を事前に切り取って、すべてをケース内に配置しました。
すべてのプロジェクトコードはGitHubで利用できるため、だれでも詳細を把握して、同様のものを実装できます。
Habrのツイート
プロジェクトtwitter
プロジェクトページ
質問があれば書いてください。