Fix countdown timer overflow using modulo arithmetic
This commit is contained in:
parent
62e5882d1f
commit
b557d9f0df
1 changed files with 39 additions and 19 deletions
58
src/main.cpp
58
src/main.cpp
|
|
@ -1178,8 +1178,13 @@ indexY += 65;
|
||||||
}
|
}
|
||||||
lcd.drawString("WiFi: " + wifiStatus, 20, SCREEN_HEIGHT - 20);
|
lcd.drawString("WiFi: " + wifiStatus, 20, SCREEN_HEIGHT - 20);
|
||||||
|
|
||||||
int secondsLeft = (REFRESH_INTERVAL - (millis() - lastRefresh)) / 1000;
|
unsigned long elapsed = millis() - lastRefresh;
|
||||||
if (secondsLeft < 0) secondsLeft = 0;
|
int secondsLeft;
|
||||||
|
if (lastRefresh == 0) {
|
||||||
|
secondsLeft = 0;
|
||||||
|
} else {
|
||||||
|
secondsLeft = (REFRESH_INTERVAL - (elapsed % REFRESH_INTERVAL)) / 1000;
|
||||||
|
}
|
||||||
int mins = secondsLeft / 60;
|
int mins = secondsLeft / 60;
|
||||||
int secs = secondsLeft % 60;
|
int secs = secondsLeft % 60;
|
||||||
char timeStr[8];
|
char timeStr[8];
|
||||||
|
|
@ -1862,8 +1867,13 @@ void drawHardMoneyDetailScreen() {
|
||||||
lcd.drawString("WiFi: " + wifiStatus, 20, SCREEN_HEIGHT - 20);
|
lcd.drawString("WiFi: " + wifiStatus, 20, SCREEN_HEIGHT - 20);
|
||||||
|
|
||||||
lcd.setTextDatum(textdatum_t::middle_center);
|
lcd.setTextDatum(textdatum_t::middle_center);
|
||||||
int secondsLeft = (REFRESH_INTERVAL - (millis() - lastRefresh)) / 1000;
|
unsigned long elapsed = millis() - lastRefresh;
|
||||||
if (secondsLeft < 0) secondsLeft = 0;
|
int secondsLeft;
|
||||||
|
if (lastRefresh == 0) {
|
||||||
|
secondsLeft = 0;
|
||||||
|
} else {
|
||||||
|
secondsLeft = (REFRESH_INTERVAL - (elapsed % REFRESH_INTERVAL)) / 1000;
|
||||||
|
}
|
||||||
int mins = secondsLeft / 60;
|
int mins = secondsLeft / 60;
|
||||||
int secs = secondsLeft % 60;
|
int secs = secondsLeft % 60;
|
||||||
char timeStr[8];
|
char timeStr[8];
|
||||||
|
|
@ -2064,13 +2074,18 @@ void setup() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawFooterCountdown() {
|
void drawFooterCountdown() {
|
||||||
int secondsLeft = (REFRESH_INTERVAL - (millis() - lastRefresh)) / 1000;
|
unsigned long elapsed = millis() - lastRefresh;
|
||||||
if (secondsLeft < 0) secondsLeft = 0;
|
int secondsLeft;
|
||||||
|
if (lastRefresh == 0) {
|
||||||
|
secondsLeft = 0;
|
||||||
|
} else {
|
||||||
|
secondsLeft = (REFRESH_INTERVAL - (elapsed % REFRESH_INTERVAL)) / 1000;
|
||||||
|
}
|
||||||
int mins = secondsLeft / 60;
|
int mins = secondsLeft / 60;
|
||||||
int secs = secondsLeft % 60;
|
int secs = secondsLeft % 60;
|
||||||
char timeStr[8];
|
char timeStr[8];
|
||||||
sprintf(timeStr, "%d:%02d", mins, secs);
|
sprintf(timeStr, "%d:%02d", mins, secs);
|
||||||
|
|
||||||
lcd.setFont(&fonts::DejaVu18);
|
lcd.setFont(&fonts::DejaVu18);
|
||||||
lcd.setTextColor(TFT_WHITE, TFT_ORANGE);
|
lcd.setTextColor(TFT_WHITE, TFT_ORANGE);
|
||||||
lcd.setTextDatum(textdatum_t::middle_center);
|
lcd.setTextDatum(textdatum_t::middle_center);
|
||||||
|
|
@ -2142,18 +2157,23 @@ if (currentScreen == SCREEN_DASHBOARD && millis() - lastCountdownUpdate >= 1000)
|
||||||
drawFooterCountdown();
|
drawFooterCountdown();
|
||||||
}
|
}
|
||||||
if (currentScreen == SCREEN_HARD_MONEY_DETAIL && millis() - lastCountdownUpdate >= 1000) {
|
if (currentScreen == SCREEN_HARD_MONEY_DETAIL && millis() - lastCountdownUpdate >= 1000) {
|
||||||
lastCountdownUpdate = millis();
|
lastCountdownUpdate = millis();
|
||||||
lcd.setFont(&fonts::DejaVu18);
|
lcd.setFont(&fonts::DejaVu18);
|
||||||
lcd.setTextColor(TFT_WHITE, TFT_ORANGE);
|
lcd.setTextColor(TFT_WHITE, TFT_ORANGE);
|
||||||
lcd.setTextDatum(textdatum_t::middle_center);
|
lcd.setTextDatum(textdatum_t::middle_center);
|
||||||
int secondsLeft = (REFRESH_INTERVAL - (millis() - lastRefresh)) / 1000;
|
unsigned long elapsed = millis() - lastRefresh;
|
||||||
if (secondsLeft < 0) secondsLeft = 0;
|
int secondsLeft;
|
||||||
int mins = secondsLeft / 60;
|
if (lastRefresh == 0) {
|
||||||
int secs = secondsLeft % 60;
|
secondsLeft = 0;
|
||||||
char timeStr[8];
|
} else {
|
||||||
sprintf(timeStr, "%d:%02d", mins, secs);
|
secondsLeft = (REFRESH_INTERVAL - (elapsed % REFRESH_INTERVAL)) / 1000;
|
||||||
lcd.drawString(String(timeStr), SCREEN_WIDTH / 2, SCREEN_HEIGHT - 20);
|
}
|
||||||
}
|
int mins = secondsLeft / 60;
|
||||||
|
int secs = secondsLeft % 60;
|
||||||
|
char timeStr[8];
|
||||||
|
sprintf(timeStr, "%d:%02d", mins, secs);
|
||||||
|
lcd.drawString(String(timeStr), SCREEN_WIDTH / 2, SCREEN_HEIGHT - 20);
|
||||||
|
}
|
||||||
|
|
||||||
if (currentScreen == SCREEN_HARD_MONEY_DETAIL) {
|
if (currentScreen == SCREEN_HARD_MONEY_DETAIL) {
|
||||||
if (hmNeedsRefresh || !btcHmLoaded || !goldHmLoaded || !silverHmLoaded) {
|
if (hmNeedsRefresh || !btcHmLoaded || !goldHmLoaded || !silverHmLoaded) {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue