(第9回)コントローラー(その4)
作成したコントローラーは動作しているようにみえますが、数値だけですので、実際にコントローラーを使って、マイコンを操作します。拡張ICの出力を行い、コントローラーのデータ8バイトをLEDを使って表現したいと思います。
コントローラーからマイコンを経由してLEDを点灯させる。
<使っている部品>
a.(改造済み)アナログコントローラ(DUALSHOCK 2)
b.Arduino Pro Mini 328 3.3V 8MHz
c.74HC595
d.抵抗30kΩ
d.LED
f.FTDI USBシリアル変換アダプター Rev.2(プログラム書き込みと実験の電源として使う)
g.USBケーブル(micro-B)
h.パソコン
1.接続
拡張ICの出力を行ったときに、LEDをICと直結しましたが、電流が大きすぎるので、30kΩの抵抗を取り付けて、LEDへの電流を減らします(暗くなる)。 それ以外は拡張IC(その2)と全く同じ接続になります。
(接続図)
2.プログラム
下の「プログラム表示」を右クリックして、テキストファイルを保存して、そのテキストの内容を、Arduino IDE にコピーします。
マイコンに書き込みを実施して終了です。
3.データの意味
①1バイトとは10進数で、0~255のことで、TERATERMではFF、2進数(0と1)では8桁の数字です。パソコンの電卓のプログラマーというモードで入力するとわかります。
②LEDはONとOFFがありますので、2進数の0がOFF、1がONとすると、8個のLEDで表現することが可能になります。
③コントローラーの情報は8バイト分の情報が1組ですので、今回の16個のLEDで2バイト分の表現ができます。
④2バイトづつ表示して、どのようなデータになっているのか確認します。
<<セレクトとスタートボタンを同時に押すと切り替わります。>>
<8バイト目(最後)と先頭のインデックス>
8バイト目はセレクトボタンとスタートの2つです。セレクトボタンを押すと、コントローラーに取り付けたLEDがONOFFして拡張用の信号として
利用できます。
<2バイト目、3バイト目>
左スティックの上下左右を倒したときの数値になります。倒した角度がわかるので、モーターの速度を調整するのに便利です。
<4バイト目、5バイト目>
右スティックの上下左右を倒したときの数値になります。
<6バイト目、7バイト目>
スティック以外の14個のボタンを押すと、決まった場所のLEDが点灯します。
LEDが点灯することで8バイトの数値がどのような役割があるか?わかりましたか?先頭がFF固定で、それ以外がFFにならないようにするところがポイントです。
8個のLEDでスティックの傾きを表現したり、どのボタンがおされたか?マイコンがデータを読んで、動作をさせます。今回はLEDをONOFFしていますが、これがモーターであれば、
ロボットの操作ができるようになることが分かったと思います。
(実験の様子)
(参考)
LEDが1個づつ点灯した場合のアニメーションです。それぞれのLEDは10進数での数値が決まっていますので、どれを点灯したかわかります。
すべて点灯した場合は10進数の合計をすると255になります。
128+64+32+16+8+4+2+1=255
次のアニメーションは、0~255までを行ったり来たりします。コントローラーのスティックの数値を送る場合は、このようになっています。実際の送信は、16進数の1バイトで送信 しています。
-------------