Utilisation de la fonction millis()

1. Introduction

La fonction millis() permet de lire le temps écoulé en milliseconde depuis le lancement du programme présent dans la carte Arduino. La valeur du temps atteindra sa valeur maxi au bout d'approximativement 50 jours (retour à 0 après dépassement).

Exemple de programme :

unsigned long heure;     // heure contiendra l'heure en milliseconde.

void setup()
{
    Serial.begin(9600);     // Vitesse de communication avec le port série (9600 bits/s).
}

void loop()
{
    Serial.print("Heure (en ms) : ");
    heure = millis();
    Serial.println(heure);
    delay(1000);
}

Remarque : On pourrait s'attendre à voir s'afficher 0, 1000, 2000, 3000, etc. puisque la pause est de 1000 ms. Toutefois un décallage apparaît, car il faut ajouter le temps d'exécution de la boucle qui est ici d'environ 0,3 ms.

La pause dans un programme peut quelquefois s'avérer gênante car le programme est bloqué pendant cette pause. Il ne peut réagir à rien. Nous allons découvrir maintenant une utilisation intéressante de millis() qui va justement nous permettre de contourner cette pause.

unsigned long heure;     // heure contiendra l'heure en milliseconde.
unsigned long ancienne_heure = 0L;     // heure précédente (en ms).
unsigned long intervalle = 2000L;     // Durée avant la prochaine action.

void setup()
{
    Serial.begin(9600);     // Vitesse de communication avec le port série (9600 bits/s).
}

void loop()
{
    heure = millis();
    if(heure - ancienne_heure >= intervalle)
    {
        ancienne_heure = heure;
        // Action a affectuer ...
        Serial.print("Heure (en ms) : ");
        Serial.println(heure);
    }
}

Le programme exécute la boucle en continue sans réaliser de pause. Lorsque la différence de temps entre l'ancienne heure et la nouvelle atteind 2000 ms, alors la condition if() exécute l'action prévue. Dans cet exemple, on affiche simplement l'heure écoulée en milliseconde depuis le démarrage du programme.