[[2009a/A8/課題2右]]
 
 #define THRESHOLD 47     //閾値を47に設定
 
 sub right()        //右回りに向きを変える動作
 {  OnFwd(OUT_A);
    OnRev(OUT_C);
    Wait(80);
    Off(OUT_A+OUT_C);
    Wait(50); }

 sub left()                 //左回りに向きに向きを変える動作
 { OnRev(OUT_A);
   OnFwd(OUT_C);
   Wait(100);
   Off(OUT_A+OUT_C);
   Wait(50); }

 int a;

 task main ()
 {
 a=0;
 SetSensor(SENSOR_1,SENSOR_LIGHT);  //センサー1に光センサーをセット
 SetSensor(SENSOR_2,SENSOR_TOUCH);  //センサー2にタッチセンサーをセット
 SetSensor(SENSOR_3,SENSOR_LIGHT);  //センサ−3に光センサーをセット
 {a=0;
  SetSensor(SENSOR_1,SENSOR_LIGHT);  //センサー1に光センサーをセット
  SetSensor(SENSOR_2,SENSOR_TOUCH);  //センサー2にタッチセンサーをセット
  SetSensor(SENSOR_3,SENSOR_LIGHT);  //センサ−3に光センサーをセット
 
 while (a<2) {   //タッチセンサーが2回反応したら止まる
  while (a<2) {   //タッチセンサーが2回反応したら止まる
                if (SENSOR_1>THRESHOLD){     //センサ−1が白で 
                  if(SENSOR_3>THRESHOLD){    //センサー3も白のとき
                   OnFwd(OUT_A+OUT_C);
                   }
                   OnFwd(OUT_A+OUT_C);}
                else   //センサー3が黒のとき
                {
                  OnFwd(OUT_A);
                 Off(OUT_C);
                }
                }
                 { OnFwd(OUT_A);
                   Off(OUT_C); } }
                else{           //センサー1が黒で
                if(SENSOR_3>THRESHOLD){    //センサー3が白のとき
                OnRev(OUT_A);
                OnFwd(OUT_C);
                }
                    }
                OnFwd(OUT_C); } }
                if(SENSOR_2 == 1)    //タッチセンサーに何かがあたったとき
                {
                OnRev(OUT_A+OUT_C);   //少しバックして距離をとる
                Wait(25);
                Off(OUT_A+OUT_C);
                Wait(50);
                { OnRev(OUT_A+OUT_C);   //少しバックして距離をとる
                  Wait(25);
                  Off(OUT_A+OUT_C);
                  Wait(50);

                left();        //左回りに向きを変える

                OnFwd(OUT_A+OUT_C);   //障害物の横を通れるくらい移動する
                Wait(180);
                Off(OUT_A+OUT_C);
                Wait(50);

                right();         //右回りに向きを変える

                OnFwd(OUT_A+OUT_C);   //障害物の横を通過する
                Wait(300);
                Off(OUT_A+OUT_C);
                Wait(50);

                right();        //右回りに向きを変える

                OnFwd(OUT_A+OUT_C);   //ラインのところに戻る
                Wait(180);
                Off(OUT_A+OUT_C);
                Wait(50);

                left();         //進行方向を向く

                OnRev(OUT_A+OUT_C);   //少し下がることでいろんな場所に対応
                Wait(60);
                Off(OUT_A+OUT_C);
                Wait(50);
                a=a+1;
                }
                                
                
              }
 }
                a=a+1;              /障害物を避けた回数をカウント
                } 
   }
  }



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