[[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