前の記事はこちら EV3ねた その10 ROBOT-C でI2C通信
EV3に接続したI2Cセンサー(TPA-81)の読み取りについて、実験をしています。
これまでの現象をまとめると・・・
①プログラムを実行しても、センサーからの値が読み込まれない。
②何度も読み込みを実行している最中に、SCLの線を抜き差しすると、それ以降はセンサーの値が読みこまれるようになる。
③そのまま、センサーの電源を一旦切っても(その後に再びON)、センサーの値は読み込まれる。
④EV3とセンサーの間の線を一旦外すと(その後に再接続)センサーからの値が読み込まれない。
こんな感じです。
で・・・分かったことは、センサーの値が読み込まれない間は、(EV3のポート情報を確認すると)ポート1は UNKNOWN になっているのですが、②でSCLの線を抜き差しして、センサーの値が読みこまれるようになった後は、ポート1は IIC-BYTE と表示されていました。
これは、EV3がポート1を I2C機器と認識したから、通信ができるのだと思うのですが・・・どうやったら、プログラムからポート1を I2C機器(IIC-BYTE) に設定できるのでしょうか!?
プログラムの最初に書く
#pragma config(Sensor, S1, TPA81, sensorEV3_GenericI2C)
や
sensorReset(S1);
SensorType[S1] = sensorEV3_GenericI2C;
などを入れてみても、何も変わりません。
で、SCLの信号線にLEDを付けて、通信を目で確認できるようにしてみて分かったのですが・・・
電源を入れてすぐや、EV3とセンサーの間のケーブルを抜き差しすると・・・SCLの信号がピロピロと点滅しっぱなしになります。これは、ポートに接続したセンサーをEV3が勝手に判断する何らかの手順があるように思います。
(TPA-81は、その手順に従っていないので、UNKNOWN になってしまうのではないかと・・・)
じゃあ、その手順に従って信号を返せば、Arduino との通信もできるのではないか・・・と、逆に希望がわいてきました。
もう、意地になって、ググっていくと・・・
[Mindstorms]EV3 nicosensor
https://sites.google.com/site/yugenkaisyanico/nicosensor_ev3
というページに、とっても役に立つ情報が書かれていました。
以下にコピペします。
いや~、私が悩みに悩んでいたことが、あっさり書かれていて、逆に拍子抜けです。
nicosensorは、かつて、NXT用の自作センサーを接続するきっかけを提供してくださった、記事です。これがEV3に対応したということですね。
分かったことは・・・
EV3は(NXTと違って 笑)賢いので、ポートにセンサーが接続されると、勝手に「おいおい何を接続したんだ?」と勝手に調べます。で、接続したのがLEGOの超音波センサーなら「ポート1にLEGOのNXT用の超音波センサーが接続されました」と勝手に認識してくれるのでしょう。ここで、接続したけど「LEGOの超音波センサーだよ」と認識できない時は、IIC-BYTEになるようです。(うまく接続しないと UNKNOWNのまま、なのでしょう)
ということで、単にI2Cのセンサーを接続してもダメなことが分かりました。
ちゃんと、(接続時に)EV3の問いかけに対して、回答を送らないと通信をしてくれない・・・ということですね。
(ただ、なぜ、SCLの線を抜き挿しすると、それ以降の通信をしてくれるのかは、謎のままです・・・)
しかも、nicosensorのページには、Arduino側のプログラムもダウンロードできるようになっていて、至れり尽くせりです・・・
では、早速、Arduinoに接続して実験をしてみます・・・わくわく
続きの記事はこちら EV3ねた その12 ROBOT-C でI2C通信 できそう・・・