Mi Arduino

Menu
  • Inicio
  • Categorías
    • Características de los Arduinos
    • General
    • Programación para Arduinos
    • Tutoriales de uso de los Arduinos
  • Legales y Contacto
    • Política de Privacidad y Condiciones de Uso
    • Contacto
    • Política de Cookies
    • Acerca de Nosotros
Home
Tutoriales
Interrupcion Arduino: attachInterrupt, Timer y pines INT
Tutoriales

Interrupcion Arduino: attachInterrupt, Timer y pines INT

Desiree K. Aguero 17 de marzo de 2025

La programación de sistemas embebidos, y particularmente en plataformas como Arduino, a menudo requiere que el microcontrolador responda a eventos externos de manera eficiente y en tiempo real. El flujo de ejecución secuencial que define la programación tradicional puede ser inadecuado cuando se busca una respuesta inmediata a señales provenientes del mundo exterior, como pulsaciones de botones, cambios en sensores o llegadas de datos seriales. Aquí es donde las interrupcion arduino entran en juego. Permiten que el procesador suspenda temporalmente lo que está haciendo y ejecute una función específica (llamada función de servicio de interrupción o ISR, por sus siglas en inglés) cuando se produce un evento particular. Esto abre un abanzo de posibilidades para crear aplicaciones interactivas y sensibles a los eventos, que no serían posibles con la programación secuencial estándar. Imagina poder reaccionar a un botón presionado con una latencia mínima, o sincronizar varios dispositivos Arduino para un proyecto complejo, incluso si uno de ellos se desincroniza temporalmente. Las interrupcion arduino son la clave para lograr estos resultados.

Este artículo explorará en detalle el mundo de las interrupcion arduino, desde los conceptos básicos hasta ejemplos prácticos y consideraciones importantes para un uso correcto y eficiente. Vamos a sumergirnos en cómo funcionan las interrupciones, qué pines se pueden configurar como pines de interrupción, cómo usar la función **attachInterrupt** para vincular interrupciones a funciones, y cómo manejar las interrupciones de manera segura para evitar problemas como la reentrada y la pérdida de datos. También abordaremos temas más avanzados como las interrupcion externa arduino, el uso de arduino timer interrupcion, y consideraciones sobre la optimización de tus códigos para evitar cuellos de botella y garantizar un comportamiento predecible. Prepárate para llevar tus proyectos Arduino al siguiente nivel con el poder de las interrupciones.

índice de Contenidos

Toggle
  • ¿Qué son las Interrupciones y por Qué las Necesitamos?
  • Tipos de Interrupciones en Arduino
  • Configurando Pines de Interrupción con attachInterrupt
  • Consideraciones Importantes sobre las Interrupciones

¿Qué son las Interrupciones y por Qué las Necesitamos?

En esencia, una interruption arduino es una señal que le indica al microcontrolador que detenga lo que está haciendo y ejecute una sección específica de código. Considera el programa principal como una conversación fluida. En un momento dado, el microcontrolador está ejecutando una tarea, como leer un sensor o controlar un LED. De repente, llega un evento externo: se pulsa un botón. En lugar de ignorar este evento y seguir adelante con la «conversación», el microcontrolador debe detenerse inmediatamente y atender al nuevo evento, es decir, procesar la pulsación del botón. Esto es precisamente lo que hace una interrupción.

Las interrupciones son vitales porque permiten una respuesta en tiempo real. Si el microcontrolador tuviera que esperar a que el programa principal llegara a un punto de comprobación para ver si se presionó el botón, habría un retraso considerable. Este retraso podría ser suficiente para que el usuario percibiera una falta de capacidad de respuesta o incluso perder datos importantes. Por ejemplo, si estás leyendo datos de un sensor analógico, y un evento externo ocurre mientras estás en la lectura, si no usas una interrupcion externa arduino, podrías perder la información que necesitas.

Las interrupciones no solo mejoran la capacidad de respuesta, sino que también liberan el procesador para que realice otras tareas mientras espera eventos externos. En lugar de estar constantemente verificando si algo ha cambiado, el procesador puede realizar otras tareas y «dormir» hasta que se produzca una interrupción. Esto es especialmente útil en aplicaciones con recursos limitados, donde cada ciclo de reloj es valioso. En un sistema donde la eficiencia energética es crítica, usar interrupciones permite reducir el consumo de energía al no tener que mantener el procesador constantemente activo buscando eventos.

La implementación de las interrupcion arduino es una parte integral de la programación embebida y permite la creación de sistemas más reactivos y eficientes. A medida que profundicemos

En esencia, una interruption arduino es una señal que le indica al microcontrolador que detenga lo que está haciendo y ejecute una sección específica de código. Considera el programa principal como una conversación fluida. En un momento dado, el microcontrolador está ejecutando una tarea, como leer un sensor o controlar un LED. De repente, llega un evento externo: se pulsa un botón. En lugar de ignorar este evento y seguir adelante con la «conversación», el microcontrolador debe detenerse inmediatamente y atender al nuevo evento, es decir, procesar la pulsación del botón. Esto es precisamente lo que hace una interrupción.

Las interrupciones son vitales porque permiten una respuesta en tiempo real. Si el microcontrolador tuviera que esperar a que el programa principal llegara a un punto de comprobación para ver si se presionó el botón, habría un retraso considerable. Este retraso podría ser suficiente para que el usuario percibiera una falta de capacidad de respuesta o incluso perder datos importantes. Por ejemplo, si estás leyendo datos de un sensor analógico, y un evento externo ocurre mientras estás en la lectura, si no usas una interrupcion externa arduino, podrías perder la información que necesitas.

Te recomendamos también Arduino desde cero con Arduino IDE manual: MultitareasArduino desde cero con Arduino IDE manual: Multitareas

Las interrupciones no solo mejoran la capacidad de respuesta, sino que también liberan el procesador para que realice otras tareas mientras espera eventos externos. En lugar de estar constantemente verificando si algo ha cambiado, el procesador puede realizar otras tareas y «dormir» hasta que se produzca una interrupción. Esto es especialmente útil en aplicaciones con recursos limitados, donde cada ciclo de reloj es valioso. En un sistema donde la eficiencia energética es crítica, usar interrupciones permite reducir el consumo de energía al no tener que mantener el procesador constantemente activo buscando eventos.

La implementación de las interrupcion arduino es una parte integral de la programación embebida y permite la creación de sistemas más reactivos y eficientes. A medida que profundicemos en este artículo, comprenderás por qué son una herramienta tan poderosa en el arsenal de un programador Arduino.

Tipos de Interrupciones en Arduino

Existen diferentes tipos de interrupcion arduino, cada uno adaptado a diferentes necesidades. Los principales son:

  • Interrupciones de Pines: Son las más comunes y se basan en los cambios de estado de los pines digitales. Un cambio de nivel lógico (de bajo a alto o de alto a bajo) en un pin configurado como pin de interrupción genera la interrupción. Estas son ideales para botones, interruptores y sensores con salidas digitales. El uso de la función **attachInterrupt** es fundamental para este tipo de interrupciones.

  • Interrupciones Timer/Counter: Estas interrupciones se generan por los temporizadores internos del microcontrolador. Se pueden programar para generar una interrupción a intervalos regulares, lo que es útil para tareas como crear temporizadores precisos, actualizar datos en pantallas o generar señales PWM. El uso de las arduino timer interrupcion es más complejo y requiere una comprensión más profunda del funcionamiento interno del microcontrolador.

  • Interrupciones Seriales: Estas interrupciones se generan cuando se reciben datos a través del puerto serial. Son útiles para recibir datos de otros dispositivos, como un ordenador o un módem.

  • Interrupciones PWM: Aunque menos comunes, ciertas señales PWM pueden ser configuradas para generar interrupciones. Esto puede ser útil para aplicaciones que requieren un control muy preciso de la señal PWM o para monitorear su comportamiento.

Interrupciones de Pines vs. Temporizadores:

Te recomendamos también Arduino desde cero con Arduino IDE manual: MultitareasArduino desde cero con Arduino IDE manual: Multitareas
Te recomendamos también Advanced Arduino: Reprogramando el Bootloader de UNOAdvanced Arduino: Reprogramando el Bootloader de UNO

La elección entre una interrupcion externa arduino basada en pines y una arduino timer interrupcion depende del uso que se le quiera dar. Las interrupciones de pines son más fáciles de configurar y usar para eventos discretos como pulsaciones de botones. Son ideales cuando se necesita una respuesta rápida a un cambio de estado en un pin. Las interrupciones temporizadas, por otro lado, son más adecuadas para tareas que requieren una precisión temporal, como generar señales periódicas o crear temporizadores de alta resolución. La complejidad en la configuración de las interrupciones temporizadas proviene de la necesidad de entender a fondo los registros de configuración de los temporizadores.

Configurando Pines de Interrupción con attachInterrupt

La función **attachInterrupt** es la herramienta clave para configurar pines de interrupción en Arduino. Su sintaxis es la siguiente:

attachInterrupt(pin, function, mode)

Donde:

  • pin: El número del pin digital que se configurará como pin de interrupción. Debes asegurarte de que el pin sea compatible con la interrupción, ya que no todos los pines son aptos. Consulta las especificaciones del microcontrolador utilizado por tu placa Arduino para obtener una lista de los pines de interrupción válidos. El uso incorrecto de un digital pin to interrupt puede llevar a un comportamiento inesperado o incluso a la imposibilidad de usar ese pin para otras funciones.

  • function: La función que se ejecutará cuando se active la interrupción. Esta función debe tener un tipo de retorno void y no debe tomar ningún argumento. Es importante que esta función sea lo más rápida y eficiente posible, ya que se ejecutará cada vez que se active la interrupción.

  • mode: Indica cómo se detectarán los cambios de estado que generarán la interrupción. Puede tener dos valores:

    • RISING: La interrupción se activará cuando el pin pase de bajo a alto.
    • FALLING: La interrupción se activeará cuando el pin pase de alto a bajo.

Ejemplo:

Te recomendamos también Arduino desde cero con Arduino IDE manual: MultitareasArduino desde cero con Arduino IDE manual: Multitareas
Te recomendamos también Advanced Arduino: Reprogramando el Bootloader de UNOAdvanced Arduino: Reprogramando el Bootloader de UNO
Te recomendamos también Control Arduino: Sistema Temperatura para ArduinoControl Arduino: Sistema Temperatura para Arduino

«`arduino
void interruptorPresionado() {
// Código a ejecutar cuando el pin 2 pasa de bajo a alto
Serial.Println(«Interruptor presionado!»);
}

void setup() {
pinMode(2, INPUTEXTERNO); // O INPUTPULLUP si se usa una resistencia de pull-up interna
attachInterrupt(digitalPinToPin(2), interruptorPresionado, RISING);
}

void loop() {
// Código principal del programa
}
«`

En este ejemplo, la función interruptorPresionado se ejecutará cada vez que el pin 2 pase de bajo a alto. La función digitalPinToPin se usa para convertir el número del pin digital a un número de pin específico del microcontrolador.

Consideraciones Importantes sobre las Interrupciones

Aunque las interrupciones son una herramienta poderosa, es importante utilizarlas con cuidado. Aquí hay algunas consideraciones importantes:

  • Tiempo de Ejecución: La función de interrupción debe ser tan rápida como sea posible. Cuanto más tiempo tarde en ejecutarse, más tiempo el microcontrolador estará «desconectado» de otras tareas. Evita llamadas a Serial.print dentro de la rutina de interrupción, ya que esto puede ralentizar significativamente su ejecución.

  • Prioridad: No se puede controlar la prioridad de las interrupciones en Arduino. Esto significa que si tienes múltiples interrupciones activas, es posible que una interrupción interrumpa a otra.

  • Reentrancia: Las interrupciones son reentrantes, lo que significa que una interrupción puede ser interrumpida por otra interrupción. Esto puede provocar resultados inesperados si no se maneja correctamente. En general, evita el uso de variables globales dentro de las rutinas de interrupción para evitar condiciones de carrera.

  • Desactivación: En algunas situaciones, puede ser necesario desactivar las interruciones temporalmente. Esto se puede hacer utilizando la función disableInterrupts() y enableInterrupts(). Sin embargo, ten cuidado al desactivar las interrupciones, ya que esto puede provocar la pérdida de datos si una interrupción se produce mientras las interrupciones están desactivadas.

  • Pines Compatibles: No todos los pines pueden usarse como pines de interrupción. Consulta la documentación de tu placa Arduino para ver la lista de pines compatibles. Usar un pin incompatible puede llevar a un comportamiento inesperado.

Al comprender estas consideraciones y utilizarlas correctamente, puedes aprovechar al máximo las interrupciones en tus proyectos Arduino.

Share
Tweet
Email
Next Article

Related Articles

Arduino desde cero con Arduino IDE manual: Multitareas
El mundo de la informática ha experimentado una profunda evolución …

Arduino desde cero con Arduino IDE manual: Multitareas

Control Arduino: Sistema Temperatura para Arduino
El mundo de la automatización y el control está a …

Control Arduino: Sistema Temperatura para Arduino

About The Author

Desiree K. Aguero

¡Hola! Soy Desiree Aguero, estudiante de Ingeniería y apasionada del mundo de la tecnología. En este blog, comparto mi amor por Arduino y la electrónica, explorando proyectos innovadores y soluciones creativas. Mi objetivo es hacer que la tecnología sea accesible para todos, proporcionando tutoriales detallados y recursos útiles. Únete a mí en este emocionante viaje de aprendizaje y descubrimiento. ¡Juntos, haremos grandes cosas con Arduino!

Leave a Reply

Lo siento, debes estar conectado para publicar un comentario.

Mi Arduino

Todo Referente a los Arduinos
Copyright © 2026 Mi Arduino
Todos Los Derechos Reservados
Gestionar consentimiento
Para ofrecer las mejores experiencias, utilizamos tecnologías como las cookies para almacenar y/o acceder a la información del dispositivo. El consentimiento de estas tecnologías nos permitirá procesar datos como el comportamiento de navegación o las identificaciones únicas en este sitio. No consentir o retirar el consentimiento, puede afectar negativamente a ciertas características y funciones.
Funcional Siempre activo
El almacenamiento o acceso técnico es estrictamente necesario para el propósito legítimo de permitir el uso de un servicio específico explícitamente solicitado por el abonado o usuario, o con el único propósito de llevar a cabo la transmisión de una comunicación a través de una red de comunicaciones electrónicas.
Preferencias
El almacenamiento o acceso técnico es necesario para la finalidad legítima de almacenar preferencias no solicitadas por el abonado o usuario.
Estadísticas
El almacenamiento o acceso técnico que es utilizado exclusivamente con fines estadísticos. El almacenamiento o acceso técnico que se utiliza exclusivamente con fines estadísticos anónimos. Sin un requerimiento, el cumplimiento voluntario por parte de tu proveedor de servicios de Internet, o los registros adicionales de un tercero, la información almacenada o recuperada sólo para este propósito no se puede utilizar para identificarte.
Marketing
El almacenamiento o acceso técnico es necesario para crear perfiles de usuario para enviar publicidad, o para rastrear al usuario en una web o en varias web con fines de marketing similares.
  • Administrar opciones
  • Gestionar los servicios
  • Gestionar {vendor_count} proveedores
  • Leer más sobre estos propósitos
Ver preferencias
  • {title}
  • {title}
  • {title}