- 追加された行はこの色です。
- 削除された行はこの色です。
[[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 > 37) //緑又は白のパックが見つかるまで
{
repeat(3)
{
forwards(200);
turn_left(50);
turn_right(100);
turn_left(50);
}
turn_left(100); //パックを探しながら往復
}
if(SENSOR_1 < 37) //パックを見つけた場合
{
forwards(400); //パックに向かって前進
start check_sensors;
}
if(SENSOR_1 < 29)
{
PlaySound(4);Wait(50);
backwards(200);
turn_left(60);
}
}
}
task check_sensors()
{
Off(OUT_A+OUT_C);
while(true)
{
if(SENSOR_1 < 30) //黒の場合
{
PlaySound(4);Wait(50);
backwards(200);
turn_left(80);
stop check_sensors; //パックを放して45度旋回
}
else //緑の場合
{
PlayTone(587,50);
turn_left(60);
forwards(100);
OnFwd(OUT_A+OUT_C);until(SENSOR_2 < 35);
PlayTone(659,50);
start comeback;
}
}
}
task comeback()
{
ClearTimer(0);
do
{
stop search;
ClearMessage();
SendMessage(188);
until(Message() != 0);
if(Message() == 189){PlaySound(1);Wait(100);SendMessage(190);Wait(100);}
if(Message() == 191){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;stop check_sensors;stop comeback;
PlaySound(4);Wait(50);
backwards(250);
OnRev(OUT_A);Off(OUT_C);Wait(120);
start search;
}
}
}
解説
このプログラムは基本的には左右に首を振って牛乳パックを探しながら往復し、白か黄緑のパックを見つけると回収(黒は回避する)、3号のもとへ運ぶというものです。
組み立てについて
また後で書きます。ねみ。