- 追加された行はこの色です。
- 削除された行はこの色です。
[[2005/C5/課題4]]
*光を追いかけるロボット [#h2a79751]
**ロボット [#wd71e288]
**ロボット本体 [#wd71e288]
***特徴 [#g4e5607f]
-ベースはテキストと同じ(ロボコンで使ったものの使い回し)
-光センサーを斜め上に向けてある
***苦労した点 [#pd99fd81]
-特になし
**プログラム [#y928191d]
#define go_straight OnFwd(OUT_A+OUT_C); //直進
#define turn_right OnFwd(OUT_A);OnRev(OUT_C); //右回転
#define turn_left OnFwd(OUT_C);OnRev(OUT_A); //左回転
#define RUN_TIME 400 //回転時間
int light_R=0; //右の光の最大値を定義
int light_L=0; //左の光の最大値を定義
task main()
{ SetSensor(SENSOR_1,SENSOR_LIGHT); //左の光センサー
SetSensor(SENSOR_3,SENSOR_LIGHT); //右の光センサー
ClearTimer(0); //タイマーをリセット
while(true){ //無限に繰り返す
while(FastTimer(0)<RUN_TIME) //始めに一回転して光の最大値を探す
{turn_right; //右回転する
if(SENSOR_1>light_L) //左センサーの値がlight_Lより大きいとき
{light_L=SENSOR_1;PlayTone(220,1);} //左センサーの値をlight_Lに代入
if(SENSOR_3>light_R) //右センサーの値がlight_Rより大きいとき
{light_R=SENSOR_3;PlayTone(600,1);} //右センサーの値をlight_Rに代入
}
if((SENSOR_1>=light_L)||(SENSOR_3>=light_R)) //どちらかのセンサーに光があたっているとき
{go_straight;} //直進
if((SENSOR_1<light_L)&&(SENSOR_3<light_R)) //どちらにも光があたっていないとき
{if(SENSOR_1>SENSOR_3){turn_left;} //左が明るければ左回転
if(SENSOR_3>SENSOR_1){turn_right;} //右が明るければ右回転
}
}
}
***特徴 [#wee94ffa]
-1回転して光の最大値を見つけ出す
-どちらかの光センサーに光があたっているとき直進
-左右の明るさに応じて右回転か左回転か決める
***苦労した点 [#g4211358]
基本となるプログラムはすぐにできたのですが、何回やっても成功しなかった。そこで、隣のチームに聞いたところwhile(true)を入れるとうまくいくと知った。
**感想 [#v0a155e9]
始めは、光センサーを車体の前後につけるタイプのロボットでプログラムしていたのですが、先生にできれば前に2つ付けたタイプのロボットにしてくださいと言われてやり直した。ほとんど、完成に近かっただけにショックだった。多分、授業中に言ったんだろうなぁ。人の話はしっかり聞くべきだと思った。プログラムは少し違うだけでうまくいかないので、難しいと感じた。