- 追加された行はこの色です。
- 削除された行はこの色です。
[[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);