Rythmer différentes actions sans blocage

En utilisant micros() et millis()

La fonction delay() est bloquante. Cela signifie que lorsque vous faites appel à elle, votre carte Arduino ne réagit plus à rien et se contente de passer le temps indiqué à ne rien faire. L'exemple blink est intéssant pour avoir rapidement un résultat visuel pour le débutant mais personne n'utilise d'Arduino juste pour faire clignoter une LED.

La vidéo suivante vous propose un exemple d'utilisation des fonctions micros() et millis() pour rythmer le clignotement de deux LED de façon indépendante et sans jamais bloquer le programme. Vous trouverez le code final utilisé à la suite de la vidéo.

Et le code du programme proposé :

#include <Arduino.h>

#define PIN_LED_ROUGE 3 
#define DEMI_PERIODE_ROUGE 150000 
#define PIN_LED_VERTE 5
#define DEMI_PERIODE_VERTE 260000
#define basculeLED(x) digitalWrite(x, !digitalRead(x)) 

void setup() {
  // Configure les broches des LEDs en sortie
  pinMode(PIN_LED_ROUGE, OUTPUT);
  pinMode(PIN_LED_VERTE, OUTPUT); 
} 

void loop() { 
  static unsigned long dernierRouge = 0, dernierVerte = 0;
  if ((micros() - dernierRouge) >= DEMI_PERIODE_ROUGE) { 
    dernierRouge = dernierRouge + DEMI_PERIODE_ROUGE;
    /*if (digitalRead(PIN_LED_ROUGE) == HIGH) digitalWrite(PIN_LED_ROUGE, LOW); else digitalWrite(PIN_LED_ROUGE, HIGH);*/
    /*digitalWrite(PIN_LED_ROUGE, !digitalRead(PIN_LED_ROUGE));*/
    basculeLED(PIN_LED_ROUGE);
  } 
  if ((micros() - dernierVerte) >= DEMI_PERIODE_VERTE) {
    dernierVerte = dernierVerte + DEMI_PERIODE_VERTE; basculeLED(PIN_LED_VERTE);
  }
}