const int segmentPins[8] = {2, 3, 4, 5, 6, 7, 8, 9};
const int digitPins[4] = {10, 11, 12, 13};
const byte numbers[10] = {
B00111111, // 0
B00000110, // 1
B01011011, // 2
B01001111, // 3
B01100110, // 4
B01101101, // 5
B01111101, // 6
B00000111, // 7
B01111111, // 8
B01101111 // 9
};
int contador = 0;
unsigned long tiempoPrevio = 0;
const int intervalo = 50; // Tiempo de actualización del contador (ms)
int digitoActual = 0;
unsigned long tiempoMultiplexado = 0;
const int intervaloMultiplexado = 5;
void setup() {
for (int i = 0; i < 8; i++) {
pinMode(segmentPins[i], OUTPUT);
}
for (int i = 0; i < 4; i++) {
pinMode(digitPins[i], OUTPUT);
digitalWrite(digitPins[i], HIGH);
}
}
void loop() {
if (millis() - tiempoPrevio >= intervalo) {
tiempoPrevio = millis();
contador++;
if (contador > 9999) contador = 0;
}
if (millis() - tiempoMultiplexado >= intervaloMultiplexado) {
tiempoMultiplexado = millis();
multiplexarDisplay(contador);
}
}
void multiplexarDisplay(int numero) {
static int digitos[4] = {0, 0, 0, 0};
int temp = numero;
for (int i = 3; i >= 0; i--) {
digitos[i] = temp % 10;
temp /= 10;
}
digitalWrite(digitPins[digitoActual], HIGH);
digitoActual = (digitoActual + 1) % 4;
mostrarDigito(digitos[digitoActual]);
digitalWrite(digitPins[digitoActual], LOW);
}
void mostrarDigito(int num) {
byte data = numbers[num];
for (int i = 0; i < 8; i++) {
digitalWrite(segmentPins[i], (data >> i) & 1);
}
}