loop
, tenemos que declararla como volatile int variable
para que se sitúe en la RAM.
El funcionamiento es semejante, como puede verse, a cuando llamamos a una subrutina desde una línea del programa. Solo que en este caso no existe tal linea sino que la subrutina de interrupción se ejecutará en cualquier instante del programa, cuando se cumplan unas condiciones muy precisas.
Repasar en Arduino la instrucción
attachInterrupt ( digitalPinToInterrupt ( P ), Funcion, RISING );
Esa instrucción se pone en void setup(){}
para habilitar y definir la interrupción.
Veamos los parámetros a continuación:
digitalPinToInterrupt
→ Si damos el pin, el programa se encarga de buscar la interrupción.P
→ Es el pin que detecta la interrupción. En el Arduino Nano es el 2
.Funcion
→ Función asociada a la interrupción. Se ejecuta al producirse la interrupción. En otro lugar del programa deberemos declararla void Funcion(){}
.flanco de activación
RISING
→ Detecta el flanco de subida en el pin P
, llamando a la interrupción.FALLING
→ Si se pone en lugar de RISING
, llama a la interrupción en el flanco de bajada de la señal de entrada al pin P
.Las interrupciones tienen efectos en la medición del tiempo de Arduino, tanto fuera como dentro de la ISR, porque Arduino emplea interrupciones de tipo Timer para actualizar la medición del tiempo.
Efectos fuera de la ISR
Efectos dentro de la ISR. Dentro de la ISR el resto de interrupciones están desactivadas. Esto supone: