Site icon AranaCorp

Programme multitâche avec Arduino Due et Scheduler

La carte Arduino Due permet de faire du multitasking à l’aide de la librairie Scheduler. Elle est basée sur un microcontrôleur ARM Cortex-M3 en 32 Bits avec 84MHz. Elle est donc bien plus puissante qu’un Arduino UNO. Ces caractéristiques lui permettent de créer des algorithmes multitâches plus performants. Nous allons voir ici comment utiliser la librairie Scheduler qui permet d’utiliser plusieurs fonctions loop().

Matériel

Description

La librairie Scheduler permet à un microcontrôleurs basé sur une Architecture SAM, comme Arduino Due ou l’Arduino Zero, d’effectuer plusieurs actions sans s’interrompre. La libraire permet d’agencer les tâches afin que le microprocesseur passe de l’une à l’autre sans avoir à créer de timer dédié. Tout comme les autres microcontrôleurs Arduino, l’Arduino Due ne permet pas de faire du vrai multithreading mais, grâce à sa fréquence d’horloge, elle donne l’impression d’exécuter les tâches en parallèle.

Code

Dans ce code, nous allons créer plusieurs fonction loop qui vont pouvoir s’exécuter en parallèle. Pour initialiser chacune des fonctions loop nous utilisons la commande startLoop:

  Scheduler.startLoop(loop2);
  Scheduler.startLoop(loop3);

Il est bon de noter que la fonction delay() permet à une autre tâche de s’activer. Lorsqu’il n’y a pas de fonction delay dans une des fonctions loop, il faut alors utiliser la fonction yield() afin de passer la main à la tâche suivante.

#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();
}

L’Arduino Due et la libraire nous permettent de créer simplement des fonctions qui vont tourner en parallèle et qui ne nécessite pas de gestion supplémentaire de l’ordonnancement temps-réel des tâches comme la création de timers.

Résultat

Une fois le programme lancé, on observe les tâches s’exécuter de manière ordonnée.

Une fois ce code fonctionnel, vous pouvez le modifier pour qu’il corresponde à votre besoin. La librairie Scheduler permet, par exemple, d’affecter une fonction loop à la gestion des capteurs, des moteurs ou encore à la communication série.

Sources

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie

Quitter la version mobile