wallart

8x8 pixel display firmware
git clone https://git.woozle.org/neale/wallart.git

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}