const int boton1 = 10; // Pulsador para encender de derecha a izquierda
const int boton2 = 11; // Pulsador para desplazar de izquierda a derecha
const int leds[] = {9, 8, 7, 6, 5, 4, 3, 2}; // Pines de los LEDs
const int numLeds = 8;
bool estadoFinal = false; // Controla si el último LED está encendido
// Variables para el debounce
unsigned long lastDebounceTime1 = 0;
unsigned long lastDebounceTime2 = 0;
unsigned long debounceDelay = 50; // 50 ms de debounce
bool boton1EstadoAnterior = HIGH;
bool boton2EstadoAnterior = HIGH;
void setup() {
for (int i = 0; i < numLeds; i++) {
pinMode(leds[i], OUTPUT);
digitalWrite(leds[i], LOW); // Asegura que todos los LEDs empiecen apagados
}
pinMode(boton1, INPUT_PULLUP);
pinMode(boton2, INPUT_PULLUP);
}
void loop() {
// Leer el estado actual de los botones
bool boton1Estado = digitalRead(boton1);
bool boton2Estado = digitalRead(boton2);
// Verificar si se presionó el botón 1 (transición de HIGH a LOW) para encender LEDs de derecha a izquierda
if (boton1Estado == LOW && boton1EstadoAnterior == HIGH && (millis() - lastDebounceTime1) > debounceDelay && !estadoFinal) {
lastDebounceTime1 = millis(); // Actualiza el tiempo de debounce
for (int i = 0; i < numLeds; i++) {
digitalWrite(leds[i], HIGH);
delay(300);
if (i > 0) {
digitalWrite(leds[i - 1], LOW);
}
}
estadoFinal = true; // Indicar que el último LED está encendido
}
boton1EstadoAnterior = boton1Estado; // Actualiza el estado anterior de botón 1
// Verificar si se presionó el botón 2 (transición de HIGH a LOW) para desplazar LEDs de izquierda a derecha
if (boton2Estado == LOW && boton2EstadoAnterior == HIGH && (millis() - lastDebounceTime2) > debounceDelay && estadoFinal) {
lastDebounceTime2 = millis(); // Actualiza el tiempo de debounce
for (int i = numLeds - 1; i >= -1; i--) {
digitalWrite(leds[i], HIGH);
delay(300);
if (i < numLeds - 1) {
digitalWrite(leds[i + 1], LOW);
}
}
estadoFinal = false; // Resetear el estado final
}
boton2EstadoAnterior = boton2Estado; // Actualiza el estado anterior de botón 2
}