PIC16F84AでTVゲーム ‐ワイヤレス・リモコン化してみようか(受信側ソフト)‐
「PIC16F84AでTVゲーム ‐ワイヤレス・リモコン化してみようか(送・受信ハードと送信側ソフトまで)‐」の続き。
上のリンク先で、__delay_us();を使って矩形波を作ったところまで書いた。
信号がちゃんと送受信されているか確認のためにロジアナを使ったので、その測定値から矩形波のHighの部分の時間をメモっておく。
順に、5.5ms、11.0ms、22.1ms だった。
受信側で長さを計るのもPIC10F222で行うこととして、単純にこんなことにした。
while(GP2 == 1) cnt++; と書いて、GP2 が High な間だけカウンターを増加させ、後でその数によって点灯させるLEDを変える。
GP0、GP1にLED、GP2に受信モジュールからの信号が接続されている。
上にはすでに条件文に使う値が書いてあるが、実際に矩形波のHighの長さによってカウント値がいくつになるかを知るにはSimulationで while(GP2 == 1) cnt++; の実行時間を計ってみなければならない。
「MPLAB X のSimulatorで実行時間を確認する」とか「MPLAB X のSimulatorでピンの状態を指定する」とかを参照のこと。
6.5μsとなった。
上に書いた時間をこれで割って、カウント値を求め、10%程度のマージンを加えてIf文の条件式に使ってある。
紫のコイルが送信側のアンテナで、緑が受信側のアンテナ。
2つのタクトスイッチのどちらかを押すと、受信部のLEDの対応する方が点灯する。
撮影のために並べて置いてあるが、数メートル離しても問題なく動作する。
先日作った、コネクタ位置が何だかなあという失敗作のゲームボードに、ICクリップでつないでみた。
ゲームボードの方はボタンの押下げを感知するピンはプルアップされているので、ボタンを押すとLowになる。
上のプログラムでは逆になっているので、その点だけを変更して、難なくワイヤレス化が完了してしまった。
おかしなものだが、ワイヤレスになっただけで、何かこう、新鮮さが出て、思わず熱中して遊んでしまった。
ケーブルから開放されるってのは気分まで変わるもんなんだとあらためて感心した。
プリント基板を作成した。
「PIC16F84AでTVゲーム ‐無線リモコン化してプリント基板を作成した‐」