task main(){ SetSensor(SENSOR_2, SENSOR_LIGHT); //光センサー準備 int a,b,time; //関数準備 a = 0; //光の強さ用関数 b = 0; //回転方向用関数 time = 0; //回転時間用関数 ClearTimer(0); while(Timer(0) < 32){ //32の値(回転時間)は調整が必要 OnFwd(OUT_A); OnRev(OUT_C); if(SENSOR_2 > a){ a = SENSOR_2; //今までで一番強かった光の値 time = Timer(0); //上の光を観測した時間 } } Off(OUT_A + OUT_C);Wait(100); ClearTimer(0); while(Timer(0) < time){ //timeの時間だけ回す OnFwd(OUT_A); OnRev(OUT_C); } Off(OUT_A + OUT_C);Wait(100); while(true){ OnFwd(OUT_A + OUT_C); //とりあえず前進 if(SENSOR_2 < a && b == 0){ //光が遠のいた&直前に左に回ったまたは初めて回る until(a <= SENSOR_2 || Timer(0) == 3){ //光を見つけるか、指定時間経つまで回る OnRev(OUT_A); } Off(OUT_A + OUT_C); if(a <= SENSOR_2){ //光が見つかったら直進する b = 0; a = SENSOR_2; }else{ //見つからなかったら右に回る b = 1; } if(b == 1){ //左に回って見つからなかった until(a <= SENSOR_2 || Timer(0) == 3){ OnRev(OUT_C); OnFwd(OUT_A); } if(a <= SENSOR_2){ b - 1; a = SENSOR_2; }else{ Off(OUT_A + OUT_C); break; } } } if(SENSOR_2 < a && b == 1){ //直前に右に回ったとき until(a <= SENSOR_2 || Timer(0) == 3){ OnRev(OUT_C); } Off(OUT_A + OUT_C); if(a <= SENSOR_2){ a = SENSOR_2; b = 1; }else{ b = 0; } if(b == 0){ until(a <= SENSOR_2 || Timer(0) == 3){ OnRev(OUT_A); OnFwd(OUT_C); } if(a <= SENSOR_2){ b = 0; a = SENSOR_2; }else{ Off(OUT_A + OUT_C); break; } } } } }
うまく動かなかった…
制作者&文責 蓮井