- 追加された行はこの色です。
- 削除された行はこの色です。
[[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
int light_max=0;
int time=0;
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;}
}
}