#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 500 // Tiempo apagado del parpadeo en milisegundos
unsigned long tic, tac;
bool estadoPulsador;
bool estadoAnterior = HIGH; // Estado inicial del pulsador
bool isBlinking = true; // Estado del LED (parpadeando o apagado)
bool iluminado = false; // Estado del LED (iluminado indefinidamente)
void setup() {
pinMode(LED, OUTPUT); // Configurar LED como salida
pinMode(PULSADOR, INPUT_PULLUP); // Configurar pulsador como entrada con resistencia pull-up
Serial.begin(9600); // Iniciar comunicación serie
Serial.println("PARPADEANDO"); // Estado inicial
}
void loop() {
// Leer el estado actual del pulsador
estadoPulsador = digitalRead(PULSADOR);
// Detectar cambios en el estado del pulsador
if (estadoPulsador != estadoAnterior) {
estadoAnterior = estadoPulsador; // Actualizar el estado anterior
if (estadoPulsador == LOW) { // Si el pulsador se presiona
isBlinking = !isBlinking; // Alternar entre parpadeo y apagado
if (isBlinking) {
Serial.println("PARPADEANDO");
} else {
Serial.println("APAGADO");
digitalWrite(LED, LOW); // Apagar LED si no está parpadeando
}
}
}
// Leer los datos del monitor serie
if (Serial.available()) {
char incomingChar = Serial.read(); // Leer el carácter enviado por el teclado
if (incomingChar == 'F' || incomingChar == 'f') { // Si se recibe la tecla "F"
iluminado = true; // Cambiar el estado a iluminado
isBlinking = false; // Detener el parpadeo
digitalWrite(LED, HIGH); // Encender el LED
Serial.println("ILUMINADO, pulse reset para volver a empezar");
}
}
// Si el LED está en modo parpadeo, hacemos que parpadee
if (isBlinking) {
parpadeaLED(LED);
}
}
// Función para manejar el parpadeo del LED
void parpadeaLED(int led) {
digitalWrite(led, HIGH); // Encender el LED
espera_millis(1, tiempo_high); // Esperar el tiempo encendido
digitalWrite(led, LOW); // Apagar el LED
espera_millis(0, tiempo_low); // Esperar el tiempo apagado
}
// Función para manejar retardos con `millis()`
void espera_millis(int valor, unsigned long tiempo_espera) {
tic = millis();
do {
tac = millis();
} while (tac - tic < tiempo_espera);
}