🚚 Envío GRATIS en compras sobre $30.000 | Retiro en Curauma, Valparaíso | 📞 +56 9 65214463
Arduino 01 de December de 2025 · 2 min de lectura

Interrupciones en Arduino: Reacciona en Microsegundos

Las interrupciones permiten que Arduino reaccione instantáneamente a eventos externos sin estar revisando constantemente un pin. Aprende attachInterrupt() y sus casos de uso.

¿Por qué necesitas interrupciones?

El bucle loop() de Arduino se ejecuta secuencialmente. Si usas delay() o tienes código lento, puedes perder eventos rápidos. Un encoder rotatorio que gira a alta velocidad puede generar pulsos cada 100 µs. Con polling normal (verificando el pin en cada ciclo del loop) los perderías. Con una interrupción, el Arduino pausa inmediatamente lo que está haciendo y ejecuta tu función de respuesta en microsegundos.

Sintaxis de attachInterrupt()

  • attachInterrupt(digitalPinToInterrupt(pin), función, modo)
  • pin: En Arduino Uno solo los pines 2 y 3 soportan interrupciones externas
  • función: ISR (Interrupt Service Routine), sin parámetros ni return
  • modo: RISING, FALLING, CHANGE o LOW
  • En ESP32 TODOS los pines GPIO soportan interrupciones

Ejemplo: contador de pulsos con encoder

Un encoder rotatorio genera pulsos al girar. En la ISR, simplemente incrementas o decrementas un contador de tipo volatile int. La palabra clave volatile le indica al compilador que esta variable puede cambiar en cualquier momento (por la interrupción) y que no debe optimizarla en caché. En el loop() lees el valor del contador para mostrar posición o velocidad.

Reglas de oro para ISRs

Las ISRs deben ser LO MÁS CORTAS POSIBLE: solo actualiza variables, no hagas cálculos pesados ni uses delay(). Serial.print() dentro de una ISR puede causar bloqueos. Las variables compartidas entre ISR y loop() deben declararse volatile. En ESP32, agrega el atributo IRAM_ATTR a la ISR para que corra desde la RAM y sea más rápida.

Compartir: WhatsApp
Escríbenos por WhatsApp