- 追加された行はこの色です。
- 削除された行はこの色です。
[[2004/A5]]
#define forwards(t) OnFwd(OUT_A+OUT_C);Wait(t);
#define backwards(t) OnRev(OUT_A+OUT_C);Wait(t);
#define turn_right(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);
#define turn_left(t) OnRev(OUT_A);OnFwd(OUT_C);Wait(t);
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_LIGHT);
SetSensor(SENSOR_3,SENSOR_TOUCH);
start wall;
forwards(200); //台から降りる動作
PlayTone(523,50);
start search;
}
task search()
{
while(true)
{
if(SENSOR_1 > 35) //緑又は黒のパックが見つかるまで
{
repeat(3)
{
forwards(200);
turn_left(35);
turn_right(70);
turn_left(35);
}
turn_left(120); //パックを探しながら往復
}
else //パックを見つけた場合
{
forwards(300); //パックに向かって前進
start check_sensors;
}
}
}
task check_sensors()
{
Off(OUT_A+OUT_C);
while(true)
{
if(SENSOR_1 < 30) //黒の場合
{
PlaySound(4);Wait(50);
backwards(200);
turn_left(60);
stop check_sensors; //パックを放して45度旋回
}
else //緑の場合
{
PlayTone(587,50);
turn_left(60);
OnFwd(OUT_A+OUT_C);until(SENSOR_2 < 35);
PlayTone(659,50);
start comeback;
}
}
}
task comeback()
{
ClearTimer(0);
do
{
stop search;
ClearMessage();
SendMessage();
until(Message() != 0);
if(Message() == ){PlaySound(1);Wait(100);SendMessage();Wait(100);}
if(Message() == ){PlaySound(5);Wait(100);forwards(500);backwards(200);turn_left(120);}
Off(OUT_A+OUT_C);
}
until (Timer(0) < 150);
turn_left(40);
start search;
}
task wall()
{
while(true)
{
if(SENSOR_3 == 1)
{
stop search;
PlaySound(4);Wait(50);
backwards(100);
turn_left(120);
start search;
}
}
}