[[戻る>2005/A6/課題4左]]
*懐中電灯の光に向かって進むプログラム [#q196ca92]
**untilを使ったプログラム [#w52e603c]
 // 12月5日
 // コンド
 // 機体は課題3のモーターが二つあるタイプの機体をもとに
 // 三輪で後ろがキャスターになっている(プログラム:パート1)
 
 int light = 0;
 int turn_time = 30;
 
 task main()
 {
    SetSensor(SENSOR_2, SENSOR_LIGHT);   // 真ん中のライトセンサー
    ClearTimer(0);                       // タイマー0をリセットする
         
    while(Timer(0) <= turn_time)         // 4秒以内の動き
      {
         if(SENSOR_2 > light)            // センサー2が『light』の光量より多いとき
          {
              light = SENSOR_2;          // 『light』をセンサー2で示した値に置き換える
           }
      
         OnFwd(OUT_A);                   // 左タイヤが正転
         OnRev(OUT_A);                   // 右タイヤが後転
 
      }
    
    OnFwd(OUT_A);                        // 左タイヤが正転
    OnRev(OUT_A);                        // 右タイヤが後転
    until(SENSOR_2 >= light);            // センサー2の値以上になるまで
    
    while(true)
      {
         if(SENSOR_2 < light)            // センサーが懐中電灯の光から外れたとき
           {
              OnFwd(OUT_A);              // 左タイヤが正転
              OnRev(OUT_C);              // 右タイヤが後転
              until(SENSOR_2 >= light);  // センサーが懐中電灯の光を見るまで
           }
   
         else                            // センサーが懐中電灯の光を見たとき
           {
              OnFwd(OUT_A + OUT_C);      // 前進する
              until(SENSOR_2 < light);   // センサーが懐中電灯から外れるまで
           }
         
     }
 
 }

**反省 [#re91764d]
 ・懐中電灯の光を探してくるくる回る。
 ・初めてタイマーを使ってみて、とりあえずうまくいった。
#comment

**repeatを使ったプログラム [#z6637344]
 // 12月9日
 // コンド
 // プログラム:パート2
 
 int light = 0;
 int i = 0;
 int i_max = 0;
 
 task main()
 {
    SetSensor(SENSOR_2, SENSOR_LIGHT);  // 真ん中のライトセンサー
    
    OnFwd(OUT_A);                       // 左タイヤが正転
    OnRev(OUT_C);                       // 右タイヤが後転
    
    repeat(60)                          // 一回転するまで繰り返す
      {
         if(SENSOR_2 > light)           // センサー2が『light』の光量より多いとき
          {
              light = SENSOR_2;         // 『light』をセンサー2で示した値に置き換える
              i_max = i;                // i_maxをiに置き換える
          }
         PlayTone(light*10,5);          // 光量に合わせた音を出す
         Wait(5);                       // 0.05秒待つ
         i++;                           // iを一つ増やす
      }
    
    OnFwd(OUT_C);                       // 左タイヤが正転
    OnRev(OUT_A);                       // 右タイヤが後転
    Wait(i_max*5);                      // 懐中電灯のある方向まで回る(修正しました)
    OnFwd(OUT_A + OUT_C);               // 懐中電灯に向かって進む
    
    while(true)
      {
         if(SENSOR_2 < light)           // センサーが懐中電灯の光から外れたとき
           {
              PlayTone(light*10,100);   // 音を出す
              OnFwd(OUT_A);             // 左タイヤが正転
              OnRev(OUT_C);             // 右タイヤが後転
              until(SENSOR_2 >= light); // センサーが懐中電灯の光を見るまで
           }
   
         else                           // センサーが懐中電灯の光を見たとき
           {
              PlayTone(light*5,100);    // 音を出す
              OnFwd(OUT_A + OUT_C);     // 前進する
              until(SENSOR_2 < light);  // センサーが懐中電灯から外れるまで
           }
         
     }
 
 }
**反省 [#u026a584]
 ・センサーがひとつだけなのでその分精度が低いのが欠点。
 ・一つ目と似ているので音を付け足してみました。
-光センサーを2つ使うとどのくらい精度が向上するでしょうか? -- [[松本(教員)]] &new{2005-12-10 (土) 19:42:31};
-最も明るい方向まで旋回するのは Wait(i_max); ではなくて Wait(i_max*5); かな? -- [[松本(教員)]] &new{2005-12-12 (月) 11:35:39};

#comment

**&color(green){上の二つの動きの流れ}; [#wc7874ae]
 ・最初は一回転して懐中電灯の光をさがす。
 ・懐中電灯の光に向かって動き出す。
 ・懐中電灯の光を見失ったら、その場で回転して懐中電灯の光を探す。
 ・これを繰り返す。

**センサーを二つ使った場合のプログラム [#td700f00]
 // 12月19日
 // コンド
 // 前半は上の二つのプログラムとほぼ同様で、while以下を作りました
 
   while(true)
     {
     
        if((SENSOR_1 >= light) && (SENSOR_3 >= light))
  // 両センサーが懐中電灯の光を見ているとき
          {
             OnFwd(OUT_A + OUT_C);        // 両タイヤが正転
             PlaySound(SOUND_FAST_UP);    // ピロピロ〜と速く高くなる音を出す
             until((SENSOR_1 >= light) && (SENSOR_3 >= light));
 // センサーが懐中電灯の光を見るまで
          }
        if((SENSOR_1 < light) && (SENSOR_3 >= light))
  // 左センサーが懐中電灯の光から外れたとき
          {
             OnFwd(OUT_C);                // 右タイヤが正転
             OnRev(OUT_A);                // 左タイヤが後転
             PlaySound(SOUND_DOWN);       // ピロピロ〜という低い音を出す
             until((SENSOR_1 >= light) && (SENSOR_3 >= light));
 // センサーが懐中電灯の光を見るまで
          }
  
        if((SENSOR_1 >= light) && (SENSOR_3 < light))
   // 右センサーが懐中電灯の光から外れたとき
          {
             OnFwd(OUT_A);                // 左タイヤが正転
             OnRev(OUT_C);                // 右タイヤが後転
             PlaySound(SOUND_UP);         // ピロピロ〜という高い音を出す
             until((SENSOR_1 >= light) && (SENSOR_3 >= light));
 // センサーが懐中電灯の光を見るまで
          }
 
        else  // センサーが懐中電灯の光を見失ったとき
          {
             OnFwd(OUT_A); OnRev(OUT_C);  // 回転する
             PlaySound(SOUND_LOW_BEEP);   // ブーという低い音を出す             
             until((SENSOR_1 >= light) && (SENSOR_3 >= light));
 // センサーが懐中電灯の光を見つけるまで
          }
     }
**&color(blue){動きの流れ}; [#hdfabc4c]
 ・一回転して懐中電灯の光を探す。
 ・懐中電灯の光に向かって進む。
 ・懐中電灯のずれを修正しながら進む。
 ・懐中電灯の光を見失ったとき、その場で回転して探す。
-やはり、センサー二つだと精度が良いのでしょうか。沢山のプログラムお疲れさまです。 -- [[ゆん(TA)]] &new{2006-02-02 (木) 18:00:35};

#comment



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