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ターンするプログラムはこちら。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-12-21 (木) 22:10:44