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される。実際にはこんなプログラムをこのまま使ってはならない。これはあくまでサンプルである。
以上ですべてのセンサーの解説が終わった。
これで入出力デバイスに関してはすべて終わりである。