[[2006a/C3]] #define Do 523 #define Re 587 #define Mi 659 #define Fa 698 #define So 784 #define Ra 880 task play_music() { while (true) { PlayTone(Do,30); Wait(40); PlayTone(Do,30); Wait(40); PlayTone(So,30); Wait(40); PlayTone(So,30); Wait(40); PlayTone(Ra,30); Wait(40); PlayTone(Ra,30); Wait(40); PlayTone(So,70); Wait(80); PlayTone(Fa,30); Wait(40); PlayTone(Fa,30); Wait(40); PlayTone(Mi,30); Wait(40); PlayTone(Mi,30); Wait(40); PlayTone(Re,30); Wait(40); PlayTone(Re,30); Wait(40); PlayTone(Do,70); Wait(80); } } #define turn_right OnFwd(OUT_A);OnRev(OUT_C); #define turn_left OnRev(OUT_A);OnFwd(OUT_C); #define go_straight OnFwd(OUT_A+OUT_C);Wait(10); task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); while(true){ if(SENSOR_1>=40&&SENSOR_3>=40){ stop play_music; go_straight; } if(SENSOR_1<40&&SENSOR_3>=40&&SENSOR_1<SENSOR_3){ stop play_music; turn_right; } if(SENSOR_1>=40&&SENSOR_3<40&&SENSOR_1>SENSOR_3){ stop play_music; turn_left; } if(SENSOR_1<40&&SENSOR_3<40){ turn_right; start play_music; } } } } #define blackline 40 int frag; int step; sub linetrace (){ if ((SENSOR_1<=blackline)&&(SENSOR_3>=blackline)){ OnFwd (OUT_C);OnRev (OUT_A); } if ((SENSOR_1>=blackline)&&(SENSOR_3<=blackline)){ OnFwd (OUT_A);OnRev (OUT_C); } if ((SENSOR_1<=blackline)&&(SENSOR_3<=blackline)){ frag++; OnFwd (OUT_A+OUT_C); Wait(010); } if ((SENSOR_1>=blackline)&&(SENSOR_3>=blackline)){ OnFwd (OUT_A+OUT_C); } } sub go_straight (){ OnFwd (OUT_A+OUT_C); } sub go_back (){ OnRev (OUT_A+OUT_C); } sub turn_R (){ OnFwd (OUT_A+OUT_C);Wait(025); OnRev (OUT_C);Wait(040);Off(OUT_A+OUT_C); } sub turn_L (){ OnFwd (OUT_C+OUT_A);Wait(025); OnRev (OUT_A);Wait(040);Off(OUT_A+OUT_C); } sub hold_can() { OnFwd(OUT_B);Wait(200);Off(OUT_B); } sub part_can() { OnRev(OUT_B);Wait(300);Off(OUT_B); } task main(){ SetSensor (SENSOR_1, SENSOR_LIGHT); SetSensor (SENSOR_3, SENSOR_LIGHT); frag=0; step=1; while (true){ Wait(500); hold_can(); if (step==1){ Wait(050); go_back (); turn_R (); step=2; } if (step==2){ linetrace (); if (frag==5){ frag=6; turn_L (); step=3; } } if (step==3){ linetrace (); if (frag==7){ OnFwd(OUT_A+OUT_C);Wait(50); part_can(); OnFwd(OUT_A+OUT_C);Wait(50); frag=8; step=4; } } if(step==4){ OnRev(OUT_A+OUT_C);Wait(100); if (frag==9){ turn_L (); frag=10; step=5; } } if(step==5){ linetrace(); if(frag==12){ turn_R(); frag=13; step=6; } } if(step==6){ linetrace(); if(frag==13){ go_straight();Wait(50); frag=14; step=7; } } if(step==7){ step=1; frag=0; } } }