Las interrupciones externas con Arduino nos permite suspender o interrumpir en forma temporal la ejecuci贸n de un proceso de Arduino y as铆 ejecutar una subrutina y posteriormente reanudar la tarea desde que se ejecuto la interrupci贸n.
Estas interrupciones externas o de hardware son muy 煤tiles cuando deseamos implementar alguna sub rutina para modificar de forma parcial alguna variable de manera externa.
Generalmente al hacer proyectos con Arduino realizando una secuencia de instrucciones que van realiz谩ndose una tarea tras otra en una l铆nea de tiempo, pero cuando necesitamos recoger una se帽al en cualquier momento en la l铆nea de tiempo de nuestro programa no podemos realizarlo porque estamos sujetos al tiempo del delay() que le demos, es ahi donde entra las interrupciones externas para solucionar esto.
Al iniciar en la programaci贸n de Arduino nuestros primeros proyectos son relativamente sencillos como el t铆pico encendido de una serie de led de forma secuencial con un tiempo predefinido, pero si quisi茅ramos aumentar o disminuir la velocidad de encendido en cualquier momento no podr铆amos realizarlo.
Para solucionar estos inconvenientes Arduino usa interrupciones, aumentando la velocidad con un boton y con otra disminuimos la velocidad en cualquier instante, de esta manera podemos ya a empezar a realizar proyectos mas avanzados.
驴C贸mo trabajar con interrupciones con Arduino?
La respuesta es otra vez muy sencilla, ya que Arduino tiene funciones preparadas para trabajar con interrupciones externas, al igual que las placas de desarrollo de Arduino, estas entradas no son las mismas en todas las placas de Arduino.

Funci贸n attachInterrupt(interrupci贸n, ISR, mode)
Tiene tres paramentos, el primer par谩metro es el n煤mero de interrupci贸n que deseamos usar.
Este par谩metro debe ser del tipo entero y colocar el n煤mero de interrupci贸n a usar por ejemplo la placa de Arduino UNO solo posee dos pines habilitados para trabajar con interrupciones el pin 2 y 3, pero no podemos colocar directamente el n煤mero de pin habilitado para trabajar con interrupciones en la funci贸n attachInterrupt(),
los n煤meros de interrupciones habilitados son 0 y 1 donde el pin 2 representar铆a a la interrupci贸n 0 y el pin 3 a la interrupci贸n 1.
Esto para muchos es confuso si bien se puede trabajar directamente de esta manera, la documentaci贸n de Arduino nos sugiere trabajar con la funci贸n digitalPinToInterrupt([pin de la
interrupci贸n]),
es decir que podemos colocar directamente el n煤mero de pin y no as铆 el n煤mero de la interrupci贸n, esto seria:attachInterrupt(digitalPinToInterrupt(pin), ISR, mode).
El segundo par谩metro es un ISR (Interrupt Service Routine – Rutina de servicio de interrupci贸n) que no es m谩s que una funci贸n con algunas restricciones como por ejemplo que no tiene ning煤n par谩metro y adem谩s no debe devolver nada y debe ser lo m谩s corto posible para que su tiempo de ejecuci贸n sea lo m谩s veloz posible, en caso de usar varios ISR se ejecutara secuencial mente.
El tercer par谩metro es el modo de cuando se debe activar nuestra interrupci贸n y funcionar nuestra rutina de servicio de interrupci贸n (ISR), Arduino nos provee cuatro constantes v谩lidas para trabajar y son: LOW, CHANGE, RISING, FALLING, en el caso de las placas de Arduino Due, Zero y MKR1000 nos ofrece una constante extra que es el HIGH.
Constantes de las interrupciones con Arduino
LOW.- Utilizado cunado necesitamos activar nuestra interrupci贸n mientras el pin habilitado este en bajo.
HIGH.- Similar al anterior pero es habilitada cuando e ste siempre nuestro pin de interrupci贸n en alto.
CHANGE.- Muy 煤til cuando requerimos detectar alg煤n cambio en el pin que estemos utilizando.
RISING.- Este modo nos permite detectar el cambio del valor de nuestro pin de bajo a alto y activar de esta manera nuestra interrupci贸n.
FALLING.- Este modo es muy similar al anterior con la diferencia que se activa cuando cambia el valor del pin de alto a bajo.
Variable global volatile utilizada para trabajar con interrupciones
Las variables globales son generalmente utilizadas en cualquier lugar de nuestro programa, pero al tratar de interrupciones, Arduino nos sugiere declararlo con la palabra reservada volatile porque al pasar datos desde el ISR al nuestro c贸digo principal debemos asegurarnos que estas variables se actualicen de forma correcta cada vez que se lo necesite.