[[2005/C6]]
まだ製作中です。
 int L = 0;
 int i=1;
 #define turn_time 20//ここに1回転の時間を入れる
//画像があるときは上のメニューから添付を使って画像をアップロードし、『#ref(画像ファイル名.jpg)』と本文中に入れる。画像についての説明も書くこと。

まだページ製作中です。もう少し光を追う精度を高くできるよう考え中です。
*光を追いかけるロボット [#m40854f6]
マシンの正面に2個の光センサーが横に並んで付いています。
 //    作成者:山崎 畠山
 //    作成日:2005-12-9
  
 int L = 0; //明るさの最大値
 int i;     //明るい方向を探すサブルーチンの終了フラグ用
 int d;     //センサー間の値の誤差
 #define turn_time 20 //マシンの1回転する時間
 
 //マシンを回転させるためのサブルーチン
 sub turn (){
         OnFwd(OUT_A);
         OnRev(OUT_C);
       }
 //明るい方向を探すサブルーチン
 sub light (){
         while(Timer(0)<turn_time){  //1回転するまでの間、最も明 るい方向を探し続けます。
         PlayTone(SENSOR_1*10,1) ;   
         if(SENSOR_1>L){L=SENSOR_1;}
                                   }
           }
        OnFwd(OUT_A);  //マシン回転
        OnRev(OUT_C);
        ClearTimer(0);
        while(Timer(0)<turn_time){          //1回転するまでの間、最も明るい方向を探し続けます。
                PlayTone(SENSOR_1*10,1) ;
                if(SENSOR_1>L){L=SENSOR_1;} //Lに明るさの最大値を入れる。
                         }
        until(Timer(0)==turn_time); //回転終了
          }
 
 //明るい方向を向くサブルーチン
 sub turn (){
            for (i=0; i==0; L--){
                OnFwd(OUT_A);  //マシン回転
                OnRev(OUT_C);
                ClearTimer(0);
                until(SENSOR_1>=L||Timer(0)>turn_time); //最も明るい方向が見つかるか、一回転するまで
                if(SENSOR_1>=L){i=1;}  //見つかれば次の処理へ
                }  //見つからなければ明るさの最大値を1つ低くしてまた回転
             }
 
 //光を追うサブルーチン
 sub trace (){
             d=SENSOR_1-SENSOR_2;  //センサー間の値の誤差を測ります。以降センサー2には誤差を加えます。 
             while(true){
                if (SENSOR_1==SENSOR_2+d) //センサーが二つとも同じ明るさなら前進
                { OnFwd(OUT_A+OUT_C);}
                else{
                if(SENSOR_1>SENSOR_2+d)   //左のセンサーが明るければ左折
                {OnFwd(OUT_C);Off(OUT_A);}
                else{OnFwd(OUT_A);Off(OUT_C);} //それ以外(右のセンサーが明るい)なら右折
                    }
                Wait(3);  //移動時間
                Off(OUT_A+OUT_C);
                Wait(20); //マシンが高速なため、少しずつ移動するよう一時停止する時間です。
                         }
             }
             
 task main (){
 SetSensor(SENSOR_1, SENSOR_LIGHT);
 SetSensor(SENSOR_2, SENSOR_LIGHT);
 while(i>0){
 turn();       //回転しながら
 ClearTimer(0);
 light();      //最も明るい方向を探します。
 until(Timer(0)==turn_time);  //1回転するまで
 turn();
 ClearTimer(0);
 until (SENSOR_1>=L-1||Timer(0)>30);//最も明るい方向まで回転して 向きを変えます。
 Off(OUT_A+OUT_C);
 if(SENSOR_1>=L){i=0;}
 SetSensor(SENSOR_1, SENSOR_LIGHT); //左の光センサー
 SetSensor(SENSOR_2, SENSOR_LIGHT); //右の光センサー
 light();  //明るい方向を探します。
 turn ();  //明るい方向を向きます。
 trace (); //光を追いかけます。
 }
 while(true){
 if(SENSOR_1>=SENSOR_2){OnFwd(OUT_C);Wait(10);Off(OUT_C);}
 if(SENSOR_1<SENSOR_2){OnFwd(OUT_A);Wait(10);Off(OUT_A);}
 Wait(20);
 }
 }
*&size(25){難しかった点}; [#ef642ca5]
-
-
*&size(25){工夫した点}; [#w3200abf]
-
-
*&size(25){反省点}; [#b2cb2e86]
-
-
*&size(25){感想}; [#p6b22e76]
-
-
-
*&size(20){コメントはこちらまで}; [#c1770675]
#comment
[[C6のTOPへ>2005/C6]]
RIGHT:
tya&counter(today);
&counter(yesterday);
&counter(all);


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