Fix countdown timer overflow using modulo arithmetic

This commit is contained in:
Chad 2026-04-20 13:47:56 -05:00
parent 62e5882d1f
commit b557d9f0df

View file

@ -1178,8 +1178,13 @@ indexY += 65;
}
lcd.drawString("WiFi: " + wifiStatus, 20, SCREEN_HEIGHT - 20);
int secondsLeft = (REFRESH_INTERVAL - (millis() - lastRefresh)) / 1000;
if (secondsLeft < 0) secondsLeft = 0;
unsigned long elapsed = millis() - lastRefresh;
int secondsLeft;
if (lastRefresh == 0) {
secondsLeft = 0;
} else {
secondsLeft = (REFRESH_INTERVAL - (elapsed % REFRESH_INTERVAL)) / 1000;
}
int mins = secondsLeft / 60;
int secs = secondsLeft % 60;
char timeStr[8];
@ -1862,8 +1867,13 @@ void drawHardMoneyDetailScreen() {
lcd.drawString("WiFi: " + wifiStatus, 20, SCREEN_HEIGHT - 20);
lcd.setTextDatum(textdatum_t::middle_center);
int secondsLeft = (REFRESH_INTERVAL - (millis() - lastRefresh)) / 1000;
if (secondsLeft < 0) secondsLeft = 0;
unsigned long elapsed = millis() - lastRefresh;
int secondsLeft;
if (lastRefresh == 0) {
secondsLeft = 0;
} else {
secondsLeft = (REFRESH_INTERVAL - (elapsed % REFRESH_INTERVAL)) / 1000;
}
int mins = secondsLeft / 60;
int secs = secondsLeft % 60;
char timeStr[8];
@ -2064,8 +2074,13 @@ void setup() {
}
void drawFooterCountdown() {
int secondsLeft = (REFRESH_INTERVAL - (millis() - lastRefresh)) / 1000;
if (secondsLeft < 0) secondsLeft = 0;
unsigned long elapsed = millis() - lastRefresh;
int secondsLeft;
if (lastRefresh == 0) {
secondsLeft = 0;
} else {
secondsLeft = (REFRESH_INTERVAL - (elapsed % REFRESH_INTERVAL)) / 1000;
}
int mins = secondsLeft / 60;
int secs = secondsLeft % 60;
char timeStr[8];
@ -2146,8 +2161,13 @@ if (currentScreen == SCREEN_HARD_MONEY_DETAIL && millis() - lastCountdownUpdate
lcd.setFont(&fonts::DejaVu18);
lcd.setTextColor(TFT_WHITE, TFT_ORANGE);
lcd.setTextDatum(textdatum_t::middle_center);
int secondsLeft = (REFRESH_INTERVAL - (millis() - lastRefresh)) / 1000;
if (secondsLeft < 0) secondsLeft = 0;
unsigned long elapsed = millis() - lastRefresh;
int secondsLeft;
if (lastRefresh == 0) {
secondsLeft = 0;
} else {
secondsLeft = (REFRESH_INTERVAL - (elapsed % REFRESH_INTERVAL)) / 1000;
}
int mins = secondsLeft / 60;
int secs = secondsLeft % 60;
char timeStr[8];