// Pines de los segmentos del display de 7 segmentos
const int segmentA = 13;
const int segmentB = 12;
const int segmentC = 14;
const int segmentD = 27;
const int segmentE = 26;
const int segmentF = 25;
const int segmentG = 33;
// Pines para seleccionar cada display
const int display1 = 32;
const int display2 = 15;
// Pin para el botón (evento de conteo)
const int pinBoton = 4; // Pin digital de entrada para el botón
// Mapeo de los números del 0 al 9 en los segmentos del display (catodo común)
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
};
// Variables del contador
int contador = 0;
bool estadoBotonAnterior = LOW; // Estado anterior del botón
// Función para mostrar el número en los segmentos
void mostrarNumero(int numero) {
digitalWrite(segmentA, numeros[numero][0]);
digitalWrite(segmentB, numeros[numero][1]);
digitalWrite(segmentC, numeros[numero][2]);
digitalWrite(segmentD, numeros[numero][3]);
digitalWrite(segmentE, numeros[numero][4]);
digitalWrite(segmentF, numeros[numero][5]);
digitalWrite(segmentG, numeros[numero][6]);
}
// Configuración inicial
void setup() {
// Configurar los pines de los segmentos como salida
pinMode(segmentA, OUTPUT);
pinMode(segmentB, OUTPUT);
pinMode(segmentC, OUTPUT);
pinMode(segmentD, OUTPUT);
pinMode(segmentE, OUTPUT);
pinMode(segmentF, OUTPUT);
pinMode(segmentG, OUTPUT);
// Configurar los pines de los displays como salida
pinMode(display1, OUTPUT);
pinMode(display2, OUTPUT);
// Configurar el pin del botón como entrada con resistencia pull-down
pinMode(pinBoton, INPUT_PULLDOWN);
}
// Bucle principal
void loop() {
// Leer el estado actual del botón
bool estadoBotonActual = digitalRead(pinBoton);
// Detectar flanco ascendente: cuando el botón pasa de LOW a HIGH
if (estadoBotonActual == HIGH && estadoBotonAnterior == LOW) {
contador++; // Incrementar el contador
if (contador >= 100) {
contador = 0; // Reiniciar cuando llegue a 99
}
}
// Guardar el estado del botón para la siguiente comparación
estadoBotonAnterior = estadoBotonActual;
// Obtener las decenas y las unidades
int decenas = contador / 10;
int unidades = contador % 10;
// Multiplexado para los displays
// Mostrar las decenas en el primer display
digitalWrite(display1, LOW); // Encender el primer display
digitalWrite(display2, HIGH); // Apagar el segundo display
mostrarNumero(decenas); // Mostrar decenas
delay(10); // Pausa breve para el multiplexado (10 ms)
// Mostrar las unidades en el segundo display
digitalWrite(display1, HIGH); // Apagar el primer display
digitalWrite(display2, LOW); // Encender el segundo display
mostrarNumero(unidades); // Mostrar unidades
delay(10); // Pausa breve para el multiplexado (10 ms)
}