#define LED1 23 // LED que parpadea constantemente
#define LED2 22 // LED que parpadea en la interrupción
#define INTERRUPT_PIN 21 // Pin para la interrupción externa
volatile bool inter = false;
unsigned long guar = 0; // Guarda la última vez que el LED1 cambió de estado
const long intervalLED1 = 500; // Intervalo en milisegundos para el parpadeo del LED1
void IRAM_ATTR handleInterrupt() {
inter = true;
}
void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(INTERRUPT_PIN, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN), handleInterrupt, FALLING);
}
void loop() {
// Maneja el parpadeo de LED1
unsigned long currentTime = millis();
if (currentTime - guar >= intervalLED1) {
guar = currentTime; // Actualiza el último momento en que el LED1 cambió
digitalWrite(LED1, !digitalRead(LED1)); // Cambia el estado del LED1
}
// Verifica si ocurrió una interrupción y maneja el parpadeo de LED2
if (inter) {
// Asegura que LED1 siga parpadeando incluso durante el manejo de la interrupción
for (int i = 0; i < 10; i++) {
digitalWrite(LED2, HIGH);
delay(100); // Estos delays pueden afectar el ritmo de parpadeo de LED1, pero será mínimo
digitalWrite(LED2, LOW);
delay(250);
// Durante el manejo de la interrupción, también actualizamos LED1 basado en el tiempo para mantener su parpadeo
currentTime = millis();
if (currentTime - guar >= intervalLED1) {
guar = currentTime;
digitalWrite(LED1, !digitalRead(LED1));
}
}
inter = false;
}
}