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