本来は簡単にPPM信号でRCデータを入力しようと企んでいたのですが、LED-Arreyを搭載しようとした所どうしてもTLC5940を積みたくなり…。そうすると、タイマーが使えなくなり、同時に割り込みも使えなくなり、PPM入力が不安定なdelay関数やmicros()を使わないといけなくなってしまうためしょうがなく置き換のため検討。たかだか、LEDの点灯のために安定した送信が可能なタイマーを使ったPPM信号を捨ててmicros()関数とか使って飛行を不安定にしたくない。だとすると、BTのデータ受信時に使っているプログラム内でそのままデータをシリアル送信してあげたほうがはるかに効率が良かろうということでの検証です。
MultiWiiの2.1以降には「Multiwii serial protocol」などというものが実装されているようでこれを使ってのPC信号の入力が可能ですのでこれを使ってテストします。
信号の形式:$M>[data length]
[code][/code]
[data][checksum]
ヘッダコード:’$”M’
データの向き:'<‘ or ‘>’
データ長(data length):コマンドで送信するデータ長(8ビット1文字換算)
コード(code):指示コード(詳細は以下「Multiwii Serial Protocol Code」参照
データ(data):「データ長」で指定した数のパラメータ
チェックサム(checksum):データ長からデータ迄を順次XORした値の下位8ビット
※:コード(code)に関しては、MultiWiiプログラム内の「Serial.ino」に情報があるので参照
今回のテスト構成はシリアル通信でのコントロールが可能かを試すだけなのでBluetoothでのコントロールは考えずに簡単にします。
(ATMegaはシリアルデータを中継する途中でRCコントロールデータを追加送信します)
続きを読む