[[2006a/C2/課題3左]] #define go_straight OnFwd(OUT_A+OUT_C); #define Standard_of_light 50 #define turn_time 200 #define Borderline_S 5 #define Borderline_L 20 task play_Ride_of_the_Vallyries() { #define vfa3 349*vk #define vra 440*vk #define vsi 494*vk #define vDo 523*vk #define vre 587*vk #define vmi 659*vk #define vfa 698*vk #define vfa2 740*vk #define vra2 880*vk #define vn 3 #define vt 5 #define vk 1 #define vT 1 while(true){ PlayTone(vsi,6*vn);Wait(6*vn+vt); PlayTone(vfa3,2*vn);Wait(2*vn+vt);Wait(vn); PlayTone(vsi,3*vn);Wait(3*vn+vt);Wait(vn); PlayTone(vre,12*vn);Wait(12*vn+vt); PlayTone(vsi,12*vn);Wait(12*vn+vt); PlayTone(vre,6*vn);Wait(6*vn+vt); PlayTone(vsi,2*vn);Wait(2*vn+vt);Wait(vn); PlayTone(vre,3*vn);Wait(3*vn+vt);Wait(vn); PlayTone(vfa2,12*vn);Wait(12*vn+vt); PlayTone(vre,12*vn);Wait(12*vn+vt); PlayTone(vfa2,6*vn);Wait(6*vn+vt); PlayTone(vre,2*vn);Wait(2*vn+vt);Wait(vn); PlayTone(vfa2,3*vn);Wait(3*vn+vt);Wait(vn); PlayTone(vra2,12*vn);Wait(12*vn+vt); PlayTone(vra,12*vn);Wait(12*vn+vt); PlayTone(vre,12*vn);Wait(12*vn+vt); PlayTone(vra,4*vn);Wait(4*vn+vt);Wait(vn*2); PlayTone(vre,6*vn);Wait(6*vn+vt);Wait(vn*2); PlayTone(vfa2,24*vn);Wait(24*vn+vt); } } sub follow_light() { while(((SENSOR_1<Standard_of_light)|| (SENSOR_1<Standard_of_light))) { int d; d=SENSOR_1-SENSOR_3; if ((-Borderline_S <= d) && (d <= Borderline_S)) {OnFwd(OUT_A+OUT_C);} //go if ((Borderline_S <d) && (d< Borderline_L)) {OnFwd(OUT_C);Float(OUT_A);} //sllowly_turn_right if (( Borderline_L <=d) && (d<= 100)) {OnFwd(OUT_C);OnRev(OUT_A);} //rapidly_turn_rigth if ((-Borderline_L <=d) && (d<-Borderline_S)) {OnFwd(OUT_A);Float(OUT_C);} //sllowly_turn_left if((-100 <=d) && (d< -Borderline_L)) {OnFwd(OUT_A);OnRev(OUT_C);} //rapidly_turn_left } } sub look_for_light() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); int light_max=0; int time=0; time=FastTimer(0); light_max=SENSOR_1; start play_Ride_of_the_Vallyries ; ClearTimer(0); while(FastTimer(0)<=turn_time){ OnFwd(OUT_C);OnRev(OUT_A); if(SENSOR_1>light_max) { time=FastTimer(0); light_max=SENSOR_1;} } Off(OUT_A+OUT_C); Wait(50); OnFwd(OUT_A);OnRev(OUT_C); Wait(turn_time-time); Off(OUT_A+OUT_C); Wait(50); } task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); look_for_light(); while(true){ if((SENSOR_1<Standard_of_light)||(SENSOR_1<Standard_of_light)) { follow_light(); }if((SENSOR_1<Standard_of_light) && (SENSOR_3<Standard_of_light)){ look_for_light(); stop play_Ride_of_the_Vallyries;} } }