La placa Arduino Due permite la multitarea utilizando la biblioteca Scheduler. Se basa en un microcontrolador ARM Cortex-M3 de 32 bits a 84MHz. Por lo tanto, es mucho más potente que un Arduino UNO. Estas características le permiten crear algoritmos multitarea más potentes. Veremos aquí cómo utilizar la biblioteca Scheduler que permite utilizar varias funciones loop().
Material
- Arduino Due
- Cable USB A macho/micro B macho
Descripción
La biblioteca Scheduler permite que un microcontrolador basado en SAM, como el Arduino Due o el Arduino Zero, realice múltiples acciones sin interrumpirse. La biblioteca permite organizar las tareas de forma que el microprocesador pase de una a otra sin tener que crear un temporizador dedicado. Al igual que otros microcontroladores Arduino, el Arduino Due no permite un verdadero multithreading pero, gracias a su velocidad de reloj, da la impresión de ejecutar tareas en paralelo.
Código
En este código, crearemos varias funciones de bucle que se ejecutarán en paralelo. Para inicializar cada función de bucle utilizamos el comando startLoop:
Scheduler.startLoop(loop2);
Scheduler.startLoop(loop3);
Cabe destacar que la función delay() permite activar otra tarea. Si no hay una función de retardo en una de las funciones del bucle, se debe utilizar la función yield() para pasar la mano a la siguiente tarea.
#include <Scheduler.h> int counter=0; void setup() { Serial.begin(9600); Scheduler.startLoop(loop2); Scheduler.startLoop(loop3); } void loop() { Serial.println(F(" Action 1 LED : HIGH")); digitalWrite(13, HIGH); delay(500); Serial.println(F(" Action 1 LED : LOW")); digitalWrite(13, LOW); delay(500); } void loop2() { if(counter<25) { counter++; Serial.print(F(" Action 2 counter : "));Serial.println(counter); } delay(100); } void loop3() { if(counter>=25){ for(counter;counter>=0;counter--){ Serial.print(F(" Action 3 Reset counter : "));Serial.println(counter); } } yield(); }
El Arduino Due y la librería nos permiten simplemente crear funciones que se ejecutarán en paralelo y que no requieren una gestión adicional de la programación de tareas en tiempo real, como la creación de temporizadores.
Resultado
Una vez que el programa se ha iniciado, puede ver que las tareas se ejecutan de forma ordenada.
Una vez que este código es funcional, puedes modificarlo para adaptarlo a tus necesidades. La biblioteca Scheduler permite, por ejemplo, asignar una función de bucle a la gestión de sensores, motores o incluso a la comunicación en serie.
Fuentes
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie