как исправить: дельта задержка выполняется слишком рано - PullRequest
0 голосов
/ 11 июня 2019

У меня есть функция 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 секунд.

...