目の記事はこちら EV3ねた その12 ROBOT-C でI2C通信 できそう・・・
前回までで、EV3に接続するArduinoを、なんとか(NXTの)超音波センサーに偽装させて、通信ができないか!?
について、頑張っていたのですが・・・なんと、そんなこと全然頑張らなくても良いことがわかりました。
上にも書いたように、これまでは、LEGO純正の超音波センサーと同じ振る舞いをして、EV3に「超音波センサーが接続されたよ」と認識させることで、EV3のポートビューでArduinoから送られてきた値が(超音波センサーでに偽装して)表示ができます。だから、なんとか、超音波センサーが接続された振る舞いを真似しようとやっきになっていました。
だから、0x08を受け取ったら、”LEGO"を返して、0x10を受け取ったら”sonar"を返して・・・とやっていました。
しかし・・・単に接続するだけであれば、そんなのは全然必要ありませんでした。
Arduinoをポートに接続して、(何もしないから) UNKNOWN のまま、超音波センサーを読み出すプログラムを書けば Arduino からの値を受け取れるところまでは、前の記事で書いた通りです。
これを、汎用的なI2Cの通信に置き換えてテストしたのが下のプログラムです。
このプログラムを動かせば、普通にArduinoからの値が読み取れます。
(もちろん、Arduino側で 0x42 が送られたら、1Byteの値を返すようなプログラムが必要です。)
task main()
{
char Wbuf[3] = {2,0x02,0x42};
char Rbuf[1];
while(true)
{
sendI2CMsg(S1,Wbuf,1);
wait1Msec(20);
readI2CReply(S1,Rbuf,1);
eraseDisplay();
displayBigTextLine(10," %d",Rbuf[0]);
wait1Msec(500);
}
}
(Arduino側は、nicosensor に掲載されたプログラム)
超音波センサーに偽装するだけでは、1つのセンサーの値しかやりとりできませんが・・・
このやり方が成功したので、いくつもの値をやりとりできる可能性が出てきました!
さて・・・それでは、単純に受け渡しができるような、Arduino側のプログラムを研究したいと思います。
続きの記事はこちら EV3ねた その14 いよいよArduinoとの接続