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é :

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

Vous pouvez contribuer par vos dons (1€, 5€, 10€ ou au choix) au développement de nouveaux tutoriaux nécéssitant d'investir dans du matériel spécifique, de financer la fabrication de circuits imprimés permettant d'illustrer certains aspects théoriques et pratiques...

Vous avez un compte PayPal ? Faites votre don en évitant les frais PayPal :

Vous n'avez pas de compte PayPal, cliquez sur le bouton ci-dessous :