2011a

課題

課題2で作ったコース上にランダムに3個のテニスボールをおいて、ボールを中央のランタンに向かって運ぶまたは転がすロボットを作る。

条件

  • ボールのあった位置から直接転がす。
  • 運ぶ場合はボールのあった位置から最短距離で運ぶ。
  • ロータリーの中央にランタンを置き、3個のボールをランダムに置く。

メンバー

  • 大丈V(ボールを転がす)

ロボット

  • 最大の特徴は、ボールの捕らえ方。最初はアームでボールを囲う形だったが、タッチセンサーがうまく動作しなかったのでキャタピラでしっかりと捕らえるようにした。

プログラム

大丈V

int lmax ;                       //光の最大値
int tmax ;                       //光が最大の時間
task main()
{
   SetSensor(SENSOR_1,SENSOR_LIGHT);
   SetSensor(SENSOR_2,SENSOR_LIGHT);
   SetSensor(SENSOR_3,SENSOR_TOUCH);

   repeat(3){                     //以下を3回繰り返す  
       while(SENSOR_3 == 0){
           if(SENSOR_1 < 40){             //黒線を踏んだら
               OnFwd(OUT_A+OUT_B);Off(OUT_C);       //コンベアを回しながらライントレース
            }else{
             Off(OUT_A);OnFwd(OUT_B);OnFwd(OUT_C);
                  }
         }

     if(SENSOR_3 == 1){                //タッチセンサーが反応したら
           Off(OUT_A+OUT_B+OUT_C);
           lmax = 0;                  //最大値をリセット
           ClearTimer(0);               //タイマーをリセット
           while(FastTimer(0) < 340){         //340は1回転の時間
               OnFwd(OUT_A);OnRev(OUT_C);       //1周して
               if(SENSOR_2 > lmax){          //光の最大値を探す
                  SENSOR_2 == lmax;
                  tmax = FastTimer(0);         //光が最大だった時間を記憶
                   }
              }
       OnRev(OUT_A);                 //最大のところまで回転
       OnFwd(OUT_C);
       Wait((340-tmax));
       Off(OUT_A+OUT_C);

       OnRev(OUT_B);Wait(150);                        //ボールを前に出す
       OnRev(OUT_A);                 //ボールの横につき
       OnFwd(OUT_C);
       Wait(60);
       OnFwd(OUT_A+OUT_C);Wait(50);
       OnFwd(OUT_A);OnRev(OUT_C);Wait(150);      //打つ!
       OnFwd(OUT_A+OUT_C);until(SENSOR_1 < 40);       //ライントレースに戻る
   }
}

添付ファイル: file110707_1823~03.jpg 92件 [詳細] file110707_1823~02.jpg 97件 [詳細] file110707_1823~01.jpg 100件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-08-05 (金) 20:06:24 (2941d)