課題3
#contents
*課題内容 [#ob7e69df]
 懐中電灯の光を追いかけて進むロボットを製作し、以下の中から2種類以上のプログラムを作成せよ。
 
 光源を見失った時には曲を演奏しながらぐるっと旋回して光源を探す
 光源を見失った時には明るさに比例した周波数の音を出しながら旋回して光源を探す
 光源を見失っていないときにはある曲を演奏し、見失った時には別の曲を演奏しながら光源を探す
 上記のいずれかに『光源に近づき過ぎると停止する』という機能を追加する
 ただし支給されているモータ、光センサ、タッチセンサはいくつ使ってもよい。


*プログラム1 [#ud194d51]
 #define top OnFwd(OUT_A+OUT_C);                     //top 直進
 #define right OnRev(OUT_C);OnFwd(OUT_A);        //right 右旋回
 #define left OnRev(OUT_A);OnFwd(OUT_C);          //left 左旋回 
 #define minus 15                               
 #define Do  523
 #define Re  587
 #define Mi  659
 #define Fa  698
 #define So 784
 #define La    880	
 #define Si   988
 #define So_ 392
 
 int light_max;                                                        //light_maxを定義
 int time_max;                                                        //time_maxを定義
 
 task main()
  {
    SetSensor(SENSOR_2,SENSOR_LIGHT);                 //センサー2を光センサーとする
      light_max=SENSOR_2;                                      //センサ−2をlight_maxに指定
      time_max=Timer(0);                                        //time_maxをTimer(0)に指定
    ClearTimer(0);                                                   //Timer(0)をリセット
     while(Timer(0)<=14)                                        //Timer(0)が14以下のとき
    {
        right;                                                             //右旋回
       if(SENSOR_2>light_max)                                 センサ−2が最大値より大きければ       
      {
         ClearTimer(1);                                              //Timer(1)をリセット
         light_max =SENSOR_2 ;                                //センサ−2を最大値に指定
      }
       else                                                                //そうじゃなければ
      {
         light_max = light_max;                                //light_maxをそのままで
         time_max =Timer(1);                                   //time_maxをTimer(1)に指定
      }
    }
    ClearTimer(1);                                                   //Timer(1)をリセット      
     while(Timer(1)<= time_max)                            //Timer(1)がtime_max以下の時
    {
      left;                                                                 //左旋回
    }                         
     while(true)                                                        
    {
       if(SENSOR_2>= light_max-minus)                  //センサー2が最大値以上のとき
      {
        top;                                                               //演奏しながら直進
        PlayTone(Mi,25); Wait(35);                             
     PlayTone(Mi,25); Wait(50); 
     PlayTone(Mi,25); Wait(50); 
     PlayTone(Do,25); Wait(30); 
     PlayTone(Mi,40); Wait(45); 
     PlayTone(So,50); Wait(100);
     PlayTone(So_,50); Wait(100);
      }                 
       if(SENSOR_2< light_max-minus)                     //センサ−2が最大値より小さいとき
      {
        right;                                                             //右旋回
          ClearTimer(2);                                              //Timer(2)をリセット
       until((SENSOR_2>= light_max-minus)||(Timer(2)==5));  //センサ−2が最大値以上、またはTimer(2)が5まで
         }
       if(SENSOR_2< light_max-minus)                     //センサ−2が最大値-マイナスより小さいとき
         {
          left;                                                              //左旋回
          until(SENSOR_2>= light_max-minus);          //センサ−2が最大値-マイナスまで
         }
   }
 }

*反省点 [#j2ca8008]
 センサー2個でやろうとして、結局できなくて1個でやってしまった。
#comment

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