[[2004/B6/ロボコン]]

右のRCX キャタピラ担当

 /*RCX 右 キャタピラ*/
 int SEKIGAISEN;
 task BOUGAI()
 {
  Wait(128);
  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;
  OnFwd(OUT_A+OUT_C);
  until(SENSOR_3==1);
  Wait(350);
  Off(OUT_A+OUT_C);                 //台から降りる
  PlaySound(SOUND_CLICK);
  Wait(200);                        //アームを下げる間待つ
  OnRev(OUT_A+OUT_C);
  until(SENSOR_3==1);
  Off(OUT_A+OUT_C);                 //後ろの壁につくまで後退
  PlaySound(SOUND_CLICK);
  Wait(300);                        //アームが下がるまで待つ
  repeat(9999)
  {
   ClearTimer(0);
   OnFwd(OUT_C);
   Wait(100);
   OnFwd(OUT_A);
   until(SENSOR_1==1 || Timer(0) > 220);   //取り込むか22秒たつまで前進
   Off(OUT_A+OUT_C);
   PlaySound(SOUND_CLICK);                 //取り込んだら音を鳴らす 
   if(SENSOR_1 == 1 && SENSOR_2 > 40)      //白、緑の時
   {
    OnRev(OUT_A+OUT_C);
    until(SENSOR_3 == 1);
    PlaySound(SOUND_CLICK);
    Off(OUT_A+OUT_C);             //壁につくまで後退
    OnFwd(OUT_A);
    Wait(50);
    OnFwd(OUT_C);
    Wait(450);                    //スピンするスペース確保
    OnFwd(OUT_A); OnRev(OUT_C);
    Wait(910);
    Off(OUT_A+OUT_C);             //180°スピン
    until(SENSOR_3 == 1);         //アームが上がるまで待つ
    PlaySound(SOUND_CLICK);
    OnFwd(OUT_A+OUT_C);
    Wait(350); Off(OUT_A+OUT_C);  //アームあげたまま前進
    Wait(300);                    //紙パックを排出するまで待つ
    OnRev(OUT_A+OUT_C);
    Wait(500); Off(OUT_A+OUT_C);  //アームあげたまま後退
    Wait(480);                    //アームが下がるまで待つ
    OnFwd(OUT_A) ;OnRev(OUT_C);
    Wait(910);                    //180°スピン
    OnRev(OUT_A+OUT_C);
    until(SENSOR_3 == 1);
    Off(OUT_A+OUT_C);
   }
   else if(Timer(0) < 220)        //黒の時
   {
    OnFwd(OUT_C); OnRev(OUT_A);
    Wait(350); Off(OUT_A+OUT_C);  //左少しスピン
    Wait(350);                    //黒排出まで待つ
    OnFwd(OUT_A); OnRev(OUT_C);
    Wait(300); Off(OUT_A+OUT_C);  //右少しスピン
   }
   else
   {
    OnRev(OUT_A+OUT_C);
    until(SENSOR_3==1);
    Off(OUT_A+OUT_C);
    OnFwd(OUT_A+OUT_C);
    Wait(100); Off(OUT_A+OUT_C);
    until(SENSOR_3==1);
    Wait(430);
   }
  } 
 }
こちらもアームの上下の間はWaitしている。&br;
同時に動かすこともできるが、アームへの負担が大きいため&br;
逐一止まってアームを動かしている。

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