#include <Adafruit_NeoPixel.h>
#define PIN D5 // Pin de salida para NeoPixel
#define NUMPIXELS 8 // Número de NeoPixels
#define BUTTON_PIN D7 // Pin del botón
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
#define GREEN_DURATION 3000 // Duración en milisegundos para el verde
#define YELLOW_DURATION 3000 // Duración en milisegundos para el amarillo
#define RED_DURATION 3000 // Duración en milisegundos para el rojo
bool startSequence = false; // Variable para almacenar si se debe iniciar la secuencia
bool lastButtonState = HIGH; // Estado anterior del botón
void setup() {
Serial.begin(9600); // Inicializa la comunicación serial
pinMode(BUTTON_PIN, INPUT_PULLUP); // Configura el pin del botón como entrada con pull-up
pixels.begin(); // Inicializa el objeto de la tira de NeoPixel
pixels.show(); // Inicializa todos los píxeles a apagado
}
void loop() {
int buttonState = digitalRead(BUTTON_PIN); // Lee el estado del botón
// Detecta cambios en el estado del botón
if (buttonState == LOW && lastButtonState == HIGH) {
startSequence = true; // Inicia la secuencia
Serial.println("Botón presionado - Iniciando secuencia de semáforo");
delay(500); // Pequeña pausa para evitar múltiples detecciones rápidas
}
lastButtonState = buttonState; // Actualiza el estado anterior del botón
// Si se ha iniciado la secuencia, ejecutar la secuencia del semáforo
if (startSequence) {
// Encender verde
setColor(0, 255, 0); // Verde
delay(GREEN_DURATION);
// Encender amarillo
setColor(255, 255, 0); // Amarillo
delay(YELLOW_DURATION);
// Encender rojo
setColor(255, 0, 0); // Rojo
delay(RED_DURATION);
// Reinicia la secuencia
startSequence = false;
}
}
void setColor(int red, int green, int blue) {
for (int i = 0; i < NUMPIXELS; i++) {
pixels.setPixelColor(i, pixels.Color(red, green, blue));
}
pixels.show();
}