#define OPEN 1 #define GO 2 #define PUT 3 #define BACK 4 #define THERESHOLD 47 #define HIPOWER 3 #define LOWPOWER 2 #define set_power_H SetPower(OUT_AC,HIPOWER); #define set_power_L SetPower(OUT_AC,LOWPOWER); #define go_forward set_power_H; OnRev(OUT_AC); #define turn_left1 set_power_L;\ OnFwd(OUT_A); OnRev(OUT_C); #define turn_left0 set_power_L;\ OnRev(OUT_C); Off(OUT_A); #define turn_right0 set_power_L;\ OnRev(OUT_A); Off(OUT_C); #define turn_right1 set_power_L;\ OnFwd(OUT_C); OnRev(OUT_A); #define STEP 1 #define nMAX 35 #define short_break Off(OUT_AC); Wait(100); #define cross_line go_forward set_power_H;\ OnFwd(OUT_AC); Wait(20); short_break; task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); int nOnline=0; ClearTimer(1); while (FastTimer(1) <= 500) { go_forward; if (SENSOR_3 > 48) { SendMessage(OPEN); Off(OUT_AC); } until (Message() == GO); go_forward; } ClearTimer(0); while (true) { if (SENSOR_1 < THERESHOLD -4) { turn_right1; } else { if (SENSOR_1 < THERESHOLD -2) { turn_right0; } else if (SENSOR_1 < THERESHOLD +2) { go_forward; } else if (SENSOR_1 < THERESHOLD +4) { turn_left0; } else { turn_left1; } if (SENSOR_3 > 48) { SendMessage(OPEN); Off(OUT_AC); } if (nOnline == 8) { OnFwd(OUT_A); OnRev(OUT_C); Wait(300); SendMessage(PUT); } until (Message() == GO); while (FastTimer(0) < nMAX) { if (SENSOR_1 < THERESHOLD -4) { turn_right1; } else { if (SENSOR_1 < THERESHOLD -2) { turn_right0; } else if (SENSOR_1 < THERESHOLD +2) { go_forward; } else if (SENSOR_1 < THERESHOLD +4) { turn_left0; } else { turn_left1; } ClearTimer(0); } Wait(STEP); } turn_left1; Wait(nMAX*STEP); cross_line; nOnline++; PlaySound(SOUND_CLICK); ClearTimer(0); if (SENSOR_3 > 48) { SendMessage(OPEN); Off(OUT_AC); } until (Message() == BACK); OnRev(OUT_AC); Wait(100); } } #define OPEN 1 #define GO 2 #define PUT 3 #define BACK 4 #define PowerA SetPower(OUT_A,0); #define PowerB SetPower(OUT_A,7); #define PowerC SetPower(OUT_C,0); #define PowerD SetPower(OUT_C,10); task main() { ClearMessage(); while (true) { PowerC; OnFwd(OUT_C); until (Message() == OPEN); PowerA; OnRev(OUT_A); Wait(40); PowerC; OnRev(OUT_C); Wait(90); PowerB; OnFwd(OUT_A); Wait(40); PowerD; OnFwd(OUT_C); Wait(160); SendMessage(GO); PowerC; OnFwd(OUT_C); until (Message() == PUT); PowerC; OnRev(OUT_C); Wait(50); PowerA; OnRev(OUT_A); Wait(40); SendMessage(BACK); } Wait(10); }