From 2ddd77eb5cc41dd0ce04554cc2bf3d88fbdff3b8 Mon Sep 17 00:00:00 2001 From: Fabian Schlenz Date: Wed, 4 Sep 2019 05:59:30 +0200 Subject: [PATCH] Fixed big_clock effect and made it a lot nicer with moving pixels for seconds. --- include/effect_big_clock.h | 14 +++------ src/effect_big_clock.cpp | 63 +++++++++++++++++++++++++++++--------- 2 files changed, 52 insertions(+), 25 deletions(-) diff --git a/include/effect_big_clock.h b/include/effect_big_clock.h index e8ad46f..2c5d916 100644 --- a/include/effect_big_clock.h +++ b/include/effect_big_clock.h @@ -5,17 +5,11 @@ class BigClockEffect : public Effect { private: - CRGB color_h = CRGB(0xFF0000); - CRGB color_m = CRGB(0x00FF00); - CRGB color_colon = CRGB(0xFFFF00); + CRGB _color_font = CRGB(0xAAAAAA); + CRGB _color_seconds = CRGB(0xFF0000); - void drawNumber(uint8_t number, int x, int y, CRGB color); - - void drawText(char *text, int x, int y, CRGB color); - - const unsigned char* font_char(const unsigned char* font, char c); - - void drawSprite(const unsigned char* sprite, int xOffset, int yOffset, CRGB color); + void _draw_seconds(); + void _draw_border_pixel(uint8_t second, CRGB* color); public: void loop(); diff --git a/src/effect_big_clock.cpp b/src/effect_big_clock.cpp index 0bc49b3..fedbd66 100644 --- a/src/effect_big_clock.cpp +++ b/src/effect_big_clock.cpp @@ -3,21 +3,54 @@ #include "fonts.h" #include "ntp.h" -void BigClockEffect::drawNumber(uint8_t number, int x, int y, CRGB color) { - char buffer[7]; - sprintf(buffer, "%02d", number); - drawText(buffer, x, y, color); -} - -void BigClockEffect::drawText(char *text, int x, int y, CRGB color) { - for (uint8_t i = 0; i < strlen(text); i++) { - window->drawChar(&font_numbers4x7, text[i], x + i * 4, y, &color); - } -} - void BigClockEffect::loop() { window->clear(); - drawNumber(ntpClient.getHours(), 0, 0, color_h); - drawNumber(ntpClient.getMinutes(), 8, 0, color_m); - drawNumber(ntpClient.getSeconds(), 8, 8, color_colon); + uint8_t h = ntpClient.getHours(); + window->drawChar(&font_numbers3x5_blocky, 6, 2, '0' + (h / 10), &_color_font); + window->drawChar(&font_numbers3x5_blocky, 11, 2, '0' + (h % 10), &_color_font); + + uint8_t m = ntpClient.getMinutes(); + window->drawChar(&font_numbers3x5_blocky, 6, 9, '0' + (m / 10), &_color_font); + window->drawChar(&font_numbers3x5_blocky, 11, 9, '0' + (m % 10), &_color_font); + + uint8_t s = ntpClient.getSeconds(); + if (s & 1) { + window->setPixel(3, 10, &_color_font); + window->setPixel(3, 12, &_color_font); + } + + _draw_seconds(); +} + +void BigClockEffect::_draw_seconds() { + uint8_t seconds = ntpClient.getSeconds(); + for (int i=1; i<=seconds; i++) { + _draw_border_pixel(i, &_color_seconds); + } + uint16_t millis = ntpClient.getEpochMillis() % 1000; + if (millis > 0) { + uint8_t part = 60 - ((60 - seconds) * millis / 1000); + _draw_border_pixel(part, &_color_seconds); + } +} + +void BigClockEffect::_draw_border_pixel(uint8_t i, CRGB* color) { + uint8_t x, y; + if (i<=8) { + x = 7 + i; + y = 0; + } else if (i<=23) { + x = 15; + y = i - 8; + } else if (i<= 38) { + x = 15 - i + 23; + y = 15; + } else if (i <= 53) { + x = 0; + y = 15 - i + 38; + } else { + x = i - 53; + y = 0; + } + window->setPixel(x, y, color); }