Neale Pickett
·
2024-06-09
clock.h
1const uint8_t digits4x4[5][4] = {
2 {
3 0b00100110,
4 0b00101010,
5 0b00101010,
6 0b00101100,
7 },
8 {
9 0b11001110,
10 0b01100010,
11 0b00101000,
12 0b11001110,
13 },
14 {
15 0b11101010,
16 0b10001010,
17 0b00101110,
18 0b11100010,
19 },
20 {
21 0b11101000,
22 0b00101100,
23 0b00101010,
24 0b00100110,
25 },
26 {
27 0b11001110,
28 0b10101010,
29 0b01101110,
30 0b00101110,
31 }
32};
33
34void digitDraw(int xoffset, int yoffset, int val, CRGB color) {
35 for (int y=0; y<4; y++) {
36 uint8_t row = digits4x4[val/2][y] >> (4*(val%2));
37 for (int x=0; x<4; x++) {
38 bool bit = (row>>(3-x)) & 1;
39 int pos = (yoffset+y)*8 + (xoffset+x);
40 if (bit) {
41 grid[pos] = color;
42 }
43 }
44 }
45}
46
47void displayTimeDigits(bool day, unsigned long duration = 20*SECOND) {
48 unsigned long end = millis() + duration;
49
50 bool flash = false;
51
52 while (millis() < end) {
53 struct tm info;
54 getLocalTime(&info);
55
56 int h0 = (info.tm_hour / 1) % 10;
57 int h1 = (info.tm_hour / 10) % 10;
58 int m0 = (info.tm_min / 1) % 10;
59 int m1 = (info.tm_min / 10) % 10;
60
61 uint8_t hhue = day?HUE_AQUA:HUE_ORANGE;
62 uint8_t mhue = day?HUE_ORANGE:HUE_RED;
63
64 // Draw background
65 if (day) {
66 fill_solid(grid, 32, CHSV(hhue, 120, 32));
67 fill_solid(grid+32, 32, CHSV(mhue, 120, 32));
68 } else {
69 clear();
70 }
71
72 // Draw foreground
73 CRGB hcolor = CHSV(hhue, 240, 120);
74 CRGB mcolor = CHSV(mhue, 120, 120);
75 digitDraw(0, 0, h1, hcolor);
76 digitDraw(4, 0, h0, hcolor);
77 digitDraw(0, 4, m1, mcolor);
78 digitDraw(4, 4, m0, mcolor);
79
80 show();
81 pause(SECOND);
82
83 flash = !flash;
84 }
85}