// Definición de pines para LEDs
const int NUM_LEDS = 8;
const int LED_PINS[NUM_LEDS] = {15, 2, 4, 5, 18, 19, 21, 22}; // Pines para los 8 LEDs
// Pines para pulsadores
const int BOTON_DERECHA = 14; // Secuencia hacia la derecha
const int BOTON_IZQUIERDA = 13; // Secuencia hacia la izquierda
const int BOTON_BIDIRECCIONAL = 12; // Secuencia bidireccional
// Variables para el control de rebote de los botones
unsigned long ultimoTiempoCambio[] = {0, 0, 0};
const long tiempoRebote = 50;
bool estadoAnteriorBotones[] = {HIGH, HIGH, HIGH};
// Variables de control
bool direccion = true; // true = derecha, false = izquierda
int posicionActual = 0;
const int VELOCIDAD = 100; // Velocidad de la secuencia en milisegundos
void setup() {
// Configurar pines de LEDs como salidas
for(int i = 0; i < NUM_LEDS; i++) {
pinMode(LED_PINS[i], OUTPUT);
digitalWrite(LED_PINS[i], LOW);
}
// Configurar pines de botones como entradas con pull-up
pinMode(BOTON_DERECHA, INPUT_PULLUP);
pinMode(BOTON_IZQUIERDA, INPUT_PULLUP);
pinMode(BOTON_BIDIRECCIONAL, INPUT_PULLUP);
}
// Función para apagar todos los LEDs
void apagarTodos() {
for(int i = 0; i < NUM_LEDS; i++) {
digitalWrite(LED_PINS[i], LOW);
}
}
// Secuencia hacia la derecha
void secuenciaDerecha() {
apagarTodos();
for(int i = 0; i < NUM_LEDS; i++) {
digitalWrite(LED_PINS[i], HIGH);
delay(VELOCIDAD);
digitalWrite(LED_PINS[i], LOW);
}
}
// Secuencia hacia la izquierda
void secuenciaIzquierda() {
apagarTodos();
for(int i = NUM_LEDS - 1; i >= 0; i--) {
digitalWrite(LED_PINS[i], HIGH);
delay(VELOCIDAD);
digitalWrite(LED_PINS[i], LOW);
}
}
// Secuencia bidireccional
void secuenciaBidireccional() {
// Derecha a izquierda
for(int i = 0; i < NUM_LEDS; i++) {
digitalWrite(LED_PINS[i], HIGH);
delay(VELOCIDAD);
digitalWrite(LED_PINS[i], LOW);
}
// Izquierda a derecha
for(int i = NUM_LEDS - 1; i >= 0; i--) {
digitalWrite(LED_PINS[i], HIGH);
delay(VELOCIDAD);
digitalWrite(LED_PINS[i], LOW);
}
}
// Función para manejar el rebote de los botones
bool verificarBoton(int pin, int indice) {
bool estadoActual = digitalRead(pin);
if (estadoActual != estadoAnteriorBotones[indice]) {
if ((millis() - ultimoTiempoCambio[indice]) > tiempoRebote) {
ultimoTiempoCambio[indice] = millis();
estadoAnteriorBotones[indice] = estadoActual;
if (estadoActual == LOW) {
return true;
}
}
}
return false;
}
void loop() {
// Verificar botón derecha
if (verificarBoton(BOTON_DERECHA, 0)) {
secuenciaDerecha();
}
// Verificar botón izquierda
if (verificarBoton(BOTON_IZQUIERDA, 1)) {
secuenciaIzquierda();
}
// Verificar botón bidireccional
if (verificarBoton(BOTON_BIDIRECCIONAL, 2)) {
secuenciaBidireccional();
}
}