方法としては、以下の通りである。
A,2つのセンサーでトレース(黒、黒)
B,2つのセンサーでトレース(白、白)
C,1つのセンサーでトレース(黒)
#define MOTOR OUT_A+OUT_C #define THRESHOLD 40 //閾値 int search_dir;
sub turn_left(){ OnRev(OUT_A);OnFwd(OUT_C); } sub turn_right(){ OnFwd(OUT_A);OnRev(OUT_C); }
task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_LIGHT);OnFwd(MOTOR); //最初の動きとして直進させる。 while(true){ if(SENSOR_1<THRESHOLD) //線を見失ったら { if(search_dir==0){ //前回の捜索方向が0(左から捜索していた) turn_right(); Wait(5); //右側から捜索開始 if(SENSOR_1<THRESHOLD){ //線をみつけたのなら直進 OnFwd(MOTOR); search_dir=1; //右から捜索していたことを記憶 }else{ //見付からないのなら反対側を探す turn_left(); Wait(10); if(SENSOR_1<THRESHOLD){ //見付けたのなら直進 OnFwd(MOTOR); search_dir=0; //左側の捜索で線を見つけたことを記憶 }else{ //どちらも見付からないのなら1秒前進 OnFwd(MOTOR);Wait(100); search_dir=0; //線を見失ったことになるので、とりあえず前進させる。 } } } if(search_dir==1){ //上と同様。 turn_left(); Wait(5); if(SENSOR_1<THRESHOLD){ OnFwd(MOTOR); search_dir=0; }else{ turn_right(); Wait(10); if(SENSOR_1<THRESHOLD){ OnFwd(MOTOR); search_dir=1; }else{ OnFwd(MOTOR); Wait(100); search_dir=0; } } } } } Off(OUT_A+OUT_C); }