Я работаю над роботом NXT lego mindstorm, и я создаю робота-следящего за линией с одним датчиком отраженного света, и я программирую на языке 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 мс.
В чем проблема с моим кодом?
Как я могу остановить двигатель после этого интервала, и двигатель должен двигаться в другом направлении после этого интервала в поисках линии, и тогда он обязательно найдет линию
Спасибо!