Site icon AranaCorp

Programme multitâche avec Arduino et la librairie FlexiTimer2

La librairie Arduino FlexiTimer2 est une librairie qui permet d’activer des fonctions à des intervalles de temps réguliers. Elle permet, à ce titre, de faire des programmes multitâche (ou multitasking) avec des microcontrôleurs Arduino. Cette méthode est utile lorsque vous souhaitez actionner deux moteurs en parallèle de manière indépendante.

Matériel

Description

La librairie FlexiTimer2 est basée sur la librairie MsTimer2. Elle contient un ensemble de fonctions qui permettent de s’interfacer avec le registre timer2 du microprocesseur ATmega de l’Arduino. Cette librairie, d’un usage similaire à une structure avec la fonction millis(), appelle une fonction lorsque l’intervalle de temps spécifié est écoulé.

L’intérêt de cette librairie par rapport à MsTimer2 est qu’il est possible de modifier la résolution de comptage, c’est à dire, la fréquence à laquelle le compteur s’incrémente.

Code

Dans ce code, nous allons créer une fonction définie de type void onTimer, qui va nous permettre de changer l’état de la LED embarquée de l’Arduino. Pour initialiser le timer, nous utilisons la ligne:

FlexiTimer2::set(500, onTimer);

Et pour l’activer, la commande:

FlexiTimer2::start();
#include <FlexiTimer2.h>
unsigned long elapsedTime, previousTime;

void onTimer() {
  static boolean state = HIGH;
  elapsedTime=millis()-previousTime;
  Serial.print(F("Set LED 13 : "));
  if(state){
    Serial.print(F("ON"));
  }else{
    Serial.print(F("OFF"));
  }
  Serial.print(F(" - "));Serial.print(elapsedTime);Serial.println(F("ms"));
  digitalWrite(13, state);
  state = !state;

  previousTime=millis();
}

void setup() {
  Serial.begin(9600);
  pinMode(13, OUTPUT);

  FlexiTimer2::set(500, onTimer); // equivalent to FlexiTimer2::set(500, 1/1000, onTimer);
  FlexiTimer2::start();
}

void loop() {
}

N.B. : Nous avons rajouté une mesure du temps écouler à titre d’illustration mais il faut faire attention lorsqu’on utilise des fonctions basées sur les interruptions dans les fonctions appelées par des interruptions. Il peut y avoir des interférences.

Résultat

Une fois le programme lancé, la LED embarquée s’allume et s’éteint toutes les 500ms

Sources

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

Quitter la version mobile