[[2006b/A1/kuroneko]]

衝突後回り込むプログラムです。

 #define time 160
 
 sub turn_r()                     直角に右へ曲がります。
  {
       OnRev(OUT_C);
       Wait(96);
       OnFwd(OUT_C);
  }
 
 sub turn_l()                 直角に左へ曲がります。
  {
       OnRev(OUT_A);
       Wait(96);
       OnFwd(OUT_A);
  }
 
 task main()
  {
      SetSensor(SENSOR_1,SENSOR_LIGHT);
      SetSensor(SENSOR_2,SENSOR_TOUCH);
      SetSensor(SENSOR_3,SENSOR_LIGHT);
 
 
      while(true)
       {
           OnFwd(OUT_A+OUT_C);
 
 
           if(SENSOR_1<40)           左のセンサーが黒線の上に来たら・・・↓
            {
                Off(OUT_A);      左へ大きく少しだけ曲がります。
                Wait(5);
                if(SENSOR_1<40)        まだ黒線の上にいるようなら・・・↓
                 {
                     OnRev(OUT_A);     左モーターを止めただけの先ほどと違い、
                     until(SENSOR_1>40);   左モーターを逆回転させより小さく回転させます。
                 }
            }
 
 
         if (SENSOR_3<40)        上の左右逆版です。
          {
              Off(OUT_C);
              Wait(5);
              if(SENSOR_3<40)
               {
                   OnRev(OUT_C);
                   until(SENSOR_3>40);
               }
          }
 
 
         if(SENSOR_2==1)         衝突したら・・・
          {
              OnRev(OUT_A+OUT_C);  ちょっとバックします。
              Wait(30);
              sub turn_r();          右へ旋回して少し前進。
              Wait(time);
              sub turn_l();          左へ旋回して少し前進。
              Wait(time);
              sub turn_l();          左へ旋回して前進。これでコの字を描きます。
              until(SENSOR_1<40);  黒線の上に戻ります。
              Wait(40);
              sub turn_r();
          }
 
 
      }
  }

[[衝突後Uターンするプログラムはこちら。>2006b/A1/kuroneko/2nd_robot-t2]]
[[衝突後Uターンするプログラムはこちら。>2006b/A1/kuroneko/2nd_robot-return]]

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