[[2018a/Member]] **pro [#zac6e450] #define THRESHOLD 50 #define SPEED_H 25 #define SPEED_L 20 #define OnRL(speedR,speedL)OnFwd(OUT_B,speedR);OnFwd(OUT_C,speedL); #define go_forward OnRL(SPEED_H,SPEED_H); #define turn_left1 OnRL(SPEED_L+20,-SPEED_L-20); #define turn_left0 OnRL(SPEED_L,0); #define turn_right0 OnRL(0,SPEED_L); #define turn_right1 OnRL(-SPEED_L-20,SPEED_L+20);Wait(t); #define STEP 1 #define short_break Off(OUT_BC);Wait(1000); #define CROSS_TIME 300 #define cross_line OnRL(SPEED_L,SPEED_L);Wait(CROSS_TIME);short_break; sub AtoJ(int t) { int n = 0; SetSensorLowspeed(S4); SetSensorLight(S3); while(n < 1){ if(SensorUS(S4) <= 7){ Off(OUT_BC); Wait(1000); go_forward; Wait(500); Off(OUT_BC); OnRev(OUT_A,50); Wait(1000); Off(OUT_A); n++; }else{ if (SENSOR_3 < THRESHOLD-14){ turn_right1; }else if(SENSOR_3 < THRESHOLD-7){ turn_right0; }else if(SENSOR_3 < THRESHOLD+7){ go_forward; }else if(SENSOR_3 < THRESHOLD+10){ turn_left0; }else if(SENSOR_3 < THRESHOLD+20){ turn_left1; }else{ turn_left1; } Wait(STEP); } } n = 0; } sub JtoL(int t) { int n = 0; int nOnline=0; SetSensorLight(S3); while(n < 4){ if (SENSOR_3 < THRESHOLD-14){ if(nOnline < 2){ OnFwd(OUT_BC,30); Wait(200); nOnline++; n++; }else{ turn_left1;Wait(1500); nOnline=0; n++; } }else{ if(SENSOR_3 < THRESHOLD-7){ turn_left0; }else if(SENSOR_3 < THRESHOLD+7){ go_forward; }else if(SENSOR_3 < THRESHOLD+10){ turn_right0; }else if(SENSOR_3 < THRESHOLD+20){ turn_right1; }else{ turn_right1; } nOnline=0; Wait(STEP); } } n=0; Off(OUT_BC); Wait(1000); turn_right1; } sub LtoH(int t) { int n = 0; SetSensorLight(S3); while(n < 6){ if (SENSOR_3 < THRESHOLD-14){ turn_right1; }else{ if(SENSOR_3 < THRESHOLD-7){ turn_right0; }else if(SENSOR_3 < THRESHOLD+7){ go_forward; }else if(SENSOR_3 < THRESHOLD+10){ turn_left0; }else if(SENSOR_3 < THRESHOLD+20){ turn_left1;Wait(420);/*電池依存*/ n++; }else{ turn_left1; n++; } Wait(STEP); } } n = 0; } sub HtoG(int t) { int n = 0; SetSensorLight(S3); while(n < 1){ if (SENSOR_3 < THRESHOLD-14){ cross_line; n++; }else{ if(SENSOR_3 < THRESHOLD-7){ turn_left0; }else if(SENSOR_3 < THRESHOLD+7){ go_forward; }else if(SENSOR_3 < THRESHOLD+10){ turn_right0; }else if(SENSOR_3 < THRESHOLD+20){ turn_right1; }else{ turn_right1; } Wait(STEP); } } n = 0; } sub GtoD(int t) { int n = 0; SetSensorLight(S3); while(n < 2){ if (SENSOR_3 < THRESHOLD-14){ Off(OUT_BC); Wait(1000); turn_right1; n++; }else{ if(SENSOR_3 < THRESHOLD-7){ turn_right0; }else if(SENSOR_3 < THRESHOLD+7){ go_forward; }else if(SENSOR_3 < THRESHOLD+10){ turn_left0; }else if(SENSOR_3 < THRESHOLD+20){ turn_left1; }else{ turn_left1; } Wait(STEP); } } n = 0; } sub FtoD(int t) { int n = 0; SetSensorLight(S3); while(n < 1){ if (SENSOR_3 < THRESHOLD-14){ OnFwd(OUT_BC,30); Wait(200); n++; }else{ if(SENSOR_3 < THRESHOLD-7){ turn_right0; }else if(SENSOR_3 < THRESHOLD+7){ go_forward; }else if(SENSOR_3 < THRESHOLD+10){ turn_left0; }else if(SENSOR_3 < THRESHOLD+20){ turn_left1; }else{ turn_left1; } Wait(STEP); } } n = 0; } sub DtoD(int t) { int n = 0; SetSensorLight(S3); while(n < 1){ if (SENSOR_3 < THRESHOLD-14){ turn_left1;Wait(t); OnRev(OUT_BC,30); Wait(t); Off(OUT_BC); OnFwd(OUT_A,50); Wait(1000); Off(OUT_A); OnRev(OUT_BC,30); Wait(90); Off(OUT_BC); turn_left1; Wait(t); n++; }else{ if(SENSOR_3 < THRESHOLD-7){ turn_right0; }else if(SENSOR_3 < THRESHOLD+7){ go_forward; }else if(SENSOR_3 < THRESHOLD+10){ turn_left0; }else if(SENSOR_3 < THRESHOLD+20){ turn_left1; }else{ turn_left1; } Wait(STEP); } } n = 0; } sub DtoC(int t) { int n = 0; SetSensorLight(S3); while(n < 2){ if (SENSOR_3 < THRESHOLD-14){ Off(OUT_BC); Wait(1000); cross_line; n++; }else{ if(SENSOR_3 < THRESHOLD-7){ turn_right0; }else if(SENSOR_3 < THRESHOLD+7){ go_forward; }else if(SENSOR_3 < THRESHOLD+10){ turn_left0; }else if(SENSOR_3 < THRESHOLD+20){ turn_left1; }else{ turn_left1; } Wait(STEP); } } n = 0; } task main() { AtoJ(1350); turn_left1; Wait(1000); go_forward; Wait(500); Off(OUT_BC); JtoL(100); LtoH(100); turn_left0; Wait(3000); HtoG(100); turn_left0; Wait(400); GtoD(740); FtoD(100); DtoD(1500); DtoC(100); }