2006a/C2/課題2右


線をゆくロボット

1度目の挑戦...OTZ

ifの中にifを入れる事で、曲がる事ができるか挑戦してみたプログラム。

一度目のifで線の上に乗った事を感知して、二度目のifで線をおりた事を感知して進めるようにして、また、ぶつかった際にはそ の場で回転し、線に乗れた事を感知したら少し回転するようにして再び線に乗るように考えた。   

ifの中にifを入れたプログラム

	
#define THRESHOLD 40   //

task main ()
{
   SetSensor(SENSOR_1, SENSOR_LIGHT);
   SetSensor(SENSOR_2, SENSOR_TOUCH);
   SetSensor(SENSOR_3, SENSOR_LIGHT);

   OnFwd(OUT_A+OUT_C);
   while (true) {
           if (SENSOR_1 < THRESHOLD){  //右の光が線に乗ったとき右に曲がる
           Rev(OUT_A);
           if (SENSOR_1 > THRESHOLD){  //降りたら再び進む
           Fwd(OUT_A);}
       }
       if (SENSOR_3 < THRESHOLD){    //左の光が線に乗ったら左に曲がる
           Rev(OUT_C);
           if (SENSOR_3 > THRESHOLD){  //降りたら再び進む
           Fwd(OUT_C);}
       }
           if(SENSOR_2 == 1)       //障害物にぶつかったら反転して後ろに進む
          {
           Rev(OUT_A);
           until(SENSOR_1 < THRESHOLD)
           Rev(OUT_A);
           Wait(30);
           Fwd(OUT_A);
          }
   }
 }

結果

失敗...OTZ ifの中のifはどうやら働かないらしく、片方が回転して線からで てもモーターが前回転せず、さらにもう片方のセンサーが反応す るとバックし続けてしまった... 幸いな事は、ぶつかった際のプログラムはうまくいった事です

二度目の挑戦...

上手くいったのですが、プログラムを見てもらえばわかると思 うんですが、ただ単に前のプログラムのifを別々にしただけ です...それだけで上手くいくなんて、なんだかなぁ...OTL

ネオプログラム

	#define THRESHOLD 40 

task main ()
{SetSensor(SENSOR_1, SENSOR_LIGHT);
 SetSensor(SENSOR_2, SENSOR_TOUCH);
 SetSensor(SENSOR_3, SENSOR_LIGHT);
 OnFwd(OUT_A+OUT_C);
 while (true) 
   {      if(SENSOR_1 < THRESHOLD) //線に乗ったら降りる
          {Rev(OUT_A);}
          if(SENSOR_1 > THRESHOLD) //線から降りてたら進む
          {Fwd(OUT_A);}
          if(SENSOR_3 < THRESHOLD) //線に乗ったら降りる
          {Rev(OUT_C);}
          if(SENSOR_3 > THRESHOLD) //線から降りてたら進む
          {Fwd(OUT_C);}
          if(SENSOR_2 == 1)     //障害物にあたったら反転して進む
          {Rev(OUT_A);
           until(SENSOR_1 < THRESHOLD)
           Rev(OUT_A);
           Wait(30);
           Fwd(OUT_A);}
   }
 }

コメント〜

よろしければコメントどうぞ〜



トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-07-21 (金) 16:59:58