[[2006a/C2/課題3左]]
#hr
CENTER:&size(25){光源を見失った時には明るさに比例した周波数の音を出しながら旋回して光源を探す};
#hr
 
RIGHT:カウンタ&counter; 
RIGHT:[[ロボティクス入門ゼミ]]
RIGHT:[[2006a/C2/課題3左に戻る>2006a/C2/課題3左#i359fd9c]]
 
--目次 
#contents


**プログラム内容 [#r4b254c3]
 #define timer 200
 //music nomber
 #define Do 523
 #define Re 587
 #define Mi 659
 #define Fa 698
 #define So 784
 #define Ra 880
 #define Si 988
 #define Do2 1047
 
 int touch;
 
 task music(){
     int tone;
     tone = (SENSOR_1 + SENSOR_3) / 2;
     while(1){
         if((tone <= 20) && (tone < 23)){
             PlayTone(Do,5); Wait(10);
         }else if((tone <= 23) && (tone < 26)){
             PlayTone(Re,5); Wait(10);
         }else if((tone <= 26) && (tone < 29)){
             PlayTone(Mi,5); Wait(10);
         }else if((tone <= 29) && (tone < 32)){
             PlayTone(Fa,5); Wait(10);
         }else if((tone <= 32) && (tone < 35)){
             PlayTone(So,5); Wait(10);
         }else if((tone <= 35) && (tone < 38)){
             PlayTone(Ra,5); Wait(10);
         }else if((tone <= 38) && (tone < 41)){
             PlayTone(Si,5); Wait(10);
         }else if((tone <= 41) && (tone < 44)){
             PlayTone(Do2,5); Wait(10);
         }
     }
 }
 
 task main(){
     SetSensor(SENSOR_1,SENSOR_LIGHT);
     SetSensor(SENSOR_3,SENSOR_LIGHT);
     touch = (SENSOR_1 + SENSOR_3) * 3 / 5;
     while(1){
         if((SENSOR_1 < touch) && (SENSOR_3 < touch)){
             if(SENSOR_1 > SENSOR_3){
                 trun_r();
             }else if(SENSOR_1 < SENSOR_3){
                 trun_l();
             }
         }else{
             stop music;
             straight();
         }
     }
 }
 
 void trun_r(void){
     start music;
     OnFwd(OUT_C);
     OnRev(OUT_A);
     until((SENSOR_1 >= touch) || (SENSOR_3 >= touch));
 }
 
 void trun_l(void){
     start music;
     OnFwd(OUT_A);
     OnRev(OUT_C);
     until((SENSOR_1 >= touch) || (SENSOR_3 >= touch));
 }
 
 void straight(void){
     if((SENSOR_1 >= touch) && (SENSOR_3 >= touch)){
         OnFwd(OUT_A+OUT_C);
     }else if((SENSOR_1 >= touch) && (SENSOR_3 < touch)){
         OnFwd(OUT_C);
         OnRev(OUT_A);
     }else if((SENSOR_1 < touch) && (SENSOR_3 >= touch)){
         OnFwd(OUT_A);
         OnRev(OUT_C);
     }
 }
----------
**プログラム説明 [#h47ed3dc]
-このプログラムは、光源を見失った時には明るさによって音を変化させながらぐるっと旋回して光源を探すプログラムです。マシンの状態はセンサー二つの時を想定して作りました。

-細かい作りは、光源を見失った時には曲を演奏しながらぐるっと旋回して光源を探すプログラムと全く同じです。

-唯一の相違点は、ライトを探すときに光の明るさによってなる音が変化するようにしている点です。
***音の変化 [#v5f246e1]
|CENTER:(tone <= 20) && (tone < 23)|CENTER:ドの音(Do)|
|CENTER:(tone <= 23) && (tone < 26)|CENTER:レの音(Re)|
|CENTER:(tone <= 26) && (tone < 29)|CENTER:ミの音(Mi)|
|CENTER:(tone <= 29) && (tone < 32)|CENTER:ファの音(Fa)|
|CENTER:(tone <= 32) && (tone < 35)|CENTER:ソの音(So)|
|CENTER:(tone <= 35) && (tone < 38)|CENTER:ラの音(Ra)|
|CENTER:(tone <= 38) && (tone < 41)|CENTER:シの音(Si)|
|CENTER:(tone <= 41) && (tone < 44)|CENTER:ドの音(Do2)|
-音の変化は3ずつ変化していくようにアナログ的に処理しています。本当は音の周波数を入力する部分にセンサーの値を入れて変化させたかったのですが、何故かうまくいかなかったので断念して、この形になりました。

----------
***コメント・感想・アドバイス [#v90aa74b]
#comment

--------
RIGHT:[[ロボティクス入門ゼミ]]
RIGHT:[[2006a/C2/課題3左に戻る>2006a/C2/課題3左#i359fd9c]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS