[[2007a/A10/課題3右]]

*プログラム [#l078167e]
*プログラム [#l078167]

**1.全方向から懐中電灯の方向を探して、懐中電灯に向けてブロックを投げるプログラム(こんどー) [#f93de149]
 #define TURN_TIME 215               //一回転に要する時間(これはロボットを走らせる場所によって異なる)

 sub throw()
 {
 OnRev(OUT_C);Wait(200);Off(OUT_C);
 }

 task main()
 {
  SetSensor(SENSOR_1,SENSOR_LIGHT);       //センサ1を光センサと定義
  int time_peak,light_peak=0;             //光の明るさの最大値とその時の時間の変数の初期値を0にする
  ClearTimer(0);                          //タイマの値を0にする
  OnRev(OUT_A);

   while(FastTimer(0)<TURN_TIME)          //一周するまでwhileの中を繰り返す
    {
     if(SENSOR_1>light_peak)              //センサ1の値が現在の光の最大値よりも大きい場合
     {
      light_peak=SENSOR_1;                //センサ1の値をlight_peakに代入
      time_peak=FastTimer(0);             //その時の時間をtime_peakに代入
     }}
   OnRev(OUT_A);                          
   Wait(time_peak);                       //光の最大値を記憶したところまで回る
   Off(OUT_A);
   throw();                               //ブロック(ホイール)を投げる
 }

**2.ゆっくり動く懐中電灯に向かって進むプログラム(タマヂャン) [#n7a3bfe3]


 task main()
 {
  SetSensor(SENSOR_1,SENSOR_LIGHT);   //センサ1に光センサを定義
  SetSensor(SENSOR_3,SENSOR_LIGHT);   //センサ3に光センサを定義
   OnRev(OUT_A);                        //左に旋回(光を探し始める)

   while(true)                          //(whileの中を繰り返す)
    {
     if(SENSOR_1>SENSOR_3)             //センサ1の値がセンサ3の値よりも大きい
      {
       OnFwd(OUT_A);                    //右に旋回
      }
      if(SENSOR_1<SENSOR_3)            //センサ1の値がセンサ3の値よりも小さい
      {
       OnRev(OUT_A);                    //左に旋回
      }
    }
 }

**3.ゆっくり動く懐中電灯に向かって進み、懐中電灯の動きが止まればブロックを投げる(タマヂャン) [#e7324568]
 #define RUN_TIME 020                
 #define TURN_TIME 210               //一周に要する時間(ロボを走らせる場所によって異なる)

 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;                          //変数nowtとlastを定義し初期値を0に(now:今回の動作、last:前回の動作)

 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);             //光のある方向を向く

  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);                              //
 }


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS