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している。
同時に動かすこともできるが、アームへの負担が大きいため
逐一止まってアームを動かしている。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2005-02-16 (水) 20:01:01