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];
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:
if (state == FIREWORK) {
timer(0, 500);
break;
default:
break;
} 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;