2005/C5/課題4

光を追いかけるプログラム

int t=50;  //索光時間
int m=0;  //光最大値
int b;   //タイマー用変数

task main ()
{
  SetSensor (SENSOR_3, SENSOR_LIGHT);
  SetSensor (SENSOR_1, SENSOR_LIGHT);
                                                     //ここから光源の位置を探索
  ClearTimer (0);
  while (Timer (0) <= t)     //制限時間
  {
    OnFwd (OUT_A);           //右回転
    OnRev (OUT_C);
    if (SENSOR_1 >= m)     //センサーが最大値を観測
      {
         ClearTimer (1);        //最大値を観測してからの時間計測開始
         m=SENSOR_1;
         PlaySound (SOUND_CLICK);
      }
  }
  Off (OUT_A+OUT_C);
                                                        //ここまで
  
  b=FastTimer (1);                            //最大値を観測してからの時間をセット
  PlaySound (SOUND_FAST_UP);
  OnFwd (OUT_C);                             //最大値観測地点まで逆回転してもどる。
  OnRev (OUT_A);
  Wait (b);
  Off (OUT_A+OUT_C);
  start follow;
}

task follow ()
{
   while (true)
   {
      if (SENSOR_1 > SENSOR_3)     //左の方が明るい
      {
         Off (OUT_A);                        //左折
         OnFwd (OUT_C);
      }
      if (SENSOR_1 < SENSOR_3)     //右の方が明るい
      {
         Off (OUT_C);                       //右折
         OnFwd (OUT_A);
      }
      OnFwd (OUT_AC);                  //左右の明るさが等しい・直進
   }
}

このプログラムは、まずどの方向が一番明るいかを調べてその方向を向くプログラムと、二つのセンサーのうち、より明るい方のセンサーの方向に曲がるプログラムとからなる。
追尾型プログラムの方は、動きが遅く、急激な光の変化には対応できないという欠陥がある。これを補うために急激に明るさが変化したら再び一番明るい方向を探すプログラムを書こうとしたが、完成していない。

コメントどうぞ


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-02-15 (水) 14:25:51