[[2013b/Member]] #define HP 7 #define LP 2 #define THRESHOLD 36//ライントレース用閾値 #define turn_right1 OnFwd(OUT_A); #define go_forward OnRev(OUT_A); #define TIME_TRACE1 3//トレースの1回の判断で待つ時間 #define TIME_TRACE2 500//「4」で本体を90度回転させる地点を指定する値 #define NB_COUNT 4//交差点識別用の値 #define STACK 11// task play_music() { PlayTone(740,28);Wait(5); PlayTone(587,28);Wait(5); PlayTone(440,28);Wait(5); PlayTone(587,28);Wait(5); PlayTone(659,28);Wait(5); PlayTone(880,61);Wait(5); PlayTone(440,28);Wait(5); PlayTone(659,28);Wait(5); PlayTone(740,28);Wait(5); PlayTone(659,28);Wait(5); PlayTone(440,28);Wait(5); PlayTone(587,80); } task main() { SetSensor(SENSOR_2,SENSOR_LIGHT); SetPower(OUT_A,HP); int nbk=0; int ncros=0; //1.黒線に当たるまで前進 OnRev(OUT_A); until (SENSOR_2<=THRESHOLD); //2.左折しライントレース turn_right1; Wait(400); ClearTimer(0); while(FastTimer(0)<=1000){ if(SENSOR_2<THRESHOLD){go_forward;} else{turn_right1;} Wait(TIME_TRACE1); } //缶積み start play_music; SetPower(OUT_BC,2); OnFwd(OUT_B);Wait(68);Off(OUT_B); stop play_music; while(ncros<2){//1 while(nbk<NB_COUNT){//2 if(SENSOR_2<THRESHOLD){go_forward;nbk++;} else{turn_right1;nbk=0;} Wait(TIME_TRACE1); }//2 Wait(50); turn_right1;Wait(NB_COUNT*TIME_TRACE1); nbk=0; ncros++; go_forward;Wait(60); }//1 while(nbk<NB_COUNT){//1 if(SENSOR_2<THRESHOLD){go_forward;nbk++;} else{turn_right1;nbk=0;} Wait(TIME_TRACE1); }//1 turn_right1;Wait(350); go_forward;Wait(200); turn_right1;Wait(170); until(Message()==STACK); start play_music; OnFwd(OUT_C);Wait(1000); OnRev(OUT_B);Wait(68);Off(OUT_BC); stop play_music; turn_right1;Wait(350);Off(OUT_A); ClearMessage(); repeat(2){ until(Message()==STACK); OnFwd(OUT_B);Wait(68);Off(OUT_B); ClearMessage(); until(Message()==STACK); OnFwd(OUT_C);Wait(1000); OnRev(OUT_B);Wait(68);Off(OUT_BC); turn_right1;Wait(350);Off(OUT_A); ClearMessage(); } OnRev(OUT_A); Wait(170); go_forward; Wait(600); Off(OUT_A); }