Interrupciones externas con Arduino creatividad codificada

Interrupciones externas con Arduino

Arduino

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.

Interrupciones externas

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.

驴Qu茅 te pareci贸 el art铆culo?

Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *

  * He le铆do y acepto la pol铆tica de privacidad

驴Qu茅 hacemos con tus datos?

Creatividad Codificada como responsable tratar谩 tus datos con la finalidad de gestionar tu participaci贸n en nuestro blog informativo. Puedes acceder, rectificar y suprimir tus datos, as铆 como ejercer otros derechos consultando la informaci贸n adicional y detallada sobre protecci贸n de datos en nuestra Pol铆tica de Privacidad