#include <Adafruit_NeoPixel.h>
// Definición de pines para cada camino y botón
#define CAMINO_1_PIN 34
#define CAMINO_2_PIN 32 // Este pin no se usará para encender LEDs
#define CAMINO_3_PIN 35
#define CAMINO_4_PIN 33 // Este pin no se usará para encender LEDs
#define BUTTON_PIN 15
// Cantidad de LEDs por tira
#define NUM_LEDS 11
// Inicialización de las tiras de LEDs
Adafruit_NeoPixel camino1 = Adafruit_NeoPixel(NUM_LEDS, CAMINO_1_PIN, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel camino3 = Adafruit_NeoPixel(NUM_LEDS, CAMINO_3_PIN, NEO_GRB + NEO_KHZ800);
bool hasRun = false; // Variable para saber si la secuencia ya se ejecutó
// Prototipos de las funciones
void encenderProgresivo(Adafruit_NeoPixel& tira, bool izquierdaADerecha);
void apagarTiras(Adafruit_NeoPixel& tira);
//luz RGB como señalizacion de funcionamiento
int rojo_1=16;
int verde_1=4;
int rojo_2=0;
int verde_2=2;
void setup() {
// Configuración de pines
pinMode(BUTTON_PIN, INPUT);
//pines de led RGB
pinMode(rojo_1,OUTPUT);
pinMode(verde_1,OUTPUT);
pinMode(rojo_2,OUTPUT);
pinMode(verde_2,OUTPUT);
// Inicializar cada tira
camino1.begin();
camino3.begin();
// Mostrar (iniciar) los LEDs apagados
camino1.show();
camino3.show();
}
void loop() {
int buttonState = digitalRead(BUTTON_PIN); // Leer estado del botón
if (buttonState == HIGH && !hasRun) {
// PRIMERA FASE: Encender Camino 1 (principal) de izquierda a derecha
analogWrite(verde_1,255);
encenderProgresivo(camino1, true); // LEDs verdes de izquierda a derecha
delay(500); // Mantener encendidos 5 segundos
apagarTiras(camino1); // Apagar camino 1
analogWrite(verde_1,0);
analogWrite(rojo_1,0);
analogWrite(rojo_2,0);
analogWrite(verde_2,255);
// SEGUNDA FASE: Encender Camino 3 (protección) de derecha a izquierda
encenderProgresivo(camino3, false); // LEDs verdes de derecha a izquierda
delay(500); // Mantener encendidos 5 segundos
apagarTiras(camino3); // Apagar camino 3
analogWrite(verde_2,0);
hasRun = true; // Marcar que la secuencia ya corrió
}
// Si se suelta el botón, resetear la secuencia
if (buttonState == LOW) {
hasRun = false; // Permitir que la secuencia se ejecute de nuevo
}
}
// Función para encender los LEDs de forma progresiva
void encenderProgresivo(Adafruit_NeoPixel& tira, bool izquierdaADerecha) {
if (izquierdaADerecha) {
for (int i = 0; i < NUM_LEDS; i++) {
tira.setPixelColor(i, tira.Color(0, 255, 0)); // Verde
tira.show();
delay(500); // Esperar 500ms entre cada LED
}
} else {
for (int i = NUM_LEDS - 1; i >= 0; i--) {
tira.setPixelColor(i, tira.Color(0, 255, 0)); // Verde
tira.show();
delay(500); // Esperar 500ms entre cada LED
}
}
}
// Función para apagar la tira
void apagarTiras(Adafruit_NeoPixel& tira) {
for (int i = 0; i < NUM_LEDS; i++) {
tira.setPixelColor(i, 0, 0, 0); // Apagar cada LED
}
tira.show();
}