#define go_straight OnFwd(OUT_A+OUT_C); //直進 #define turn_right OnFwd(OUT_A);OnRev(OUT_C); //右回転 #define turn_left OnFwd(OUT_C);OnRev(OUT_A); //左回転 #define RUN_TIME 400 //回転時間 int light_R=0; //右の光の最大値を定義 int light_L=0; //左の光の最大値を定義 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //左の光センサー SetSensor(SENSOR_3,SENSOR_LIGHT); //右の光センサー ClearTimer(0); //タイマーをリセット while(true){ //無限に繰り返す while(FastTimer(0)<RUN_TIME) //始めに一回転して光の最大値を探す {turn_right; //右回転する if(SENSOR_1>light_L) //左センサーの値がlight_Lより大きいとき {light_L=SENSOR_1;PlayTone(220,1);} //左センサーの値をlight_Lに代入 if(SENSOR_3>light_R) //右センサーの値がlight_Rより大きいとき {light_R=SENSOR_3;PlayTone(600,1);} //右センサーの値をlight_Rに代入 } if((SENSOR_1>=light_L)||(SENSOR_3>=light_R)) //どちらかのセンサーに光があたっているとき {go_straight;} //直進 if((SENSOR_1<light_L)&&(SENSOR_3<light_R)) //どちらにも光があたっていないとき {if(SENSOR_1>SENSOR_3){turn_left;} //左が明るければ左回転 if(SENSOR_3>SENSOR_1){turn_right;} //右が明るければ右回転 } } }
基本となるプログラムはすぐにできたのですが、何回やっても成功しなかった。そこで、隣のチームに聞いたところwhile(true)を入れるとうまくいくと知った。
始めは、光センサーを車体の前後につけるタイプのロボットでプログラムしていたのですが、先生にできれば前に2つ付けたタイプのロボットにしてくださいと言われてやり直した。ほとんど、完成に近かっただけにショックだった。多分、授業中に言ったんだろうなぁ。人の話はしっかり聞くべきだと思った。プログラムは少し違うだけでうまくいかないので、難しいと感じた。