練習問題で作成したプログラム (15班)

メンバー:戸田博康、宮崎達也、柳澤孔亮

version 02
Last modified: Thu Dec 26 13:43:05 JST 2002


[必須] ロボットに鉛筆またはペンを取り付け、 A3 用紙の上に ★型を描かせなさい (練習問題 3.3)。

task main()
             {
                 OnFwd(OUT_A);     //  A 出力に接続されたモータを正回転させる
                 OnFwd(OUT_C);     //  C 出力に接続されたモータを正回転させる
                 Wait(100);
                    repeat(4){
                        Rev(OUT_A);
                        Wait(144);
                        OnFwd(OUT_A);     //  A 出力に接続されたモータを正回転させる
                        Wait(100);
                              }
              
                 Float(OUT_A+OUT_C); //  A と C 出力のモータを止める
              }

工夫した点:
ペンをRCXの中心に入るように工夫した。しかし、ペンを安定させるのに失敗してしまい、終点が始点となかなか一致しなかった。

[必須] 机の上で動き回るロボットを作成しなさい。 ただし方向変換は机の端に来たときに行うこと (練習問題 4.2)。

 task main()
      {
           SetSensor(SENSOR_1,SENSOR_TOUCH);

           while(true)
           {    
               OnFwd(OUT_A+OUT_C);
               until(SENSOR_1==1);
               OnRev(OUT_A+OUT_C);Wait(200);
               OnFwd(OUT_A);Wait(150);
               OnFwd(OUT_C);
           }
      }

工夫した点:
タッチセンサーを本体のなるべく前に出し、重いおもりをつけることにより感度をあげようとした。

[必須] 前向きに光センサーを取り付けたロボットを作成し、 そのロボットがもっとも明るい方向 (例えば照らした懐中電灯の方向) を向くようにしなさい。 さらにそのロボットが、 懐中電灯の光を追いかけて進むようにプログラムを改良しなさい (練習問題 4.5.1, 4.5.2)

  #define THRESHOLD 60   // 閾値
        
       task main ()
           {
               SetSensor(SENSOR_1, SENSOR_LIGHT);
               
               while (true) 
                {
                   if (SENSOR_1 > THRESHOLD) 
                     {   
                       OnFwd(OUT_A+OUT_C);
                       
                   } else {                      
                       Rev(OUT_A);
                       OnFwd(OUT_C);
                      }
                 }
               
           }


工夫した点:
始めの方は正確に光の方向に進んでくれたが途中から反応しないことが多々あった。

[必須] 明るいところでは、長調で、暗いところでは短調で、 曲を演奏するプログラムを作成しなさい (曲は何でもよい) (練習問題 5.2)。

         #define Do  523
         #define Re  587
         #define Mi  659
         #define Fa  698
         #define FaS 740
         #define So  784
         #define Ra  880
         #define RaS 932
         #define Doh 1047

         task play_music1()   // 音楽を演奏するタスク
         {
             while (true)
             {
                 PlayTone(Do,50);Wait(55);  // Wait の時間の方を少し長くして
                 PlayTone(Fa,50);Wait(55);  // 同じ音を続けて鳴らす場合にも
                 PlayTone(So,50);Wait(55);  // 一つの音にならないようにしている
                 PlayTone(Do,50);Wait(55);
                 PlayTone(RaS,100);Wait(105);
                 PlayTone(Ra,50);Wait(55);
                 PlayTone(So,50);Wait(55);
                 PlayTone(Fa,50);Wait(55);
                 PlayTone(Mi,25);Wait(30);
                 PlayTone(Fa,25);Wait(30);
                 PlayTone(So,50);Wait(55);
                 PlayTone(Re,50);Wait(55);
                 PlayTone(Fa,100);Wait(105);
                 PlayTone(Mi,100);Wait(105);

                 PlayTone(Re,50);Wait(55);
                 PlayTone(So,50);Wait(55);
                 PlayTone(Ra,50);Wait(55);
                 PlayTone(Re,50);Wait(55);
                 PlayTone(Doh,100);Wait(105);
                 PlayTone(RaS,50);Wait(55);
                 PlayTone(Ra,50);Wait(55);
                 PlayTone(So,50);Wait(55);
                 PlayTone(FaS,25);Wait(30);
                 PlayTone(Ra,25);Wait(30);
                 PlayTone(So,50);Wait(55);
                 PlayTone(Re,50);Wait(55);
                 PlayTone(Ra,100);Wait(105);
                 PlayTone(So,100);Wait(105);

             }
         }
         #define Si  494
         #define DoS 554
         #define ReS 622
         #define SoS 831
         #define Sih 988

         task play_music2()   // 音楽を演奏するタスク
         {
             while (true)
             {
                 PlayTone(Si,50);Wait(55);  // Wait の時間の方を少し長くして
                 PlayTone(Mi,50);Wait(55);  // 同じ音を続けて鳴らす場合にも
                 PlayTone(FaS,50);Wait(55);  // 一つの音にならないようにしている
                 PlayTone(Si,50);Wait(55);
                 PlayTone(Ra,100);Wait(105);
                 PlayTone(SoS,50);Wait(55);
                 PlayTone(FaS,50);Wait(55);
                 PlayTone(Mi,50);Wait(55);
                 PlayTone(ReS,25);Wait(30);
                 PlayTone(Mi,25);Wait(30);
                 PlayTone(FaS,50);Wait(55);
                 PlayTone(DoS,50);Wait(55);
                 PlayTone(Mi,100);Wait(105);
                 PlayTone(ReS,100);Wait(105);

                 PlayTone(DoS,50);Wait(55);
                 PlayTone(FaS,50);Wait(55);
                 PlayTone(SoS,50);Wait(55);
                 PlayTone(DoS,50);Wait(55);
                 PlayTone(Sih,100);Wait(105);
                 PlayTone(Ra,50);Wait(55);
                 PlayTone(SoS,50);Wait(55);
                 PlayTone(FaS,50);Wait(55);
                 PlayTone(Fa,25);Wait(30);
                 PlayTone(SoS,25);Wait(30);
                 PlayTone(FaS,50);Wait(55);
                 PlayTone(DoS,50);Wait(55);
                 PlayTone(SoS,100);Wait(105);
                 PlayTone(FaS,100);Wait(105);

             }
         }
         task main()
         {
             SetSensor(SENSOR_1, SENSOR_LIGHT);

             start play_music1 ;    
             OnFwd(OUT_A+OUT_C);   

              if(SENSOR_1 < 45)
                {
                   stop play_music2; 
                   start play_music1; 

                 }else{
                   stop play_music1; 
                   start play_music2; 

                 }
        
            } 

工夫した点:
二つの曲を用意し、明るさに応じて曲を変えるようにした。

[自由課題] 黒い線に沿って速く走るロボットを作成せよ (例題の改良)。

         #define THRESHOLD 40   // 閾値

            task main ()
            {
                SetSensor(SENSOR_1, SENSOR_LIGHT);
                SetSensor(SENSOR_3, SENSOR_LIGHT);


                while (true)
                { 
                    if (SENSOR_1 > THRESHOLD) 
                     {
                        OnFwd(OUT_A);
                        Off(OUT_C);
                   } else {
                        Off(OUT_A);
                        OnFwd(OUT_C);
                     }
                    if (SENSOR_3 > THRESHOLD)
                     {
                        OnFwd(OUT_C);
                        Off(OUT_A);
                   } else {
                        OnFwd(OUT_A);
                        Off(OUT_C);
                     } 
                }
            }

工夫した点:
タッチセンサーを二つ使用して、よりスムーズに進むようにした。


your_name