前回は,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関数を使うと実際のパワーが計測できるようだ。