Finally, big_clock is working correctly with smoothly moving seconds and stuff. Also, the spacing of the moving seconds is now configurable.
This commit is contained in:
parent
377ccc477f
commit
4c611da6d1
@ -6,10 +6,12 @@ class BigClockEffect : public Effect {
|
|||||||
private:
|
private:
|
||||||
CRGB _color_font = CRGB(0xAAAAAA);
|
CRGB _color_font = CRGB(0xAAAAAA);
|
||||||
CRGB _color_seconds_light = CRGB(0xFFFF00);
|
CRGB _color_seconds_light = CRGB(0xFFFF00);
|
||||||
CRGB _color_seconds_dark = CRGB(0xFF0000);
|
CRGB _color_seconds_dark = CRGB(0xAA0000);
|
||||||
|
CRGB _color_seconds_moving_light = CRGB(0x666600);
|
||||||
|
CRGB _color_seconds_moving_dark = CRGB(0x660000);
|
||||||
|
|
||||||
void _draw_seconds();
|
void _draw_seconds();
|
||||||
void _draw_border_pixel(uint8_t second, uint8_t part, CRGB* color);
|
void _draw_border_pixel(accum88 pos, CRGB* color);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void loop(uint16_t ms);
|
void loop(uint16_t ms);
|
||||||
|
@ -32,6 +32,10 @@ struct Settings {
|
|||||||
uint16_t random_count = 32;
|
uint16_t random_count = 32;
|
||||||
} matrix;
|
} matrix;
|
||||||
|
|
||||||
|
struct /* big_clock */ {
|
||||||
|
uint16_t spacing = 5;
|
||||||
|
} big_clock;
|
||||||
|
|
||||||
struct /* confetti */ {
|
struct /* confetti */ {
|
||||||
uint16_t pixels_per_loop = 2;
|
uint16_t pixels_per_loop = 2;
|
||||||
} confetti;
|
} confetti;
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#include "effect_big_clock.h"
|
#include "effect_big_clock.h"
|
||||||
#include "fonts.h"
|
#include "fonts.h"
|
||||||
#include "ntp.h"
|
#include "ntp.h"
|
||||||
|
#include "settings.h"
|
||||||
|
|
||||||
void BigClockEffect::loop(uint16_t ms) {
|
void BigClockEffect::loop(uint16_t ms) {
|
||||||
window->clear();
|
window->clear();
|
||||||
@ -25,35 +26,35 @@ void BigClockEffect::loop(uint16_t ms) {
|
|||||||
void BigClockEffect::_draw_seconds() {
|
void BigClockEffect::_draw_seconds() {
|
||||||
uint8_t seconds = ntpClient.getSeconds();
|
uint8_t seconds = ntpClient.getSeconds();
|
||||||
for (int i=1; i<=seconds; i++) {
|
for (int i=1; i<=seconds; i++) {
|
||||||
_draw_border_pixel(i, 0, (i%5==0) ? &_color_seconds_light : &_color_seconds_dark);
|
_draw_border_pixel(i<<8, (i%5==0) ? &_color_seconds_light : &_color_seconds_dark);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t millis = ntpClient.getEpochMillis() % 1000;
|
uint16_t millis = ntpClient.getEpochMillis() % 1000;
|
||||||
uint8_t offset = 5 - (millis / 200);
|
accum88 pos = (seconds<<8) + ((settings.effects.big_clock.spacing-1)<<8) * (1000 - millis) / 1000 + (1<<8);
|
||||||
uint8_t part = 255 - ((millis % 200) * 256 / 200);
|
uint8_t sec = seconds + 1;
|
||||||
uint8_t number_to_show = (60 - seconds - offset) / 5 + 1;
|
while (pos < (60<<8)) {
|
||||||
for(uint8_t i = 0; i<number_to_show; i++) {
|
_draw_border_pixel(pos, sec%5==0 ? &_color_seconds_moving_light : &_color_seconds_moving_dark);
|
||||||
uint8_t pos = seconds + offset + i*5;
|
pos += settings.effects.big_clock.spacing<<8;
|
||||||
_draw_border_pixel(pos, part, (seconds + i + 1)%5==0 ? &_color_seconds_light : &_color_seconds_dark);
|
sec++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BigClockEffect::_draw_border_pixel(uint8_t i, uint8_t part, CRGB* color) {
|
void BigClockEffect::_draw_border_pixel(accum88 i, CRGB* color) {
|
||||||
accum88 x, y;
|
accum88 x, y;
|
||||||
if (i<=8) {
|
if (i<(8<<8)) {
|
||||||
x = ((7+i)<<8) + part;
|
x = i + (7<<8);
|
||||||
y = 0;
|
y = 0;
|
||||||
} else if (i<=23) {
|
} else if (i<(23<<8)) {
|
||||||
x = 15<<8;
|
x = 15<<8;
|
||||||
y = ((i-8)<<8) + part;
|
y = i - (8<<8);
|
||||||
} else if (i<=38) {
|
} else if (i<(38<<8)) {
|
||||||
x = ((38-i)<<8) - part;
|
x = (38<<8) - i;
|
||||||
y = 15<<8;
|
y = 15<<8;
|
||||||
} else if (i<=53) {
|
} else if (i<(53<<8)) {
|
||||||
x = 0;
|
x = 0;
|
||||||
y = ((53-i)<<8) - part;
|
y = (53<<8) - i;
|
||||||
} else if (i<=60) {
|
} else if (i<=(60<<8)) {
|
||||||
x = ((i-53)<<8) + part;
|
x = i - (53<<8);
|
||||||
y = 0;
|
y = 0;
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
|
@ -7,6 +7,8 @@ Settings settings;
|
|||||||
Setting all_settings[] = {
|
Setting all_settings[] = {
|
||||||
{"fps", &settings.fps, TYPE_UINT8},
|
{"fps", &settings.fps, TYPE_UINT8},
|
||||||
|
|
||||||
|
{"effects.big_clock.spacing", &settings.effects.big_clock.spacing, TYPE_UINT8},
|
||||||
|
|
||||||
{"effects.confetti.pixels_per_loop", &settings.effects.confetti.pixels_per_loop, TYPE_UINT8},
|
{"effects.confetti.pixels_per_loop", &settings.effects.confetti.pixels_per_loop, TYPE_UINT8},
|
||||||
|
|
||||||
{"effects.cycle.random", &settings.effects.cycle.random, TYPE_BOOL},
|
{"effects.cycle.random", &settings.effects.cycle.random, TYPE_BOOL},
|
||||||
@ -47,7 +49,7 @@ Setting all_settings[] = {
|
|||||||
{"effects.tv_static.black_bar_speed", &settings.effects.tv_static.black_bar_speed, TYPE_UINT16},
|
{"effects.tv_static.black_bar_speed", &settings.effects.tv_static.black_bar_speed, TYPE_UINT16},
|
||||||
};
|
};
|
||||||
|
|
||||||
const uint8_t all_settings_size = 29;
|
const uint8_t all_settings_size = 30;
|
||||||
|
|
||||||
bool change_setting(const char* key, uint16_t new_value) {
|
bool change_setting(const char* key, uint16_t new_value) {
|
||||||
LOGln("Settings * Setting %s to new value %d.", key, new_value);
|
LOGln("Settings * Setting %s to new value %d.", key, new_value);
|
||||||
|
Loading…
Reference in New Issue
Block a user