#define LED 22 // Pin donde está conectado el LED
#define PULSADOR 35 // Pin donde está conectado el pulsador
#define tiempo_high 500 // Tiempo encendido del parpadeo en milisegundos
#define tiempo_low 200 // Tiempo apagado del parpadeo en milisegundos
unsigned long tiempoAnterior = 0; // Para controlar los tiempos no bloqueantes
bool estadoLED = LOW; // Estado actual del LED (encendido o apagado)
bool estadoPulsador;
bool estadoAnteriorPulsador = HIGH; // Estado inicial del pulsador
bool isBlinking = true; // Estado del LED (parpadeando o apagado)
unsigned long intervalo = tiempo_high; // Controla el tiempo actual (HIGH o LOW)
// Configuración inicial
void setup() {
pinMode(LED, OUTPUT);
pinMode(PULSADOR, INPUT_PULLUP); // Configuramos el pulsador con resistencia pull-up
Serial.begin(9600); // Iniciar la comunicación serie a 9600 bps
// Estado inicial, el LED está parpadeando
Serial.println("PARPADEANDO");
}
// Bucle principal
void loop() {
// Leer el estado actual del pulsador
estadoPulsador = digitalRead(PULSADOR);
// Detectar cambios en el estado del pulsador
if (estadoPulsador == LOW && estadoAnteriorPulsador == HIGH) { // Si el pulsador se presiona
isBlinking = !isBlinking; // Alternar entre parpadeo y apagado
if (isBlinking) {
Serial.println("PARPADEANDO");
tiempoAnterior = millis(); // Reiniciar el tiempo para el parpadeo
} else {
Serial.println("APAGADO");
digitalWrite(LED, LOW); // Apagar el LED inmediatamente
}
}
estadoAnteriorPulsador = estadoPulsador; // Actualizar el estado anterior
// Si el LED está en modo parpadeo, manejamos el parpadeo no bloqueante
if (isBlinking) {
unsigned long tiempoActual = millis();
// Verificar si ha pasado el tiempo para cambiar el estado del LED
if (tiempoActual - tiempoAnterior >= intervalo) {
tiempoAnterior = tiempoActual; // Actualizar el tiempo para la próxima vez
// Alternar el estado del LED
if (estadoLED == LOW) {
estadoLED = HIGH;
intervalo = tiempo_high; // Establecer el intervalo de encendido
} else {
estadoLED = LOW;
intervalo = tiempo_low; // Establecer el intervalo de apagado
}
// Cambiar el estado del LED físicamente
digitalWrite(LED, estadoLED);
}
}
}