// Secuencia: Derecha → Izquierda → Desde el centro hacia afuera
const int ledPins[] = {2, 3, 4, 5, 6, 7};
const int NUM_LEDS = sizeof(ledPins) / sizeof(ledPins[0]);
unsigned long lastMillis = 0;
const unsigned long interval = 150;
// Estados de la máquina
enum Estado { DERECHA, IZQUIERDA, CENTRO };
Estado estado = DERECHA;
int indexLed = 0;
int centroPaso = 0;
void setup() {
for (int i = 0; i < NUM_LEDS; i++) {
pinMode(ledPins[i], OUTPUT);
}
}
void allOff() {
for (int i = 0; i < NUM_LEDS; i++) {
digitalWrite(ledPins[i], LOW);
}
}
void loop() {
unsigned long now = millis();
if (now - lastMillis < interval) return;
lastMillis = now;
allOff();
// ----------- 1) RECORRER A LA DERECHA -----------
if (estado == DERECHA) {
digitalWrite(ledPins[indexLed], HIGH);
indexLed++;
if (indexLed >= NUM_LEDS) {
indexLed = NUM_LEDS - 1;
estado = IZQUIERDA; // pasa a la siguiente fase
}
}
// ----------- 2) RECORRER A LA IZQUIERDA -----------
else if (estado == IZQUIERDA) {
digitalWrite(ledPins[indexLed], HIGH);
indexLed--;
if (indexLed < 0) {
estado = CENTRO;
centroPaso = 0;
}
}
// ----------- 3) DEL CENTRO HACIA AFUERA -----------
else if (estado == CENTRO) {
// LEDs: 0 1 2 3 4 5
// Centro son: 2 y 3
int c1 = 2 - centroPaso;
int c2 = 3 + centroPaso;
if (c1 >= 0) digitalWrite(ledPins[c1], HIGH);
if (c2 < NUM_LEDS) digitalWrite(ledPins[c2], HIGH);
centroPaso++;
// Si ya encendió todo → reinicia al inicio
if (c1 <= 0 && c2 >= NUM_LEDS - 1) {
estado = DERECHA;
indexLed = 0;
}
}
}