// Definición de pines
const int LED_ROJO = 4;
const int LED_MORADO = 15;
const int LED_AMARILLO = 5;
const int LED_VERDE = 18;
const int BOTON = 13;
// Variables de control
bool botonPresionado = false;
unsigned long tiempoInicio = 0;
unsigned long intervalo = 0;
void setup() {
// Configurar los pines como salida
pinMode(LED_ROJO, OUTPUT);
pinMode(LED_MORADO, OUTPUT);
pinMode(LED_AMARILLO, OUTPUT);
pinMode(LED_VERDE, OUTPUT);
// Configurar el pin del botón como entrada
pinMode(BOTON, INPUT_PULLUP);
}
void loop() {
unsigned long tiempoActual = millis();
// Comprobar si el botón ha sido presionado
if (digitalRead(BOTON) == LOW) {
if (!botonPresionado) {
// Botón presionado por primera vez
tiempoInicio = tiempoActual;
botonPresionado = true;
// Apagar todos los LEDs y encender el LED morado
digitalWrite(LED_ROJO, LOW);
digitalWrite(LED_AMARILLO, LOW);
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_MORADO, HIGH);
} else {
// Botón ya estaba presionado, comprobar si han pasado 10 segundos
if (tiempoActual - tiempoInicio >= 10000) {
botonPresionado = false;
}
}
} else {
botonPresionado = false;
}
// Realizar el ciclo de encendido y apagado de los LEDs
if (!botonPresionado) {
// Encender el LED rojo por 2 segundos
intervalo = tiempoActual - tiempoInicio;
if (intervalo >= 0 && intervalo < 2000) {
digitalWrite(LED_ROJO, HIGH);
digitalWrite(LED_AMARILLO, LOW);
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_MORADO, LOW);
}
// Apagar el LED rojo y encender el LED amarillo por 1 segundo
else if (intervalo >= 2000 && intervalo < 3000) {
digitalWrite(LED_ROJO, LOW);
digitalWrite(LED_AMARILLO, HIGH);
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_MORADO, LOW);
}
// Apagar el LED amarillo y encender el LED verde por 4 segundos
else if (intervalo >= 3000 && intervalo < 7000) {
digitalWrite(LED_ROJO, LOW);
digitalWrite(LED_AMARILLO, LOW);
digitalWrite(LED_VERDE, HIGH);
digitalWrite(LED_MORADO, LOW);
}
// Volver al inicio
else if (intervalo >= 7000) {
tiempoInicio = tiempoActual;
}
}
}