- 追加された行はこの色です。
- 削除された行はこの色です。
[[2004/B6/ロボコン]]
左のRCX アーム担当
/*RCX 左 アーム*/
int SEKIGAISEN;
task BOUGAI()
{
repeat(9999)
{
repeat(256)
{
SEKIGAISEN = 0;
SendMessage(SEKIGAISEN);
SEKIGAISEN = SEKIGAISEN + 1 ;
}
}
}
task main()
{
SetSensor(SENSOR_1,SENSOR_TOUCH); //端子1にタッチセンサー(前)
SetSensor(SENSOR_2,SENSOR_LIGHT); //端子2にライトセンサー
SetSensor(SENSOR_3,SENSOR_TOUCH); //端子3にタッチセンサー(真中、後ろ共通)
start BOUGAI;
Wait(280); //台から降りるまで待つ
OnFwd(OUT_A);
until(SENSOR_3==1); //アームを一番上に上げる
OnRev(OUT_A);
Wait(200); Off(OUT_A); //アームをちょっと下げる
PlaySound(SOUND_CLICK);
until(SENSOR_3==1);
OnRev(OUT_A);
Wait(300); Off(OUT_A); //後ろの壁についたらアーム下げ
repeat(9999)
{
ClearTimer(0);
OnFwd(OUT_C);
until(SENSOR_1==1 || Timer(0) > 220); //取り込むまで取り込みを回す
Off(OUT_C);
PlaySound(SOUND_CLICK);
if(SENSOR_1==1 && SENSOR_2 > 37) //白、緑の時
{
until(SENSOR_3 == 1); //壁につくまでは何もしない
Wait(1410); //スピンする間待つ
OnFwd(OUT_A); Wait(530); //5.3秒経つか一番上に上がるまで
until(SENSOR_3==1); //アームを上げる
Off(OUT_A);
PlaySound(SOUND_CLICK);
Wait(350); //前進する間待つ
OnRev(OUT_C);
Wait(300); Off(OUT_C); //紙パック排出
Wait(500); //後退する間待つ
OnRev(OUT_A);
Wait(480); Off(OUT_A); //アームを下げる
until(SENSOR_3==1);
}
else if(Timer(0) < 220) //黒の時
{
Wait(350); //スピンする間待つ
OnRev(OUT_C);
Wait(350); Off(OUT_C); //黒排出
OnRev(OUT_C);
Wait(300); Off(OUT_C); //スピンする間待つ
}
else
{
OnRev(OUT_C);
Wait(300); Off(OUT_C);
until(SENSOR_3==1);
Wait(100); //前進する間待つ
OnFwd(OUT_A);
until(SENSOR_3==1);
Off(OUT_A);
OnRev(OUT_A);
Wait(430);
Off(OUT_A);
}
}
}
右のキャタピラ担当のRCXとの連携のためWaitが随所に盛り込まれている。&br;
出発後22秒たっても紙パックを取れなかったときは出発地点に戻るが、&br;
黒を取ってもタイマーをリセットしてしまうためそこだけは直したかった。&br;
とはいえタイマーを追加したのが前日ということもあり&br;
このあたりが人類の限界だと思い諦めた。