viernes, 1 de enero de 2016

¿Qué son las interrupciones para Arduino?





Llegados a este punto, imagino que ya tenemos bien claro como funciona un sketch de Arduino y cómo podemos programar las tareas para que se vayan ejecutando una tras otra de forma ininterrumpida.

Podemos hacer que nuestro Arduino vigile quién entra en nuestro cuarto, usando por ejemplo un sensor de ultrasonidos, o bien, monotorice la temperatura de una habitación y nos la muestre en pantalla. Podemos hacer básicamente lo que queramos con tal de que definamos bien la lista de tareas y el orden en el que queremos que se ejecuten.

Pero como cualquier persona, nuestro Arduino tiene unos recursos limitados y si queremos que nuestro Arduino nos prepare una rica cena, le podría pasar que el ruido de los fogones no le permita escuchar que como tenemos la puerta abierta, unos ladrones han entrado a robar en la casa.

  • La solución es bien simple, pues que se quede esperando en la puerta. El problema es que si se queda esperando en la puerta entonces nadie nos hace la cena.  
  • No pasa nada, podemos decirle que cierre la puerta y que cada pocos minutos se acerque a ver si alguien está esperando. Pero claro con ese trajín, no puede atender bien la cocina, y algunas cosas se queman, u otras no terminan de prepararse bien. 
  • Entonces es cuando se da cuenta de la utilidad del timbre, y decide poner un pequeño altavoz en la cocina de modo que le permita escuchar cuando alguien llama, y solo entonces dejar de cocinar para atender, durante un breve instante, abrir la puerta y luego volver a sus labores.


Pues es justo de eso de lo que vamos a hablar hoy, de las interrupciones. Y cómo nuestro Arduino gracias al buen uso de ellas, puede dedicarse a sus tareas y olvidarse del mundo hasta que no suene "el timbre".



Para ello lo primero que tenemos que hacer es conectar al timbre para que podamos escucharlo, y tras ello tenemos que saber donde está el botón que abre la puerta principal desde la cocina. No basta con oir que llaman a la puerta, hay que saber donde está el pulsador que permitirá "abrir la puerta" y proseguir con nuestra tarea.


Incluso puede ser más complicado, imaginaros que vivimos en un edificio en el que para acceder a nuestro apartamento  pueden entrar bien en coche o bien a pie,  si entran directamente nuestro garaje en su coche tendremos que abrirle la puerta del parking, y si entran a pie, pues tendremos que abrirle la puerta principal del edificio.

En ese caso antes de abrir la puerta, tendremos quién es el que llama (no a todo el mundo vamos a dejarle entrar), saber qué puerta queremos abrir (puede que tengamos más de una), y qué debemos hacer (puede que sólo sea abrir la puerta, o puede que queremos también encender la luz de la entrada, poner música ambiente, y encender la calefacción). Y hacerlo todo rápidamente y para volver  corriendo a nuestras labores en la cocina.


Pues bien, lo primero lo primero. ¿Cuántas llamadas diferentes podemos atender?, o lo que es lo mismo ¿cuántas interrupciones diferentes puedo gestionar sin volverme loco? La respuesta está en el tipo de placa Arduino que tengamos entre manos.  Si estamos trabajando con la placa más popular, la Arduino UNO, tendremos solo la posibilidad de gestionar dos "timbres", si nuestro proyecto necesitara estar pendiente de más eventos, tendríamos que saltar a la placa Micro, la Leonardo, la Mega o la DUE.

Un breve resumen de ello lo podemos encontrar en la tabla adjunta.



Llegados a este punto, todo parece bien sencillo, programamos nuestro sketch y justo cuando sucede lo que queremos monitorizar, se disparará el trozo del programa que hayamos programado para esa ocasión. En nuestro ejemplo, sería a activar un relé para que se abriera la puerta que queramos.

En la siguiente entrada veremos cómo debemos encapsular este código para que se ejecute sólo si sucede el evento.  No os la perdáis, veréis que fácil es esto de manejar interrupciones con nuestro Arduino.

Y ya sabéis, si tenéis alguna sugerencia o duda, no tenéis más que mandarnos un correo a



e intentaremos responder a vuestra pregunta lo antes que podamos.

s.

No hay comentarios:

Publicar un comentario