NXTプログラミング(9)


超音波センサーの値の取得は難しい。超音波センサーがI2Cで接続されているデジタルセンサーだからである。グレーブックでもこの部分の解説がはしょられている。(→id:yaneurao:20080113)


で、こういうFAQ的な質問は必ず誰かがどこかでしているわけで、以下のスレにそのものずばりの回答がある。
http://forums.nxtasy.org/lofiversion/index.php?t473.html


以下、C#で書きなおした。


nc1.SetInputMode(NxtSensorPort.Port1, NxtSensorType.LowSpeed_9V, NxtSensorMode.Raw);
// The port needs to be set as type LOWSPEED_9V and the mode RAW.

byte[] data = new byte[2] { 0x02 , 0x42 }; // "read measurement byte"
nc1.LSWrite(NxtSensorPort.Port1, data, 1/* return message length*/);

// Then use LSGetStatus until it says that the bytesReady > 0

Thread.Sleep(50); // 50ms待ってみる

// Finally use LSRead to read the measurement byte.

byte[] result = nc1.LSRead(NxtSensorPort.Port1);
// 取得できなかった場合は、LSReadで例外が飛ぶ。
return result[0];
// 戻り値はcm。無限遠方(測定不能)の場合 255が戻る。

見ての通り50ms待っているので、ここでblockingされる。実際にはこんなプログラムをこのまま使ってはならない。これはあくまでサンプルである。


以上ですべてのセンサーの解説が終わった。
これで入出力デバイスに関してはすべて終わりである。