// Definicja segmentów
const uint8_t SEGMENT_PATTERNS[12][14] PROGMEM = {
{0,1,2,3,4,5,8,9,10,11,12,13,255}, // 0
{4,5,12,13,255}, // 1
{2,3,4,5,6,7,8,9,10,11,255}, // 2
{2,3,4,5,6,7,10,11,12,13,255}, // 3
{0,1,4,5,6,7,12,13,255}, // 4
{0,1,2,3,6,7,10,11,12,13,255}, // 5
{0,1,2,3,6,7,8,9,10,11,12,13,255}, // 6
{2,3,4,5,12,13,255}, // 7
{0,1,2,3,4,5,6,7,8,9,10,11,12,13}, // 8
{0,1,2,3,4,5,6,7,10,11,12,13,255}, // 9
{}, // Pusty (10)
{6,7} // Minus (11)
};
// Ustawienie segmentu LED
void setSegment(uint8_t startLed, uint8_t value, uint8_t r, uint8_t g, uint8_t b) {
if (value > 11) return; // Ochrona przed złym indeksem
// Wyłącz segment
for (uint8_t i = 0; i < 14; i++) {
pixels.setPixelColor(startLed + i, 0, 0, 0);
}
// Włącz segmenty odpowiednie dla cyfry
uint8_t i = 0, led;
while ((led = pgm_read_byte(&(SEGMENT_PATTERNS[value][i]))) != 255) {
if (i >= 14) break;
pixels.setPixelColor(startLed + led, r, g, b);
i++;
yield(); // Zapobiega resetowi przez watchdog
}
}
Źródło: