//画像があるときは上のメニューから添付を使って画像をアップロードし、『#ref(画像ファイル名.jpg)』と本文中に入れる。画像についての説明も書くこと。 まだページ製作中です。もう少し光を追う精度を高くできるよう考え中です。 *光を追いかけるロボット [#m40854f6] マシンの正面に2個の光センサーが横に並んで付いています。 // 作成者:山崎 畠山 // 作成日:2005-12-9 int L = 0; //明るさの最大値 int i; //明るい方向を探すサブルーチンの終了フラグ用 int d; //センサー間の値の誤差 #define turn_time 20 //マシンの1回転する時間 //明るい方向を探すサブルーチン sub light (){ 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); //右の光センサー light(); //明るい方向を探します。 turn (); //明るい方向を向きます。 trace (); //光を追いかけます。 } *&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);