私はNXTレゴマインドストームロボットに取り組んでおり、単一の反射光センサーを備えたラインフォロワーロボットを構築しており、C言語でプログラミングしています。
センサーは生のアナログ値を 0 ~ 1023 の範囲のデジタル値に変換します。
線が黒の場合はモーターが前進し、線がない場合 (白ベース) は停止し、灰色 (白と黒の線の間) がある場合は右に少し移動し、次に左に異なる方法で移動することをコーディングする必要があります。失われた黒い線を見つけます。
したがって、コードは次のようになります
While (1)
{
a=ecrobot_get_light_sensor(port_led); //storing the A/D converted value in variable
while (a<300) // White area
{
ecrobot_status_monitor("White Area");
nxt_motor_set_speed(port_motor_l, 0, 1); // left motor turns off
nxt_motor_set_speed(port_motor_r, 0, 1); // right motor turns off
}
while (a>=600) // Black Line
{
ecrobot_status_monitor("Black Area");
nxt_motor_set_speed(port_motor_l, 100, 1); // left motor turns on
nxt_motor_set_speed(port_motor_r, 100, 1); // right motor turns on
}
while (a>=300 || a<600) // Robot loosing the black line
{
ecrobot_status_monitor("grey Area");
nxt_motor_set_speed(port_motor_l, 50, 1); // left motor move forward
nxt_motor_set_speed(port_motor_r, -50, 1); // right motor move backward
delay_ms(200)
nxt_motor_set_speed(port_motor_l, -50, 1); // left motor move backward
nxt_motor_set_speed(port_motor_r, 50, 1); // right motor move forward
delay_ms(200)
}
問題は、ロボットがラインを失った場合、停止せずに時計回りに動き始め、200 ミリ秒遅れて反時計回りに動くことです。
私のコードの問題は何ですか?
この間隔の後にモーターを停止するにはどうすればよいですか。モーターは、この間隔の後にラインを探して他の方向に移動する必要があり、その後、確実にラインを見つけることができます
ありがとう!