94. Por qué usar las interrupciones en Arduino, todo lo que necesitas saber




La Tecnología para todos show

Summary: Ya escribí un artículo donde explicaba con un caso práctico para usar las interrupciones en Arduino. En este capítulo del podcast vamos a ver todo lo que necesitas saber sobre este sistema que permitirá que nuestros programas sean más eficaces y más legibles. Además liberan al procesador de rutinas innecesarias en muchas ocasiones. ¿Cuántos sketchs o programas hemos realizado donde comprobábamos si un pin estaba en alto o bajo en cada iteración del bucle? Esto se ha acabado ya. Si eres capaz de dominar las interrupciones te limitarás a programar lo verdaderamente importante dentro de tus proyectos. En el proyecto que estoy llevando a cabo, el tiesto inteligente, me han surgido varios problemas que debo de resolver. Sobre todo a la hora de implementar el algoritmo que permita que el DFRobot se mueva solo. La idea es poder usar interrupciones en Arduino que me permitan centrarme en lo verdaderamente importante y organizar el código de una manera más limpia y eficaz. Antes de continuar te quiero hacer dos recomendaciones. La primera es que escuches el capítulo 42 del podcast La Hora Maker, donde César y Uribex tratan un tema muy interesante pero a la vez, muy controvertido. Por otro lado, el día 8 de octubre de 2016 se celebra en Murcia el Mur Mak, la Murcia Maker Fest a la cual asistiré como visitante. Si estás por los alrededores te recomiendo que vayas. Habrán talleres, cursos y exposiciones muy interesantes. Y ahora si, vamos a comenzar el capítulo por qué usar las interrupciones en Arduino. ¿Qué son las interrupciones en Arduino? Vamos a verlo con un símil de la vida real. Imagínate que estás viendo una película o una serie en el salón de tu casa. Te abres una cerveza y estás dispuesto a pasar unas cuantas horas de evasión y fuera de la rutina. Pero estás esperando que te llegue una carta muy importante, tan importante que en cuanto la tengas en tus manos la tienes que abrir sin demora. Lo normal es que tengas dos opciones. La primera sería que el cartero dejara la carta en el buzón y tu fueras a por ella. Al ser tan importante, si quieres leerla inmediatamente nada más que la deje, tendrías que ir a comprobar cada dos por tres si ha llegado la carta al buzón. Esto sería un poco incómodo ya que deberías parar la película, ir al buzón y comprobar si está. Pero existe una segunda opción, que la carta te llegue con acuse de recibo es decir, que el cartero llame a tu puerta y tu recibas la carta firmando el recibo. Esto es lo que sucede dentro del código de nuestro proyecto. Cuando queremos leer un pin digital lo podemos hacer de dos maneras. Estar leyendo constantemente el pin con la función digitalRead(numPin) o usar un mecanismo por el cual, se interrumpa la ejecución del programa normal o principal para hacer algo concreto. Las interrupciones permiten que el microcontrolador esté pendiente de un evento para realizar una acción concreta. No hace falta estar consultando constantemente el pin digital que queramos leer. El sistema es totalmente automático y está implementado dentro de la electrónica del microcontrolador. ¿Por qué usar las interrupciones en Arduino? Lo primero que hay que decir es que no siempre es conveniente usar las interrupciones en Arduino. Dependerá de cada situación. La norma dice que siempre que el código que se vaya a ejecutar interrumpa el funcionamiento normal, deberemos utilizar una interrupción. Si por el contrario, ese código es como consecuencia de que se termina una acción, no se deben utilizar interrupciones. Se trata de un proceso asíncrono, algo que sucede en cualquier momento mientras se ejecuta el programa normal. El microcontrolador es el encargado de estar pendiente del evento que lanza la interrupción. Nosotros solo indicamos cuándo y qué se tiene que ejecutar. No hay que confundir esta técnica con la multitarea. Los microcontroladores en la mayoría de los Arduino, no soportan la ejecución de procesos en paralelo. El funcionamiento normal consiste en ejecutar una tarea...