[[2006a/B5]]
**光を追いかけるロボット [#i150c5d2]
*光源を見失った時には明るさに比例した周波数の音を出しながら旋回して光源を探すプログラム [#ea631c4d]
*光を追いかけるロボット [#i150c5d2]
**光源を見失った時には明るさに比例した周波数の音を出しながら旋回して光源を探すプログラム [#ea631c4d]

 task main ()
 {
 SetSensor (SENSOR_1, SENSOR_LIGHT);
 SetSensor (SENSOR_2, SENSOR_LIGHT);
 while (true)
 { 
   if(SENSOR_1 > SENSOR_3)   //SENSOR_1の値がSENSOR_3の値より大きい場合
   {
     OnFwd(OUT_A);
     Off(OUT_C);
       PlayTone(SENSOR_1 * 10, 3);   //SENSOR_1の値の10倍の周波数の音を出しながら右に旋回
   SetSensor (SENSOR_1, SENSOR_LIGHT);
   SetSensor (SENSOR_2, SENSOR_LIGHT);
   while (true)
     { 
        if(SENSOR_1 > SENSOR_3)               //SENSOR_1の値がSENSOR_3の値より大きい場合
            {
                OnFwd(OUT_A);
                Off(OUT_C);
                PlayTone(SENSOR_1 * 10, 3);   //SENSOR_1の値の10倍の周波数の音を出しながら右に旋回
             }
        if(SENSOR_1 < SENSOR_3)               //SENSOR_3の値がSENSOR_1の値より大きい場合
            {
                OnFwd(OUT_C);
                Off(OUT_A);
                PlayTone(SENSOR_3 * 10, 3);   //SENSOR_3の値の10倍の周波数の音を出しながら左に旋回
            }
      }
 }

***工夫 [#ecc8422d]
-二つのセンサーに角度をつけ、左右のセンサーのとる値がはっきり分かれるようにした

#ref(2006a/B5/課題3右/robo01.JPG);
**光を見失ったら、曲を演奏しながら光を探す [#dccc4295]


 //------------------------音楽-----------------------
 #define Do  523
 #define Re  587
 #define Mi  659
 #define Fa  698
 #define Sol 784
 #define Ra 880
 #define Si 988
 #define Doa 1047
 #define Rea 1175
 #define Mia 1319
 #define Faa 1397
 task music()                                //音楽演奏用タスク[music]
 {
     while (true)                         //↓演奏プログラム[高橋]
     {
         PlayTone(Mi,15); Wait(20);                   //も
         PlayTone(Sol,15); Wait(20);         //え
         PlayTone(Doa,15); Wait(20);         //あ
         PlayTone(Doa,35); Wait(40);         //が〜
         PlayTone(Doa,55); Wait(60);         //れ〜
         PlayTone(Mi,15); Wait(20);          //も
         PlayTone(Sol,15); Wait(20);                  //え
         PlayTone(Doa,15); Wait(20);                  //あ
         PlayTone(Doa,35); Wait(40);                  //が〜
         PlayTone(Doa,55); Wait(60);                  //れ〜
         PlayTone(Fa,15); Wait(20);                   //も
         PlayTone(Ra,15); Wait(20);                   //え
         PlayTone(Doa,15); Wait(20);                  //あ
         PlayTone(Doa,35); Wait(40);                  //が〜
         PlayTone(Doa,55); Wait(60);                  //れ〜
         PlayTone(Si,15); Wait(20);                   //が
         PlayTone(Ra,15); Wait(20);                   //ん
         PlayTone(Si,15); Wait(20);                   //だ
         PlayTone(Si,95); Wait(100);                  //む〜
     }
   if(SENSOR_1 < SENSOR_3)   //SENSOR_3の値がSENSOR_1の値より大きい場合
   {
     OnFwd(OUT_C);
     Off(OUT_A);
       PlayTone(SENSOR_3 * 10, 3);   //SENSOR_3の値の10倍の周波数の音を出しながら左に旋回
   }
  }
 }
 //----------------------音楽ここまで-----------------------
 //
 //-------------------------メイン--------------------------
 //
 task main ()
 {
   SetSensor (SENSOR_1, SENSOR_LIGHT);             //センサー1,2を光センサーに設定
   SetSensor (SENSOR_2, SENSOR_LIGHT);
   int music_flag = 0;                           //変数(スイッチ)music_flagを作る 初期値0
 //-----------------------↓-繰り返し-↓--------------------
   while (true)      
     {
     //
     //========センサー1========
       if(SENSOR_1 < 60 )                       //センサー1の値が60以下のとき
          {    
             if (music_flag == 0)                //music_flagが0ならば
                 {
                   start music;              //演奏をスタートし
                   music_flag = 1;            //music_flagの値を1に置き換え
                 }  
          }else{                          //センサー1が60以上のとき
             if (music_flag == 1)                 //music_flagが1ならば
                 {
                   stop music;             //演奏をストップし
                   music_flag = 0;           //music_flagの値を0に置き換え
                 }   
               }
   //  
   //=========センサー3========
     if(SENSOR_3 < 60 )                         //センサー3の値が60以下のとき
          {   
             if (music_flag == 0)              //music_flagが0ならば
                 {
                  start music;             //演奏をスタートし
                  music_flag = 1;           //music_flagの値を1に置き換え
                 }  
          }else{                        //センサー3が60以上のとき  
              if (music_flag == 1)               //music_flagが1ならば
                 {
                  stop music;             //演奏をストップし
                  music_flag = 0;           //music_flagの値を0に置き換え
                 }
               }
    //
    //==========光を追いかける基本プログラム=========
      if(SENSOR_1 > SENSOR_3)                   //センサー1がセンサー3より大きければ
           {
             OnFwd(OUT_A);                        //Aを回転
             Off(OUT_C);
            }
      if(SENSOR_1 < SENSOR_3)                   //センサー3がセンサー1より大きければ
           {
             OnFwd(OUT_C);                      //Cを回転
             Off(OUT_A);
           }
     }  
 //---------------------↑-繰り返し-↑-----------------------
     } 
 //丸岡

** [#ged5ee8c]

***分かりにくいので [#p69fa653]
 フローチャート始めました( 'Д')ノ
#ref(2006a/B5/課題3右/フローチャート.JPG);
-この動作をセンサー1,2それぞれについて行う
-music_flagが1のとき、音楽を演奏し、0のときは演奏をやめる
-同時に明るいほうへ進むプログラムも実行されている

 こちらは初期の誤作動時のプログラム
 センサーが60以下のとき、musicが何度もスタートされる
 その結果、最初のミの音だけが流れ続けた
#ref(2006a/B5/課題3右/フローチャート-1.JPG);

***工夫 [#o2a01b03]
-スイッチ[music_flag]を使い、start music が何度も繰り返される誤作動を修正した
-本体のタイヤ間の距離を、やや縮め、小回りがきくようにした
-二つのセンサーに角度をつけ、左右のセンサーのとる値がはっきり分かれるようにした



*コメントはこちらから↓ [#k9b1c1d4]
-フローチャートいいですね! -- [[ゆき(TA)]] &new{2006-07-14 (金) 14:51:39};
-「フローチャート始めました( 'Д')ノ」って冷やし中華みたいですばらしい(ぇ -- [[まいける(TA)]] &new{2006-07-21 (金) 00:31:44};

#comment


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