#include <Adafruit_NeoPixel.h>
#define PIN 9
#define NUM_LEDS 112 // 2 dígitos × 56 LEDs
#define DIGIT_LEDS 56 // LEDs por dígito
#define SEG_LEDS 8 // LEDs por segmento
Adafruit_NeoPixel strip(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
// Offsets de cada segmento dentro de un dígito
// A=0..7, B=8..15, ..., G=48..55
const int segmentOffset[7] = {
0, // A
8, // B
16, // C
24, // D
32, // E
40, // F
48 // G
};
// Tabla de segmentos encendidos para cada número
// Orden: A B C D E F G
const bool digitMap[10][7] = {
{1,1,1,1,1,1,0}, // 0
{0,1,1,0,0,0,0}, // 1
{1,1,0,1,1,0,1}, // 2
{1,1,1,1,0,0,1}, // 3
{0,1,1,0,0,1,1}, // 4
{1,0,1,1,0,1,1}, // 5
{1,0,1,1,1,1,1}, // 6
{1,1,1,0,0,0,0}, // 7
{1,1,1,1,1,1,1}, // 8
{1,1,1,1,0,1,1} // 9
};
// Enciende un segmento usando matrices
void drawSegment(int digit, int seg, uint32_t color) {
int base = digit * DIGIT_LEDS;
int offset = segmentOffset[seg];
for (int i = 0; i < SEG_LEDS; i++) {
strip.setPixelColor(base + offset + i, color);
}
}
// Dibuja un dígito completo usando la tabla
void drawDigit(int digit, int value, uint32_t color) {
for (int seg = 0; seg < 7; seg++) {
if (digitMap[value][seg]) {
drawSegment(digit, seg, color);
}
}
}
// Muestra un número de 0 a 99
void showNumber(int num, uint32_t color) {
strip.clear();
int tens = num / 10;
int ones = num % 10;
drawDigit(0, tens, color); // dígito izquierdo
drawDigit(1, ones, color); // dígito derecho
strip.show();
}
void setup() {
strip.begin();
strip.show();
}
void loop() {
for (int n = 0; n < 100; n++) {
showNumber(n, strip.Color(255, 0, 0));
delay(300);
}
}