Счетчик таймера Arduino сбрасывается на 65, но должен сбрасываться на 70 - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь отобразить таймер, который считает до 70 секунд, однако, как только он достигает 65, он перезапускается (l oop). Это произошло после того, как я добавил basetime=millis(); и currtime = millis()-basetime;. (Это работает, когда я удаляю эти два, но я добавил, потому что я хочу, чтобы millis() был сброшен в ноль, как только он достигнет 70 секунд). Кто-нибудь может помочь мне в этом? Дайте мне знать, если мой полный код нужен. Спасибо!

void loop() {
    basetime = millis();
    seconds = 0;
    seconds2 = 0;
    minutes = 0;


    for (seconds == 0; seconds <= 70; seconds++) {
        time();
    }
}

void time() {
    currtime = millis() - basetime;
    tft.textSetCursor(100, 100);
    tft.textColor(RA8875_WHITE, RA8875_RED);
    sprintf(timeline, "%02d hours %02d mins %02d secs", hours, minutes, seconds2);
    tft.print(timeline);
    delay(1000);

    tft.textSetCursor(200, 300);
    tft.textColor(RA8875_WHITE, RA8875_RED);
    tft.print("Deg C = ");
    tft.print(ktc.readCelsius());
    delay(1000);

    seconds = currtime / 1000;
    minutes = (currtime / 1000) / 60;
    seconds2 = seconds - (minutes * 60);
    minutes = minutes - (hours * 60);
    hours = ((millis() / 1000) / 60) / 60;
}

1 Ответ

0 голосов
/ 02 марта 2020

Проверьте следующее:

базовое время и текущее время должны быть определены задолго до процедуры настройки
Стиль Arduino

unsigned long currtime, basetime;

или инициализированный c стиль

uint32_t currtime = 0;
uint32_t basetime = 0;

и избавьтесь от задержек в вашем коде - это останавливает обработку в этот момент.
Больше информации мгновенно без задержки (встроенный пример Arduino IDE -> Файл -> Примеры -> 02, Цифровой -> BlinkWithoutDelay)

Проблема 65 se c заключается в опрокидывании int (возможно, установленном компилятором uint16_t -> максимальное значение, которое может содержать 2 ^ 16-1 ( 65 ). 535) затем ролловер (между)
...