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()みたいな関数を作成すると良さそうですけど・・・関数定義の方法はまた次の機会にということで。