2006b/A6/R Room/mission 3

プログラム

製作者/TAKA

とりあえず一気に作るのは難しいと感じたので、別々に作りました。

旋回して、光を見つけてその方向に進む

#define TURN_TIME 300     // 一回転するときにかかる時間
                   
task main () {

 SetSensor (SENSOR_1,SENSOR_LIGHT);  // センサー1を光センサーに
 int light_max=0,time_max;  // light_maxとtime_maxを定義
  
while(true)   // trueのとき
{
 ClearTimer(0); // タイマー0をクリアー
 OnFwd(OUT_A);  // Aのモーターを正回転
 OnRev(OUT_C);  // Cのモーターを負回転 → 車体の回転
 
   while(FastTimer(0)<TURN_TIME) // 一回転の時間よりもFastTimer(0)の方が小さいとき
   {
     if(SENSOR_1>light_max)  // もしセンサー1がlight_maxよりも大きかったら
     {
      light_max=SENSOR_1; // センサー1をlight_maxに設定
      time_max=TURN_TIME-FastTimer(0)+10; // time_maxをこの時間に設定
     }
   }

    Off(OUT_A+OUT_C);  // モーターストップ

   OnFwd(OUT_A+OUT_C); // 前進

  }  }

音楽を鳴らすプログラム

  • チューリップの歌(題名がわかりません)
    #define Do 523         // 音の定義 ド 
    #define Re 587   //      レ
    #define Mi 659   //      ミ
    #define Fa 698   //      ファ
    #define So 784   //      ソ
    #define Ra 880   //      ラ
    #define Si 988    //      シ
    #define Doo 1047   //        ド
    
    task play_music()
    {
        while(true)
        {
         PlayTone(Do,25);Wait(30);
         PlayTone(Re,25);Wait(30);
         PlayTone(Mi,25);Wait(30);
         
         PlayTone(Do,25);Wait(30);
         PlayTone(Re,25);Wait(30);
         PlayTone(Mi,25);Wait(30);
         
         PlayTone(So,25);Wait(30);
         PlayTone(Mi,25);Wait(30);
         PlayTone(Re,25);Wait(30);
         PlayTone(Do,25);Wait(30);
         PlayTone(Re,25);Wait(30);
         PlayTone(Mi,25);Wait(30);
         PlayTone(Re,30);Wait(30);
         
         PlayTone(Do,25);Wait(30);
         PlayTone(Re,25);Wait(30);
         PlayTone(Mi,25);Wait(30);
    
         PlayTone(Do,25);Wait(30);
         PlayTone(Re,25);Wait(30);
         PlayTone(Mi,25);Wait(30);
    
         PlayTone(So,25);Wait(30);
         PlayTone(Mi,25);Wait(30);
         PlayTone(Re,25);Wait(30);
         PlayTone(Do,25);Wait(30);
         PlayTone(Re,25);Wait(30);
         PlayTone(Mi,25);Wait(30);
         PlayTone(Do,30);Wait(30);
          
         PlayTone(So,25);Wait(30);
         PlayTone(So,25);Wait(30);
         PlayTone(Mi,25);Wait(30);
         PlayTone(So,25);Wait(30);
         PlayTone(Ra,25);Wait(30);
         PlayTone(Ra,25);Wait(30);
         PlayTone(So,30);Wait(30);
         
         PlayTone(Mi,25);Wait(30);
         PlayTone(Mi,25);Wait(30);
         PlayTone(Re,25);Wait(30);
         PlayTone(Re,25);Wait(30);
         PlayTone(Do,30);Wait(30);
         }
    }

課題のプログラム

#define turn_time 300   // 一回転にかかる時間
 
#define Do 523   // 音の定義
#define Re 587
#define Mi 659
#define Fa 698
#define So 784
#define Ra 880 
#define Si 988
#define Doo 1047


task play_music_1()  
{
    while(true){
    
                PlayTone(SOUND_CLICK); // 音を鳴らす
                }
}
 
task play_music_2()
{
    while(true)      // 上に書いた曲を鳴らすプログラム
   {
     PlayTone(Do,25);Wait(30);
     PlayTone(Re,25);Wait(30);
     PlayTone(Mi,25);Wait(30); 

     PlayTone(Do,25);Wait(30);
     PlayTone(Re,25);Wait(30);
     PlayTone(Mi,25);Wait(30); 

     PlayTone(So,25);Wait(30);
     PlayTone(Mi,25);Wait(30);
     PlayTone(Re,25);Wait(30);
     PlayTone(Do,25);Wait(30);
     PlayTone(Re,25);Wait(30);
     PlayTone(Mi,25);Wait(30);
     PlayTone(Re,30);Wait(30); 

     PlayTone(Do,25);Wait(30);
     PlayTone(Re,25);Wait(30);
     PlayTone(Mi,25);Wait(30);

     PlayTone(Do,25);Wait(30);
     PlayTone(Re,25);Wait(30);
     PlayTone(Mi,25);Wait(30);

     PlayTone(So,25);Wait(30);
     PlayTone(Mi,25);Wait(30);
     PlayTone(Re,25);Wait(30);
     PlayTone(Do,25);Wait(30);
     PlayTone(Re,25);Wait(30);
     PlayTone(Mi,25);Wait(30);
     PlayTone(Do,30);Wait(30);

     PlayTone(So,25);Wait(30);
     PlayTone(So,25);Wait(30);
     PlayTone(Mi,25);Wait(30);
     PlayTone(So,25);Wait(30);
     PlayTone(Ra,25);Wait(30);
     PlayTone(Ra,25);Wait(30);
     PlayTone(So,30);Wait(30);

     PlayTone(Mi,25);Wait(30);
     PlayTone(Mi,25);Wait(30);
     PlayTone(Re,25);Wait(30);
     PlayTone(Re,25);Wait(30);
     PlayTone(Do,30);Wait(30);
    } 
}


task main()
{
  SetSensor(SENSOR_2,SENSOR_LIGHT); // センサー2を光センサーと定義
  int lght_max=0,time_max;  // light_maxとtime_maxを設定 
  start play_music_2 // music_2を鳴らす
  while(true)   
  { 
   ClearTimer(0);  // タイマー0をクリアー
   OnFwd(OUT_A);   // Aのモーターを正回転
   OnRev(OUT_C);   // Cのモーターを負回転
   
     while(FastTimer(0)<TURN_TIME); // TURN_TIMEがFastTimer(0)より大きくなったら
     {
      if(SENSOR_2>light_max) // もしセンサー2がlight_maxより大きくなったら
      {
      light_max=SENSOR_2;  // light_maxをセンサー2の値にする
      start play_music_1;Wait(30); // music_1を鳴らす
      stop play_music_1  // music_1を止める
      time_max=TURN_TIME-FastTimer(0)+10; // time_maxをこの値にする
      }
     } 

     Off(OUT_A+OUT_C);  // ストップ
     stop play_music_2; // music_2を止める
     
     OnFwd(OUT_A+OUT_C); 

   if(SENSOR_2<light_max)  // もしlight_maxがセンサー2の値より大きくなったら
   {
   Off(OUT_A+OUT_C);  とまる
   Wait(30); 
 
 while(true)  // ※ここから下のプログラムは上のプログラムを繰り返すので説明省略
  {
   ClearTimer(0);
   OnFwd(OUT_A);
   OnRev(OUT_C);

     while(FastTimer(0)<TURN_TIME);
     {
      if(SENSOR_2>light_max)
      {
      light_max=SENSOR_2;
      start play_music_2;Wait(30);
      stop play_music_1
      time_max=TURN_TIME-FastTimer(0)+10;
      }
     } 

     Off(OUT_A+OUT_C);
     stop play_music_2;
      

     OnFwd(OUT_C);
     OnRev(OUT_A);

     Wait(time_max);
     Off(OUT_A+OUT_C);

     OnFwd(OUT_A+OUT_C);
     } 
}

製作者/またたび

  • TAKAのプログラムを参考に制作してみました。
    #define TURN_TIME 300
    #define Do  523    //音程の定義
    #define Re  587
    #define Mi  659
    #define Fa  698
    #define So  784
    #define Ra  880
    
    task play_music() //キラキラ星
    {
       while(true){
           PlayTone(Do,20); Wait(30);
           PlayTone(Do,20); Wait(30);
           PlayTone(So,20); Wait(30);
           PlayTone(So,20); Wait(30);
           PlayTone(Ra,20); Wait(30);
           PlayTone(Ra,20); Wait(30);
           PlayTone(So,30); Wait(45);
           
           PlayTone(Fa,20); Wait(30);
           PlayTone(Fa,20); Wait(30);
           PlayTone(Mi,20); Wait(30);
           PlayTone(Mi,20); Wait(30);
           PlayTone(Re,20); Wait(30);
           PlayTone(Re,20); Wait(30);
           PlayTone(Do,30); Wait(65);
           
           PlayTone(So,20); Wait(30);
           PlayTone(So,20); Wait(30);
           PlayTone(Fa,20); Wait(30);
           PlayTone(Fa,20); Wait(30);
           PlayTone(Mi,20); Wait(30);
           PlayTone(Mi,20); Wait(30);
           PlayTone(Re,30); Wait(45);
           
           PlayTone(So,20); Wait(30);
           PlayTone(So,20); Wait(30);
           PlayTone(Fa,20); Wait(30);
           PlayTone(Fa,20); Wait(30);
           PlayTone(Mi,20); Wait(30);
           PlayTone(Mi,20); Wait(30);
           PlayTone(Re,30); Wait(65);
           
           PlayTone(Do,20); Wait(30);
           PlayTone(Do,20); Wait(30);
           PlayTone(So,20); Wait(30);
           PlayTone(So,20); Wait(30);
           PlayTone(Ra,20); Wait(30);
           PlayTone(Ra,20); Wait(30);
           PlayTone(So,30); Wait(50);
           
           PlayTone(Fa,20); Wait(30);
           PlayTone(Fa,20); Wait(30);
           PlayTone(Mi,20); Wait(30);
           PlayTone(Mi,20); Wait(30);
           PlayTone(Re,20); Wait(30);
           PlayTone(Re,20); Wait(30);
           PlayTone(Do,30); Wait(65);
           Wait(300);
        }
    }
    
    task main()
    {
         SetSensor(SENSOR_2,SENSOR_LIGHT);  //センサ−2を光センサーと定義
         int light_max,time_max;  //光の最大値と旋回時間を求めるための変数を定義
         while(true){  //以下、繰り返し
              light_max=0;  //光の閾値を初期化
              ClearTimer(0);  //タイマー(0)を初期化
              OnFwd(OUT_A);  //光を探す為に旋回
              OnRev(OUT_C);
              start play_music;  //設定した音楽を流す
              
              while(FastTimer(0) < light_max){
                   if(SENSOR_2 > light_max){  //最も明るい光を感知した場合
                        light_max=SENSOR_2;  //光の最大閾値を変更
                        time_max=TURN_TIME-FastTimer(0)+10;  //旋回時間を決定
                   }
              }
              
              Off(OUT_A+OUT_C); //動作を一時停止
              Wait(10);
              
              OnFwd(OUT_C);  //光のあった場所まで逆回転旋回
              OnRev(OUT_A);
              Wait(time_max);
              
              stop play_music;  //音楽を停止
              Off(OUT_A+OUT_C); Wait(30);  //ひと呼吸
              
              while(true){
                  if(light_max < 60){  //もし、光の最大値が通常空間程度なら
                       break;  //再び最大の光を探す
                  }
                  else if(SENSOR_2 < light_max-20){  //もし、光が暗くなったら(見失ったら)
                       break;  //再び最大の光を探す
                  }
                  else{
                       OnFwd(OUT_A+OUT_C);  //通常時は直進
                  }
             }
         }  //繰り返し
    }

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-01-12 (金) 13:36:45