2007a/A10/課題3右

3.ゆっくり動く懐中電灯に向かって進み、懐中電灯の動きが止まればブロックを投げる(担当:タマヂャン)

#define RUN_TIME 020                
#define TURN_TIME 138               //一周に要する時間(ロボを走らせる場所によって異なる)
sub turn_left()
{OnRev(OUT_A);Wait(RUN_TIME);}
sub turn_right()
{OnFwd(OUT_A);Wait(RUN_TIME);}
sub throw()
{OnRev(OUT_C);Wait(100);}
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);        //センサ1を光センサと定義
SetSensor(SENSOR_3,SENSOR_LIGHT);        //センサ3を光センサと定義
int i;                                   //変数iを定義(i:カウント)
int i_min=0,i_max=5;        
int time_max,light_max=0;                //光の最大値とその時の時間の変数の初期値を0に
int now,last=0;                          //変数nowとlastを定義し初期値を0に(now:今回の動作、last:前回の動作)

(1)

ClearTimer(0);                           //タイマの値を0にする
OnRev(OUT_A);                            //(左に旋回し光を探し始める)
 while(FastTimer(0)<TURN_TIME)           //一周するまでwhileの中を繰り返す
   {
    if(SENSOR_1>light_max)               //センサ1の値が現在の光の最大値よりも大きい場合
    {
     light_max=SENSOR_1;                 //センサ1の値をlight_maxに代入
     time_max=FastTimer(0);              //その時の時間をtime_maxに代入
    }
   }
Off(OUT_A);
OnRev(OUT_A);Wait(time_max);             //光のある方向を向く

(2)

for(i=i_min;i<=i_max;)                  //カウントが0回から始まり5回以下の時forの中を繰り返す
 {
  if(SENSOR_1>SENSOR_3)                  //センサ1がセンサ3より大きい場合
    {turn_left();                        //左に曲がり
     now=1;                              //この動作をnow=1とする
     if(now==last)                  
       {i=0;                             //もし、今回の動作が前の動作と同じ場合、カウントを0にする
       }else{                            
        i+=1;                            //今回の動作が前の動作と違う場合、カウントを+1し、
        last=now;}                       //今回の動作をlastに代入する
 }else{turn_right();                     //センサ1がセンサ3より小さい場合、右に曲がり
       now=0;                            //この動作をnow=0とする
     if(now==last)                      
       {                                 //もし、今回の動作と前回の動作が同じ場合、カウントを0にし
        i=0;                            
       }else{                            //今回の動作と前回の動作が同じ場合、カウントを+1し
       i+=1;
       last=now;}                        //今回の動作をlastに代入
    }
 }
Off(OUT_A);                              //(カウントが5回になったら)停止し
throw();                                 //ブロック(ホイール)を投げる
Off(OUT_C);                              //
}

(1)は懐中電灯の光を探す。プログラム1とほぼ同じ。

ちなみに失敗作


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-07-05 (木) 14:40:14