Robot Cのセンサーの扱い方をまとめてみた

今、LEGO Mindstorms NXTに対応しているRobot Cで遊んでます。やっぱ使い込んでいくと、関数リファレンスが必要になってくるということで、オフィシャルホームページに書いてあるのをまとめています。開発元のCMUに連絡して、日本語に翻訳したのをどこかに公開したいんだけど、大丈夫かな〜。

Robot C http://www-education.rec.ri.cmu.edu/robotc/

さて、特にセンサー周りを調べてたので、↓に書いておきます。

センサーの設定 SetSensorType (sensor_input, sensor_type)

まず、どの言語でも同じですが、センサーを使う前には、どの入力ポートにどの種類のセンサーがついているか設定する必要があります。

NXTの場合、入力ポートが4つで、sensor_inputには、S1,S2,S3,S4のどれかを指定します。それぞれ入力ポート1番〜4番に相当します。

次に、センサーの種類ですが、以下の表にようになってます。NXTには、新たに音センサ、ソナーセンサがつきましたね。そのかわり、温度、回転がなくなってます。あと、RCXの光センサが、反射 (reflection) センサになってて、NXTの光センサとは分けられてます。

値の範囲ですが、値そのものはアナログ値だけど、最大値を100に制限しているものはパーセンテージと書いています。

センサー種類 関数の引数 対応マイコン 値の範囲 備考
接触 sensorTouch RCX, NXT 0 〜 1 ディジタル
温度 sensorTemperature RCX 0.0〜100.0 アナログ、温度
反射? sensorReflection RCX 0〜100 アナログ、パーセンテージ
角度 sensorRotation RCX -32768 〜 32768 ディジタル、方向カウンタ付き
ライト(アクティブ) sensorLightActive NXT 0 〜 100 アナログ, パーセンテージ、LED発光
ライト(非アクティブ) sensorLightInactive NXT 0 〜 100 アナログ, パーセンテージ、LED発光なし
sensorSoundDB NXT 0 〜 100 アナログ, パーセンテージ
ソナー sensorSONAR NXT 0 〜 255 距離 (単位:cm)


これで、入力ポート1番をタッチセンサに接続している場合は、以下のようにします。

   SetSensorType (S1, sensorTouch);

センサーの値の取得 SensorValue(sensor_input)

設定したら、センサーの値を取得せんと始まらないよということで、値の取得です。引数にポートを指定するだけですね。

  SetSensorType(S1, sensorTouch);
  if(SensorValue(S1) == 1) {
    //Output A - full speed forward
    motor[motorA] = 100;
  }

この場合だと、ソースコードが長くなってくると、タッチセンサってどのポートに挿したっけ?て話になりますから。getLight()みたいな関数を作成すると良さそうですけど・・・関数定義の方法はまた次の機会にということで。