- 追加された行はこの色です。
- 削除された行はこの色です。
[[2005/C3/しかた]]
モーター2つのライントレースロボットのプログラムです。
#define BLACK 45 //黒い線
#define A 10 //微少時間
task main()
{
SetSensor(SENSOR_1, SENSOR_LIGHT);
SetSensor(SENSOR_3, SENSOR_LIGHT);
while(true){
if(SENSOR_1>BLACK && SENSOR_3>BLACK){ //2つのセンサが黒い線の上ではない時
OnFwd(OUT_A+OUT_C);
Wait(A);
}
else if(SENSOR_1< BLACK){ //左側のセンサが黒い線を感知した時
while(SENSOR_1< BLACK){
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(A);
}
}
else if(SENSOR_3< BLACK){ //右側のセンサが黒い線を感知した時
while(SENSOR_3< BLACK){
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(A);
}
}
}
while(true){
if(SENSOR_1>BLACK && SENSOR_3>BLACK){ //2つのセンサが黒い線の上ではない時
OnFwd(OUT_A+OUT_C);
Wait(A);
}
else if(SENSOR_1< BLACK){ //左側のセンサが黒い線を感知した時
while(SENSOR_1< BLACK){ //黒い線を感知している間
OnFwd(OUT_C); //半時計回り
OnRev(OUT_A);
Wait(A);
}
}
else if(SENSOR_3< BLACK){ //右側のセンサが黒い線を感知した時
while(SENSOR_3< BLACK){ //黒い線を感知している間
OnFwd(OUT_A); //時計回り
OnRev(OUT_C);
Wait(A);
}
}
}
Float(OUT_A); //意味なし
}
感想
中途半端に関数とか使ってみました。
与えられた引数で、カーブとかも可能なプログラムを作りたかったのですが、
妥協しました。
やはりセンサ2つ、タイヤ2つはプログラムも簡単です。
このプログラムは曲がる時、いったん止まって回転します。
なのでどうしても遅くなります。でも確実なのでこれを採用しました。
以上。