ロボットがライントレースしているときにNXTの液晶ディスプレイ(LCD)に光センサーの値を表示させ続ければ,光センサーの値とロボットの動作の関係がよくわかるはずである。もっとも,ロボットに遅れないように人間が走り回らないといけないという大きな問題はあるのだが。
-------------------------------------------------------------- task main() { long startTime; SetSensorLight(IN_2); startTime = CurrentTick(); while (true) { if (CurrentTick()-startTime > 50) { NumOut(1,LCD_LINE1,Sensor(IN_2)); startTime = CurrentTick(); } } } --------------------------------------------------------------
前回紹介したCurrentTick関数を使って50ミリ秒経過したら,光センサーの値をLCDの1行,1桁目に表示するプログラムだ。
この方法だと表示がクルクル変わるので,値を比較することが難しい。LCDには数値を8行表示できるので,行を変えて光センサーの値を表示してみる。
-------------------------------------------------------------- int i=0; void displayLight(int light) { if (i < 8) { i++; } else { i=1; } switch (i) { case 1: NumOut(1,LCD_LINE1,light); break; case 2: NumOut(1,LCD_LINE2,light); break; case 3: NumOut(1,LCD_LINE3,light); break; case 4: NumOut(1,LCD_LINE4,light); break; case 5: NumOut(1,LCD_LINE5,light); break; case 6: NumOut(1,LCD_LINE6,light); break; case 7: NumOut(1,LCD_LINE7,light); break; case 8: NumOut(1,LCD_LINE8,light); break; default: // nothing to do } } task main() { long startTime; SetSensorLight(IN_2); startTime = CurrentTick(); while (true) { if (CurrentTick()-startTime > 1000) { displayLight(Sensor(IN_2)); startTime = CurrentTick(); } } } --------------------------------------------------------------
Switch~case文を使って,iの値によって表示する行を変えている。
1000ミリ秒(1秒)経過したら,光センサーの値を表示するようにしたので,ゆっくり表示が変わっていく。こうしないと写真が撮れないからだ。