FIX: NewYear realtimeOK check + days uint8_t overflow

This commit is contained in:
Patrick Haßel 2023-01-09 10:27:39 +01:00
parent 8a7ddb006c
commit a1ad406c35

View File

@ -12,7 +12,7 @@ private:
Firework fireworks[MAX_FIREWORKS]; Firework fireworks[MAX_FIREWORKS];
uint8_t days = 0; uint16_t days = 0;
uint8_t level = 0; uint8_t level = 0;
@ -37,6 +37,7 @@ protected:
setMode(NO_TIME); setMode(NO_TIME);
} else if (now.tm_mon != 1 || now.tm_mday != 1 || now.tm_hour != 0) { } else if (now.tm_mon != 1 || now.tm_mday != 1 || now.tm_hour != 0) {
days = getDayCountForYear(now.tm_year) - now.tm_yday - 1; days = getDayCountForYear(now.tm_year) - now.tm_yday - 1;
setMode(COUNTDOWN);
if (days == 0) { if (days == 0) {
loopLastDay(); loopLastDay();
} else { } else {
@ -51,7 +52,6 @@ protected:
} }
void loopLastDay() { void loopLastDay() {
setMode(LAST_DAY);
int levelTmp = (int) round(32 * realtimeMilliseconds / 1000.0);; int levelTmp = (int) round(32 * realtimeMilliseconds / 1000.0);;
if (level != levelTmp) { if (level != levelTmp) {
level = levelTmp; level = levelTmp;
@ -60,7 +60,6 @@ protected:
} }
void loopMultipleDays() { void loopMultipleDays() {
setMode(MULTIPLE_DAYS);
if (realtimeChanged) { if (realtimeChanged) {
markDirty(); markDirty();
} }
@ -72,7 +71,7 @@ protected:
void draw(Display &display) override { void draw(Display &display) override {
display.clear(); display.clear();
if (realtimeOK) { if (!realtimeOK) {
drawNoTime(display); drawNoTime(display);
} else if (now.tm_mon == 1 && now.tm_mday == 1 && now.tm_hour == 0) { } else if (now.tm_mon == 1 && now.tm_mday == 1 && now.tm_hour == 0) {
drawYear(display, now.tm_year + 1900); drawYear(display, now.tm_year + 1900);
@ -86,8 +85,7 @@ private:
enum State { enum State {
NO_TIME, NO_TIME,
MULTIPLE_DAYS, COUNTDOWN,
LAST_DAY,
FIREWORK, FIREWORK,
}; };
@ -96,17 +94,12 @@ private:
void setMode(State state) { void setMode(State state) {
if (_state != state) { if (_state != state) {
_state = state; _state = state;
markDirty(); if (state == FIREWORK) {
timer(0, 0); timer(0, 500);
switch (state) { } else {
case LAST_DAY: timer(0, 0);
break;
case FIREWORK:
timer(0, 500);
break;
default:
break;
} }
markDirty();
} }
} }
@ -158,14 +151,14 @@ private:
} }
static void drawDay(Display &display, int days, uint8_t *x) { static void drawDay(Display &display, int days, uint8_t *x) {
if (days > 100) { if (days >= 100) {
*x += display.print(*x, 1, days / 100, WHITE); *x += display.print(*x, 1, days / 100, WHITE);
} else { } else {
*x += 3; *x += 3;
} }
(*x)++; (*x)++;
if (days > 10) { if (days >= 10) {
*x += display.print(*x, 1, days / 10 % 10, WHITE); *x += display.print(*x, 1, days / 10 % 10, WHITE);
} else { } else {
*x += 3; *x += 3;