[[2007a/A9/ロボコン]]
#contents
*箱を搭載する際のプログラム [#rb128032]
#ref(流れ.JPG)&br;


**上の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

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS