У меня есть функция myDelay, которая предоставляла указатель в последний раз, и интервал возвращает истину / ложь, если интервал истек, однако, похоже, он возвращает истину слишком быстро .
в настоящее время я просто беру текущие значения micros (), отменяя последнюю точку задержки и сравнивая, если она превышает указанный интервал.
обратите внимание, что micros () - это функция arduino, которая возвращает микросекунды, прошедшие с момента запуска.
static unsigned long buttonDelay = 0;
static int screenIndex = 0;
boolean myDelay(unsigned long *delay, long interval) {
unsigned long end = micros();
if (end - *delay >= interval) {
*delay = end;
return true;
}
return false;
}
void loop()
{
static const long buttonDelayInterval = 20000 * 1000;
if(myDelay(&buttonDelay, buttonDelayInterval)){
if(screenIndex++ > MAX_SCREEN_INDEX) screenIndex = 0;
Serial.println(screenIndex);
}
}
Ожидаемый вывод для экранного индекса должен увеличиваться только приблизительно один раз каждые 20 секунд.