[[2009a/A5/課題2右]]へ戻る
 #define THERESHOLD 40 //闘値
 int SYOU //衝突変数――衝突した瞬間を見極める変数
 int RUN_TIME //パックを運ぶ時間――ここに下の変数を代入していく
 #difine RUN_TIME_F 200 //パックを運ぶ時間(1回目F)
 #difine RUN_TIME_J 300 //パックを運ぶ時間(2回目J)
 
 task main () //黒のラインを認識して、黒のラインに入るとそこからセンサーが外れるようなプログラム
 {
      SYOU = 0; //衝突変数に0を代入(まだ当たっていない状態)
      RUN_TIME =  RUN_TIME_F; //パックを運ぶ時間を1回目の値に設定
      SetSensor(SENSOR_2,SENSOR_TOUCH); //センサー2はタッチセンサー
      SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1は光学センサー
      SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3は光学センサー
      while(true){
         if (SENSOR_2 == 0){ //タッチセンサーが当たってないとき
           if (SENSOR_1>THERESHOLD){
                if (SENSOR_3>THERESHOLD){
                     OnFwd(OUT_A+OUT_C);
                } else {
                     Off(OUT_C);
                     OnFwd(OUT_A);
                }
           } else {
                if (SENSOR_3>THERESHOLD){
                     OnFwd(OUT_C);
                     Off(OUT_A);
                } else { //どちらも黒い線に入った場合
                     OnFwd(OUT_A+OUT_C);
                }
           }
         }
 
         if (SENSOR_2 == 1 ) { //タッチセンサーが当たっているとき
 
                if (SYOU == 0){ //衝突した瞬間
                     ClearTimer(0); //タイマーをセット
                     SYOU = 1; //衝突変数に1を代入
                }
                if (SYOU == 1){
                          if (FastTimer(0) == RUN_TIME){ //指定した時間経過したら
                               OnFwd(OUT_A);
                               OnRev(OUT_C);
                               Wait(200); //180度回転(右)
                               OnFwd(OUT_C);
                               OnRev(OUT_A);
                               Wait(200); //180度回転(左) これで正面を向く
                                         //それと同時にタッチセンサーに物体が当たっていない状態になる
                               SYOU = 0; //衝突変数に0を代入
 
                               if (RUN_TIME == RUN_TIME_F){ //一度目の衝突かどうかを判定
                                    RUN_TIME = RUN_TIME_J; //一度目なら次に運ぶ時間を二度目のものに設定
                               }else{
                                    RUN_TIME = RUN_TIME_F; //二度目なら次に運ぶ時間を一度目のものに設定
                               }
                          }
                } //ここまでSYOU == 1のときの動作
         } //ここまでタッチセンサーが当たっているときの動作
      }
 }


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS