#include <Arduino.h>
// Pines del Display 1 (unidades)
const int segA1 = 22;
const int segB1 = 23;
const int segC1 = 21;
const int segD1 = 19;
const int segE1 = 18;
const int segF1 = 5;
const int segG1 = 17;
// Pines del Display 2 (decenas)
const int segA2 = 12;
const int segB2 = 14;
const int segC2 = 32;
const int segD2 = 33;
const int segE2 = 25;
const int segF2 = 27;
const int segG2 = 26;
// Pines de los botones
const int btnAscendente = 0;
const int btnDescendente = 2;
// Contador
int contador = 0;
bool contarAscendente = true; // Dirección del contador, por defecto ascendente
// Tiempo para el incremento automático
unsigned long tiempoAnterior = 0; // Para llevar el control del tiempo
const unsigned long intervalo = 1000; // Incremento automático cada 1000 ms (1 segundo)
// Mapeo de segmentos para los números (0-9)
const int numeros[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
};
// Función para mostrar un número en un display
void mostrarNumero(int numero, bool esDisplay2) {
int segA = esDisplay2 ? segA2 : segA1;
int segB = esDisplay2 ? segB2 : segB1;
int segC = esDisplay2 ? segC2 : segC1;
int segD = esDisplay2 ? segD2 : segD1;
int segE = esDisplay2 ? segE2 : segE1;
int segF = esDisplay2 ? segF2 : segF1;
int segG = esDisplay2 ? segG2 : segG1;
digitalWrite(segA, numeros[numero][0]);
digitalWrite(segB, numeros[numero][1]);
digitalWrite(segC, numeros[numero][2]);
digitalWrite(segD, numeros[numero][3]);
digitalWrite(segE, numeros[numero][4]);
digitalWrite(segF, numeros[numero][5]);
digitalWrite(segG, numeros[numero][6]);
}
void setup() {
pinMode(segA1, OUTPUT); pinMode(segB1, OUTPUT); pinMode(segC1, OUTPUT);
pinMode(segD1, OUTPUT); pinMode(segE1, OUTPUT); pinMode(segF1, OUTPUT);
pinMode(segG1, OUTPUT);
pinMode(segA2, OUTPUT); pinMode(segB2, OUTPUT); pinMode(segC2, OUTPUT);
pinMode(segD2, OUTPUT); pinMode(segE2, OUTPUT); pinMode(segF2, OUTPUT);
pinMode(segG2, OUTPUT);
pinMode(btnAscendente, INPUT_PULLUP);
pinMode(btnDescendente, INPUT_PULLUP);
mostrarNumero(0, false); // Unidades
mostrarNumero(0, true); // Decenas
}
void loop() {
// Incrementar o decrementar el contador automáticamente cada segundo
unsigned long tiempoActual = millis();
if (tiempoActual - tiempoAnterior >= intervalo) {
tiempoAnterior = tiempoActual;
// Verificar la dirección de conteo
if (contarAscendente) {
contador++;
if (contador > 99) contador = 0; // Reiniciar a 0 si supera 99
} else {
contador--;
if (contador < 0) contador = 99; // Volver a 99 si llega a 0
}
}
// Cambiar a modo ascendente si se presiona el botón ascendente
if (digitalRead(btnAscendente) == LOW) {
contarAscendente = true; // Cambia la dirección del conteo a ascendente
delay(200); // Anti rebote
}
// Cambiar a modo descendente si se presiona el botón descendente
if (digitalRead(btnDescendente) == LOW) {
contarAscendente = false; // Cambia la dirección del conteo a descendente
delay(200); // Anti rebote
}
// Mostrar las unidades y las decenas
int unidades = contador % 10;
int decenas = contador / 10;
mostrarNumero(unidades, false); // Mostrar unidades en Display 1
mostrarNumero(decenas, true); // Mostrar decenas en Display 2
}