Did some arithmetic to have the clock segments consistent

This commit is contained in:
Neale Pickett 2023-01-08 17:15:33 -07:00
parent 4b1b5620be
commit d16613cb5d
3 changed files with 43 additions and 10 deletions

5
.gitignore vendored
View File

@ -1 +1,4 @@
.vscode
debug.cfg
debug_custom.json
esp32.svd
.vscode/

View File

@ -49,6 +49,21 @@ A happy setup will cycle through each color once,
and then display orange for a while.
Clock
-----
At night,
and sometimes during the day,
it displays something like a clock.
You will need to tell it your time zone.
It doesn't do daylight saving time, sorry.
I suggest you set it to standard time and pretend it's in sync with the sun.
* Each pixel in the top row is 1 hour (3600 seconds)
* Each pixel in the middle row is 5 minutes (300 seconds)
* Each pixel in the bottom row is 25 seconds
* There are four pixels around the bottom that move every 5 seconds
Philosophy
----------

View File

@ -250,15 +250,28 @@ void displayTime(unsigned long duration = 20 * SECOND) {
while (millis() < end) {
timeClient.update();
int hh = timeClient.getHours();
int mm = timeClient.getMinutes();
int ss = timeClient.getSeconds();
int mmss = timeClient.getMinutes()*60 + timeClient.getSeconds();
uint8_t hue = HUE_YELLOW;
// Top: Hours
if (hh >= 12) {
hue = HUE_ORANGE;
hh -= 12;
}
// Middle: 5m (300s)
uint8_t mm = (mmss/300) % 12;
// Bottom: 25s
uint8_t ss = (mmss/25) % 12;
// Outer: 5s
uint8_t s = (mmss/5) % 5;
grid[64 - 7 - 1] = CHSV(HUE_PURPLE, 64, (s==1)?64:0);
grid[64 - 15 - 1] = CHSV(HUE_PURPLE, 64, (s==2)?64:0);
grid[64 - 8 - 1] = CHSV(HUE_PURPLE, 64, (s==3)?64:0);
grid[64 - 0 - 1] = CHSV(HUE_PURPLE, 64, (s==4)?64:0);
for (int i = 0; i < 12; i++) {
// Omit first and last position on a row
int pos = i + 1;
@ -267,8 +280,8 @@ void displayTime(unsigned long duration = 20 * SECOND) {
}
grid[pos + 0] = CHSV(hue, 255, (i<hh)?128:48);
grid[pos + 24] = CHSV(HUE_RED, 255, (i<mm/5)?128:48);
grid[pos + 48] = CHSV(HUE_PINK, 128, (i<ss/5)?96:48);
grid[pos + 24] = CHSV(HUE_RED, 255, (i<mm)?128:48);
grid[pos + 48] = CHSV(HUE_PINK, 128, (i<ss)?96:48);
}
FastLED.show();
@ -298,11 +311,15 @@ void loop() {
}
FastLED.setBrightness(day?DAY_BRIGHTNESS:NIGHT_BRIGHTNESS);
// If we don't yet have net art, try a little harder to get it.
if ((NetArtFrames == 0) || !conn) {
getprob = 16;
}
if (p.Pick(getprob)) {
if (!day || p.Pick(4)) {
// At night, only ever show the clock
displayTime(2 * MINUTE);
} else if (p.Pick(getprob)) {
netget();
} else if (day && p.Pick(4)) {
// These can be hella bright
@ -324,7 +341,5 @@ void loop() {
cm5(8);
} else if (p.Pick(2)) {
cm5(16);
} else if (p.Pick(4)) {
displayTime(1 * MINUTE);
}
}
}