Добрый день,
Делаю машинку, пишу ф-ции которые едут вперед, поворачивают или откатываются (при препятствии или чтобы не упасть со стола)
Для этого в глобальных объявил
В инициализации все делаю FALSE
В теле основной вызываю свои ф-ции
Машинка едет вперед по mot_forward_stop - тут все ОК
Видит конец стола по датчикам line_N_Volt останавливается - тут тоже все ОК
Откатывается mot_forward_met_shim на 0.4 м - тут тоже все ОК
Проблема в том, что она снова не едет вперед по mot_forward_stop, ломал голову и пришел к выводу (через отладку, что значения переменных bool не присваивается false в вызове из ф-ции mot_stop, хотя сама ф-ция отрабатывает (машинка останавливается). Но из-за того, что переменные остаются взведенные в true второй раз mot_forward_stop не вызывается.
По логу видно что при вызове взвелась rast = true;, но по mot_stop не присвоился rast = false;
Что тут не так может быть?
Делаю машинку, пишу ф-ции которые едут вперед, поворачивают или откатываются (при препятствии или чтобы не упасть со стола)
Для этого в глобальных объявил
bool rast; //идет движение
bool povorot; //идет поворот
bool otkat; //идет отъезжаем
В инициализации все делаю FALSE
В теле основной вызываю свои ф-ции
Основной:
void loop()
{
line_sensor();
rast_prep = hcsr.distance();
if (otkat == false)
{
if (line_1_Volt<2 || line_2_Volt<2 || line_3_Volt<2 ) //2 считаем пропастью
{
mot_stop(false);
otkat = true;
mot_zadn();
mot_forward_met_shim( 100, 0.4, zader);
}
}
if (otkat == false && povorot == false && rast == false)
{
mot_forward_stop( 100, 10, zader );
}
}
Видит конец стола по датчикам line_N_Volt останавливается - тут тоже все ОК
Откатывается mot_forward_met_shim на 0.4 м - тут тоже все ОК
Проблема в том, что она снова не едет вперед по mot_forward_stop, ломал голову и пришел к выводу (через отладку, что значения переменных bool не присваивается false в вызове из ф-ции mot_stop, хотя сама ф-ция отрабатывает (машинка останавливается). Но из-за того, что переменные остаются взведенные в true второй раз mot_forward_stop не вызывается.
По логу видно что при вызове взвелась rast = true;, но по mot_stop не присвоился rast = false;
Что тут не так может быть?
Едем вперед:
void mot_forward_stop(float speed, int stop, unsigned long zdem=0) //Движение по прямой со скоросью заполнения speed шим задержка в микросекундах после остановки, остановиться за stop см
{
float speed_corr = speed - 10; // Уводит влево без этого, уменьшим вращение правых колес
if (povorot == true)
{
return;
}
if (rast == true )
{
if (rast_prep < stop )
{
//rast = false;
mot_stop(false);
delay(zdem);
}
}
else
{
rast = true;
mot_FL.setStopNeutral(false);
mot_FR.setStopNeutral(false);
mot_BL.setStopNeutral(false);
mot_BR.setStopNeutral(false);
mot_BR.setSpeed( speed_corr, MOT_PWM, 16000000, MOT_SEC);
mot_FL.setSpeed( speed, MOT_PWM, 16000000, MOT_SEC);
mot_BL.setSpeed( speed_corr, MOT_PWM, 16000000, MOT_SEC);
mot_FR.setSpeed( speed, MOT_PWM, 16000000, MOT_SEC);
}
}
Стоп (вот тут не присваивается):
void mot_stop(bool type_ost) //остановка моторов
{
// true Указываем освободить мотор при его остановке. Ротор остановленного мотора можно вращать. Останавливаем мотор. Обратите внимание на то, что ротор мотора останавливается плавно.
// false Указываем не освобождать мотор при его остановке. Ротор остановленного мотора будет застопорен Останавливаем мотор. Обратите внимание на то, что ротор мотора останавливается резко.
povorot = false;
rast = false;
otkat = false;
mot_FL.setStopNeutral(type_ost);
mot_FR.setStopNeutral(type_ost);
mot_BL.setStopNeutral(type_ost);
mot_BR.setStopNeutral(type_ost);
mot_FL.setStop();
mot_FR.setStop();
mot_BL.setStop();
mot_BR.setStop();
// Восстановим движение прямо
mot_FL.setDirection(false);
mot_FR.setDirection(true);
mot_BL.setDirection(false);
mot_BR.setDirection(true);
}
Изменено: