Создание таймера в Arduino во время проверки ввода

#arduino-uno

#arduino-uno

Вопрос:

Мне нужно подождать некоторое время, проверяя, нажата ли кнопка (то есть, является ли ввод высоким или низким).

Использовать функцию задержки для этого неудобно, потому что она не может проверить, происходит ли что-то во время задержки, поэтому ей пришлось бы ждать 1 мс, проверять, ждать, проверять, ждать, проверять и т.д…

Можете ли вы помочь мне с кодированием, которое мне нужно будет проверять и приостанавливать на определенное количество времени одновременно?

Ответ №1:

Вы можете реализовать это с помощью второго цикла, контролируемого условиями. Если вы хотите подождать в каждом основном цикле arduino, например, в течение 20 секунд и выполнить за этот промежуток времени дополнительный код, вы можете сделать это следующим образом:

 unsigned long startTime = millis();     // Number of milliseconds since the program started (unsigned long)
unsigned long intervalTime = 20000UL;   // equals 20 seconds
int buttonPin = 3;                      // used button pin

void loop()
{
    while(millis() - startTime < intervalTime){
        if(digitalRead(buttonPin)==HIGH){
           //...
        }
        else {
           //...
        }
    }

   //...
}