2005/C5/課題4

光を追いかけるロボット

ロボット本体

200602101518000.jpg

特徴

苦労した点

プログラム

#define go_straight OnFwd(OUT_A+OUT_C);           //直進
#define turn_right  OnFwd(OUT_A);OnRev(OUT_C);  //右回転
#define turn_left  OnFwd(OUT_C);OnRev(OUT_A);   //左回転
#define RUN_TIME 400               //回転時間

int light_R=0;  //右の光の最大値を定義
int light_L=0;  //左の光の最大値を定義

task main()
{     SetSensor(SENSOR_1,SENSOR_LIGHT);  //左の光センサー
      SetSensor(SENSOR_3,SENSOR_LIGHT);  //右の光センサー

  ClearTimer(0);   //タイマーをリセット
 
while(true){                          //無限に繰り返す            
      while(FastTimer(0)<RUN_TIME)  //始めに一回転して光の最大値を探す
        {turn_right;              //右回転する
         if(SENSOR_1>light_L)           //左センサーの値がlight_Lより大きいとき 
          {light_L=SENSOR_1;PlayTone(220,1);} //左センサーの値をlight_Lに代入
         if(SENSOR_3>light_R)         //右センサーの値がlight_Rより大きいとき
          {light_R=SENSOR_3;PlayTone(600,1);} //右センサーの値をlight_Rに代入
        }          
             
    if((SENSOR_1>=light_L)||(SENSOR_3>=light_R)) //どちらかのセンサーに光があたっているとき
     {go_straight;}  //直進
    if((SENSOR_1<light_L)&&(SENSOR_3<light_R)) //どちらにも光があたっていないとき
     {if(SENSOR_1>SENSOR_3){turn_left;}  //左が明るければ左回転
      if(SENSOR_3>SENSOR_1){turn_right;}   //右が明るければ右回転
     } 
   }                           
}

特徴

苦労した点

基本となるプログラムはすぐにできたのですが、何回やっても成功しなかった。そこで、隣のチームに聞いたところwhile(true)を入れるとうまくいくと知った。

感想

始めは、光センサーを車体の前後につけるタイプのロボットでプログラムしていたのですが、先生にできれば前に2つ付けたタイプのロボットにしてくださいと言われてやり直した。ほとんど、完成に近かっただけにショックだった。多分、授業中に言ったんだろうなぁ。人の話はしっかり聞くべきだと思った。プログラムは少し違うだけでうまくいかないので、難しいと感じた。

コメントをどうぞ



添付ファイル: file200602101518000.jpg 230件 [詳細]

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