// Definir pines para cada segmento del display (A-G)
const int segmentos[] = {2, 3, 4, 5, 6, 7, 8}; // Pines 2 a 8 para los segmentos A-G
// Definir pines para los botones
const int pinBotonAscendente = 10; // Pin para el botón ascendente
const int pinBotonDescendente = 11; // Pin para el botón descendente
int contador = 0; // Valor inicial del conteo
// Patrones para los números 0-9 en un display de 7 segmentos (A-G)
const byte numeros[] = {
0b1111110, // 0
0b0110000, // 1
0b1101101, // 2
0b1111001, // 3
0b0110011, // 4
0b1011011, // 5
0b1011111, // 6
0b1110000, // 7
0b1111111, // 8
0b1111011 // 9
};
void setup() {
// Configuración de pines de segmentos como salida
for (int i = 0; i < 7; i++) {
pinMode(segmentos[i], OUTPUT);
}
// Configuración de los pines de los botones como entrada con resistencia pull-up
pinMode(pinBotonAscendente, INPUT_PULLUP);
pinMode(pinBotonDescendente, INPUT_PULLUP);
}
void mostrarNumero(int numero) {
byte patron = numeros[numero]; // Obtener el patrón para el número
for (int i = 0; i < 7; i++) {
digitalWrite(segmentos[i], (patron >> (6 - i)) & 1); // Actualizar cada segmento
}
}
void loop() {
// Leer el estado de los botones
bool botonAscendentePresionado = (digitalRead(pinBotonAscendente) == LOW);
bool botonDescendentePresionado = (digitalRead(pinBotonDescendente) == LOW);
static bool estadoAnteriorAscendente = HIGH;
static bool estadoAnteriorDescendente = HIGH;
// Detección de pulsación y antirrebote para botón ascendente
if (estadoAnteriorAscendente == HIGH && botonAscendentePresionado == LOW) {
if (contador < 9) {
contador++; // Incrementa el contador si no ha alcanzado el valor máximo
}
}
// Detección de pulsación y antirrebote para botón descendente
if (estadoAnteriorDescendente == HIGH && botonDescendentePresionado == LOW) {
if (contador > 0) {
contador--; // Decrementa el contador si no ha alcanzado el valor mínimo
}
}
// Actualizar estados anteriores
estadoAnteriorAscendente = botonAscendentePresionado;
estadoAnteriorDescendente = botonDescendentePresionado;
mostrarNumero(contador); // Mostrar el valor actual en el display
delay(50); // Pequeño retardo para evitar rebotes
}