#include "Effect.h" #include "effect_big_clock.h" #include "fonts.h" #include "ntp.h" void BigClockEffect::loop() { window->clear(); uint8_t h = ntpClient.getHours(); window->drawChar(&font_numbers3x5_blocky, 6<<8, 2<<8, '0' + (h / 10), &_color_font); window->drawChar(&font_numbers3x5_blocky, 11<<8, 2<<8, '0' + (h % 10), &_color_font); uint8_t m = ntpClient.getMinutes(); window->drawChar(&font_numbers3x5_blocky, 6<<8, 9<<8, '0' + (m / 10), &_color_font); window->drawChar(&font_numbers3x5_blocky, 11<<8, 9<<8, '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, 0, &_color_seconds); } uint16_t millis = ntpClient.getEpochMillis() % 1000; if (millis > 0) { //uint16_t position = ((60 - (60 - seconds) * millis) << 8) / 1000; //uint8_t position = 60 - ((60 - seconds) * millis / 1000); //percent = seconds00 - (59-seconds)ff uint16_t position = ((seconds<<8) + (((60 - seconds)<<8) * millis / 1000)); _draw_border_pixel(position>>8, position&0xFF, &_color_seconds); } } void BigClockEffect::_draw_border_pixel(uint8_t i, uint8_t part, CRGB* color) { accum88 x, y; if (i<=8) { x = (7 + i)<<8 | part; y = 0; } else if (i<=23) { x = 15 << 8; y = (i - 10) << 8 | (255 - part); } else if (i<= 38) { x = (15 - 1 - i + 23) << 8 | (255 - part); y = 15 << 8; } else if (i <= 53) { x = 0; y = (15 - i + 38) << 8 | part; } else { x = (i - 53) << 8 | part; y = 0; } window->setSubPixel(x, y, color); }