[[2004/A5]] [[2004/A5]] #define forwards(t) OnFwd(OUT_A+OUT_C);Wait(t); #define backwards(t) OnRev(OUT_A+OUT_C);Wait(t); #define turn_right(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t); #define turn_left(t) OnRev(OUT_A);OnFwd(OUT_C);Wait(t); task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_TOUCH); start wall; start search; forwards(200); //台から降りる動作 } task search() { while(true) { if(SENSOR_1 <= 39) //青又は黒のパックが見つかるまで { repeat(3) { forwards(200); turn_left(35); turn_right(70); turn_left(35); } turn_left(120); //パックを探しながら往復 } else //パックを見つけた場合 { forwards(200); //パックに向かって前進 start check_sensors; //パックが緑か黒かのチェック } } } task check_sensors() { while(true) { if(SENSOR_1 < 40) //黒の場合 { backwords(20); turn_left(30); stop check_sensors; //パックを放して45度旋回 } else //緑の場合 { turn_left(60); OnFwd(OUT_A+OUT_C);until(SENSOR_2 <= 39); start comeback; } } } task comeback() { ClearTimer(0); do { stop search; ClearMessage(); SendMessage(); until(Message() != 0); if(Message() == ){PlaySound(1);wait(100);SendMessage();}; if(Message() == ){PlaySound(3);wait(100);forwards(500);backwards(200);turn_left(120);}; Off(OUT_A+OUT_C); } until (Timer(0) < 150); turn_right(40); start search; } task wall() { while(true) { if(SENSOR_3 == 1) { stop search; backwards(100); turn_left(120); start search; } } }