pythonで計算した後、モーターを動かすためにArduinoに値を送信したくなりました。
1バイトのデータとかだったら楽勝なんですけど、小数を送りたいとか、この値がどんなデータなのかとか送信するには少しだけ複雑なことをする必要がありそうです。
今回はpythonとArduinoのどちらにもレジスタを作って、レジスタを指定してそこに値を送信するということをやってみます。
コードはgithubに
python側
github.com
mbed対応させました。(cppファイルにサンプルあります。)
os.mbed.com
python側の方がけっこう苦労したんですけど、データを送信するときはバイト文字列にしたりしなきゃいけないんですよ。
そのあたりの処理を行っているのがwriteDataとreadDataです。
pythonのコードが送信用となっていて、レジスタの0x10, 0x20 0x30, 0x40に0~255の間を上下するように値を送信しています。
Arduinoは、12番ピンがレジスタ0x10の値に応じてPWM出力します。
mbedは、レジスタ0x10の値をprintfしています。teratermで確認できるかと思います。
mbedのサンプルコードははmbed同士で通信するためのものです。
pythonと通信するならば、teratermが使えないので、LEDを使いましょう。
こんな感じ
#include "mbed.h" #include "PacketSerial.h" int32_t Registar[128] = {}; PacketSerial device(USBTX, USBRX, Registar); int main() { BusOut leds(LED1, LED2, LED3, LED4); while(1) { leds = Registar[0x10]; } }
終了はprintfで。。。
パケットに関してはこちらを参考に、パケットにレジスタ指定を追加しました。
Arduinoでバイナリ送受信のシリアル通信をするときのパケットの構造