- 追加された行はこの色です。
- 削除された行はこの色です。
[[2007a/A9/ロボコン]]
#contents
*箱を搭載する際のプログラム [#rb128032]
**上のRCX [#h3afc5e4]
#define TURN_TIME 237 //180
#define TURN_TIME2 110 //90
#define COLLECT_TIME1 897 //1番上の箱の回収に要する時間
#define COLLECT_TIME 667 //その他の箱の回収に要する時間
#define BACK_TIME 30 //回転の時に箱をまきこまないように後退する時間
#define BACK_TIME2 130 //搭載部分を箱側にむけたあと、回収するための後退時間
#define TURN_MOVE 70 //90度まがるときに、回転の中心を交差点上にもってくる時間
task main() {
ClearMessage();
while(true){
if(Message()==1){ //1のメッセージを受信したら
OnRev(OUT_C);Wait(90);Off(OUT_C); //後ろのアームを開く
Wait(BACK_TIME+BACK_TIME2+TURN_TIME-90); //BACK_TIME+TURN_TIME+BACK_TIME2-90
OnFwd(OUT_A+OUT_C);Wait(160);Off(OUT_C);
Wait(100);
Off(OUT_A);
OnRev(OUT_C);Wait(90);Off(OUT_C);
Wait(120);
OnFwd(OUT_A+OUT_C);Wait(160);Off(OUT_C);
Wait(110);Off(OUT_A+OUT_C);
ClearMessage();
}if(Message()==2){ //2のメッセージを受信したら
OnRev(OUT_C+OUT_B); Wait(170); //BCを開いて箱を離す
Off(OUT_C+OUT_B); //本体が箱を積んだ地点から離れるのを待つ
Wait(250);
OnFwd(OUT_C+OUT_B);Wait(70);Off(OUT_C); //離れたので、腕?を閉じる
Wait(80);Off(OUT_B);
ClearMessage();
}if(Message()==3){
OnRev(OUT_B+OUT_C);Wait(90);Off(OUT_C+OUT_B); //後ろの腕?を広げる
Wait(BACK_TIME+BACK_TIME2+TURN_TIME-90); //BACK_TIME+BACK_TIME2+TURN_TIME-90
OnFwd(OUT_A+OUT_C);Wait(70);
OnFwd(OUT_B+OUT_A);Wait(40);Off(OUT_C);
Wait(40);Off(OUT_B);
Wait(250);
Off(OUT_A);
ClearMessage();
}if(Message()==4){
OnFwd(OUT_A+OUT_C);Wait(70);
OnFwd(OUT_B+OUT_A);Wait(40);Off(OUT_C);
Wait(40);Off(OUT_B);
Wait(250);
Off(OUT_A);
ClearMessage();
}
}}
**下のRCX [#o4e3cd06]
注※箱搭載のtaskの抜粋なので、変数などは全体のプログラムのほうをご覧ください。
task box_collect() //ライントレースを停止して箱を回収する
{
ClearMessage();
stop line_trace;
SendMessage(1); //上のRCXに通信。箱の回収
OnFwd(MOTOR); Wait(BACK_TIME); Off(MOTOR); //トレースを停止して後退
turn_count2=2; turn_right(); //180度右回転
OnFwd(MOTOR); Wait(BACK_TIME2); Off(MOTOR); Wait(270); //上のBが開いた状態で後退してもう一方のRCXのほうの回収時間の経過を待つ。
}
task box_collect1() //ライントレースを停止して箱を回収する(一番上専用)
{
ClearMessage();
stop line_trace;
SendMessage(3); //上のRCXに通信。箱の回収
OnFwd(MOTOR); Wait(BACK_TIME); Off(MOTOR); //トレースを停止して後退
turn_count2=2; turn_right(); //180度右回転
OnFwd(MOTOR); Wait(BACK_TIME2); Off(MOTOR); //上のBが開いた状態で後退
OnRev(OUT_B);Wait(400); Off(OUT_B); //モーターBを動かす時間(4)秒
}
**コメントをどうぞ。 [#rb97e39c]
#comment