Arduino, Interrupções externas

O Arduino Uno possui 2 (0 zero pino 2, e 1 um pino 3) interrupções externas, que podem ser usadas para diversos fins, mais afinal oque é? para que serve?. Imagine a seguinte situação: Seu programa precisa monitorar um sinal de entrada,  e esse sinal é de vital importância no processo ao ponto de acontecer algum erro grave se ele não for atualizado na hora que o evento ocorre, é ai que a interrupção entra em ação, todo o programa entra em estado de espera ate a função chamada pela interrupção termine. 

Existem varias forma de se chamar uma interrupção porém vou mostra a recomendada. 
Exemplo:  attachInterrupt(digitalPinToInterrupt(pino), função a ser executada, modo).
attachInterrupt() é a função que chama a interrupção.
digitalPinToInterruptio() é a função que recebe no nome do pino como parâmetro e retorna a interrupção do pino indicado.
E por final o modo de interrupção usado, os modos são (LOW = nível logico 0 ou 0V, HIGH = nível logico alto ou 5V, RISING = transição de subida, FALLING = transição de descida).

 

 #define pinOut 13
#define pinInt 2

 volatile int estado = LOW;

 void setup() {
 pinMode(pinOut, OUTPUT);
pinMode(pinInt, INPUT_PULLUP);

 attachInterrupt(digitalPinToInterrupt(pinOut), executar, CHANGE);
}

executar() {
estado = ! estado;
}

Circuito