Utilisation De La Fonction Millis() De L'IDE Arduino - AranaCorp
Maybe your like
Pour pallier aux problèmes générés par l’utilisation de la fonction delay(), une solution possible est d’utiliser la fonction millis(). Dès la première utilisation de l’Arduino, la fonction delay() est utilisée afin de gérer les instructions en fonction du temps. Le problème majeur de la fonction delay() est qu’elle bloque l’exécution de la suite du code. Ceci devient très limitant lorsqu’on travaille avec plusieurs composants (gestions de plusieurs LEDs ou capteurs). Nous allons voir dans ce tutoriel comment utiliser la fonction millis() pour remplacer la fonction delay().
Description de la fonction millis()
La fonction millis() ne prend aucun paramètre et renvoie une valeur qui représente le nombre de millisecondes écoulées depuis la mise en tension de l’Arduino. La valeur est de type long non-signé (unsigned long, 4-bytes ou 32-bits). La valeur maximale qu’elle peut prendre est de 4,294,967,295 soit 49 jours.
void setup() {} void loop() { Serial.print("Milliseconds since ignition: "); Serial.println(millis()) delay(200); }N.B.: Il existe aussi la fonction micros() qui fonctionne sur le même principe mais renvoie des microsecondes.
Remplacer delay()
Dans les premiers exemples d’Arduino, on utilise la fonction delay() pour exécuter un bloc de code périodiquement mais ce n’est pas sa fonction propre puisqu’elle bloque l’exécution du code. La fonction millis() est bien plus adaptée pour cette fonction.
Reprenons l’exemple Blink. Nous utilisons la fonction delay pour faire clignoter une LED toutes les 200 millisecondes.
void setup() { pinMode(13,OUTPUT); } void loop() { digitalWrite(13,HIGH); delay(200); digitalWrite(13,LOW); delay(200); }Pour remplacer ce code par un structure avec millis(), l’idée est de créer une variable afin de conserver en mémoire à chaque itération la valeur de temps écoulé puis de la comparer à la valeur de temps actuelle. A chaque intervalle, nous inversons l’état de la led avec l’opérateur « ! ».
unsigned long currentTime=0; unsigned long previousTime=0; bool ledState=LOW; void setup() { Serial.begin(9600); pinMode(13,OUTPUT); } void loop() { currentTime=millis(); if((currentTime-previousTime)>200){ previousTime=currentTime; ledState=!ledState; digitalWrite(13,ledState); Serial.print(F("LED State : "));Serial.println(ledState); } }Nous recréons l’exemple blink avec, en plus, la possibilité d’exécuter du code même si l’intervalle de temps n’est pas écoulé. Dans ce code, la led vas s’allumer et s’éteindre toutes les 200ms.
Définir différents intervalles de temps
Dans le cas où vous voudriez avoir des cycles ON et OFF de la LED avec des temps différents, il est possible de modifier l’intervalle de temps en fonction de l’état de la LED.
unsigned long currentTime=0; unsigned long previousTime=0; unsigned long interval,interval1=200, interval2=1000; bool ledState=LOW; void setup() { Serial.begin(9600); pinMode(13,OUTPUT); } void loop() { currentTime=millis(); if(ledState){ interval=interval2; }else{ interval=interval1; } if((currentTime-previousTime)>interval){ previousTime=currentTime; ledState=!ledState; digitalWrite(13, ledState); Serial.print(F("LED State : "));Serial.println(ledState); } }Ce code permet de ‘allumer la LED pendant 200ms toutes les secondes.
Aller plus loin
Il est important de noter que la fonction millis() utilise des timers internes du microcontrôleur et peut être perturbée par l’utilisation d’interruption ou d’autres librairies.
Pour aller vers une programmation d’un niveau plus avancé, il est possible d’utiliser les librairies de gestion de timer (Timer.h,Timer2.h, TimerOne.h, etc.)
Il est aussi possible de venir jouer avec les registres du microcontrôleur pour configurer les timers internes
Sources
- Référence Arduino sur la fonction millis()
- Le fameux exemple Blink without delay
- Programmer avec Arduino
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code La Programmerie
Tag » Arduino Compter Le Temps
-
Arduino : Comment Gérer Le Temps
-
Compteur De Temps Entre Deux Mesures Sur Arduino - Français
-
Compter Les Temps D'activité D'une Sortie - Français - Arduino Forum
-
Calculer Le Temps Entre Deux états - Français - Arduino Forum
-
Compter Le Temps Qui S'écoule Dans Notre Vie Sans Utiliser Millis() Et ...
-
La Gestion Du Temps Avec Arduino - L'esprit Do It Yourself
-
Introduire Le Temps - Arduino : Premiers Pas En Informatique ...
-
Comment Gérer Le Temps Dans Un Programme - Locoduino
-
Arduino Cours Sur Le Temps Avec Delay Et Millis - Oui Are Makers
-
Arduino #33: Comment Mesurer Le Temps D'exécution
-
Arduino #25: La Gestion Du Temps - Les Fonctions Millis() Et Micros ...
-
Arduino 33 BLE : Mesure De Temps Et De Fréquence
-
Déterminer Le Temps D'exécution D'une Fonction En Langage Arduino.
-
[Arduino] Compter Le Temps Par AntoineMompas - Page 1