前回は,NXCの変数の型の豊富さについて説明した。NXCではNQCに比べ,変数だけでなく,関数も豊富になっている。特にMindStorms NXTでは従来のRCXと違い,モーターがエンコーダ付きのサーボーモーターになっているのでモーター関係の関数が充実している。

 今回はモーター関係の関数を少し紹介したい。

 基本中のキホンは,OnFwd関数とOff関数だ。OnFwd関数は,OnFwd(OUT_BC,75)のように第一引数にモーターのポートを指定し,第二引数にはパワーを指定する。

 Off関数はOff(OUT_BC)のように,指定したモーターを止める。詳しくいうと,Off関数はブレーキをかけるように,モーターの回転を止める。

--------------------------------------------------------------

OnFwd(OUT_BC,75);
Wait(3000);
Off(OUT_BC);

--------------------------------------------------------------

 上記のようにWait関数を間にはさむと,指定した時間,モーターBとCが回る。時間の単位はミリ秒なので,3000で3秒だ。

 モーターの止め方にはもう一種類ある。回転を止めるのではなく,電源の供給をやめる方法だ。NXCの場合,Coast関数とFloat関数がそれに当たる。Coast(OUT_BC)のようにすると,モーターは緩やかに止まる。

 次に,現在のモーターの状況を知る関数を説明しよう。MotorPower関数は指定したモーターのパワーを返す。

--------------------------------------------------------------

OnFwd(OUT_BC,75);
iNum = MotorPower(OUT_B);
NumOut(0,LCD_LINE1,iNum);

--------------------------------------------------------------

 上記のプログラムはモーターBCをパワー75で回転させた直後,MotorPower関数でモーターのパワーを取得し,LCD(液晶ディスプレイ)に表示する。当たり前だが,表示結果は75だ。MotorPower関数ではモーターに設定した値が返ってくるようだ。

 MotorActualSpeed関数はモーターの実際のスピードを取得する。

--------------------------------------------------------------

OnFwd(OUT_BC,75);
iNum = MotorActualSpeed(OUT_B);
NumOut(0,LCD_LINE2,iNum);

--------------------------------------------------------------

 このように,モーターをパワー75で回転させた直後,MotorActualSpeed関数で実際のスピードを測ると,返ってくる値は0だ。

 続いて,プログラムを以下のように変更する。

--------------------------------------------------------------

OnFwd(OUT_BC,75);
Wait(3000);
iNum = MotorActualSpeed(OUT_B);
NumOut(0,LCD_LINE2,iNum);

--------------------------------------------------------------

 3秒間走らせたあとで,MotorActualSpeed関数を実行すると,75という値が返ってきた。MotorActualSpeed関数を使うと実際のパワーが計測できるようだ。