Me he enterado de que en Arduino habían incluido el uso de interrupciones de una forma bastante sencilla.
Arduino, tiene dos fuentes de interrupciones externas, los pines 2 y 3. Eso quiere decir que al producirse un evento(configurable) en alguno de estos pines, se interrumpirá al Atmega y se ejecutará el código asociado a esa interrupción.
Para declarar una interrupción lo haremos en el cuerpo del setup, de la siguiente forma:
* A can be either 0 or 1 for interrupts on pin 2 or 3.
*
* B Name of a function you want to execute while
* in interrupt A.
*
* C Trigger mode of the interrupt pin. can be:
* LOW a low level trigger
* CHANGE a change in level trigger
* RISING a rising edge of a level trigger
* FALLING a falling edge of a level trigger
*
* In all but the IDLE sleep modes only LOW can be used.
*/
Por ejemplo,
El primer parámetro define el uso de la interrupción 0, la que está en el Pin 2. Cuando en el Pin 2 se detecta un flanco de bajada(3º parámetro), es decir, pasa de 1 a 0, entonces ejecutará el código que definamos en ArCanInterrupt().
Por ejemplo,
{
//Almacenamos el mensaje en el buffer_rx
ArCan.get_message_rx_buffer()
}
En las próxima versión de la librería estará incluido el uso de interrupciones.
Consejo: El código que se ejecuta en una interrupción debe ser lo más rápido posible.