В коде нужно, чтобы после определенного промежутка времени выполнялась функция stop_micro(). delay() мне не подходит, т.к. надо выполнять и другие команды в этот промежуток времени. Сделал задержку с помощью millis() по гайду, но не работает. После определенного промежутка времени просто не выполняется функция
if (command=='w') {
Serial.println(timing);
up();
if (millis() - timing > 5000) {
stop_micro();
timing = millis();
}}
else if (command=='W'){
Serial.println(timing);
up();
if (millis() - timing > 5000) {
stop_micro();
timing = millis();
}}
else if (command=='u'){
Serial.println(timing);
down();
if (millis() - timing > 5000) {
stop_micro();
timing = millis();
}}
else if (command=='U'){
Serial.println(timing);
down();
if (millis() - timing > 5000) {
stop_micro();
timing = millis();
}}
Как сделать, чтобы через 5000 мс выполнения функций (down/up) выполнялась функция stop_micro()?
Тупо заменить delay() на таймер на миллисе не выйдет, т.к. они работают на разных принципах. Если делать именно тупо, то можно сделать примерно так. Рядом с переменной timing объявите еще одну
bool stop_micro_flag = false;
А дальше код нужно изменить так
if (command == 'w')
{
Serial.println(timing);
// поднять флаг и запустить таймер
timing = millis();
stop_micro_flag = true;
up();
}
else if (command == 'W')
{
Serial.println(timing);
// поднять флаг и запустить таймер
timing = millis();
stop_micro_flag = true;
up();
}
else if (command == 'u')
{
Serial.println(timing);
// поднять флаг и запустить таймер
timing = millis();
stop_micro_flag = true;
down();
}
else if (command == 'U')
{
Serial.println(timing);
// поднять флаг и запустить таймер
timing = millis();
stop_micro_flag = true;
down();
}
// если флаг поднят и время вышло, запустить stop_micro()
if (stop_micro_flag && ((millis() - timing > 5000)))
{
stop_micro_flag = false;
stop_micro();
}
Т.е. старт таймера с одновременным подъемом флага делать при получении команды, а проверку на запуск stop_micro() выполнять отдельно от блока проверки команд.