millis (): tout ce que vous devez savoir sur la fonction Arduino

Arduino UNO fonctions millis

Arduino a un bon répertoire de fonctions avec lesquelles travailler au fil du temps. L'un d'eux est millis (), une instruction qui vous donne le temps en millisecondes depuis la mise sous tension de la carte Arduino. Cela peut sembler absurde, et cela ne sert qu'à savoir quand la table de cuisson a été allumée, mais la vérité est qu'elle a beaucoup plus d'applications pratiques.

Par exemple, il peut être utilisé pour déterminer le temps qui s'est écoulé entre deux ou plusieurs événements, éviter le anti-rebond (rebond) d'un bouton, etc. Il pourrait également être utilisé pour afficher le temps d'exécution dans les étapes critiques du code, garantissant que le programme fonctionne en temps réel.

Fonction Millis ()

fonction millis Arduino

Comme je l'ai déjà mentionné, la fonction Arduino millis est utilisée pour mesurer le temps, et elle le fait en millisecondes (ms), d'où son nom. En d'autres termes, la valeur numérique que cette fonction renvoie lorsque vous l'incluez dans votre esquisse est une donnée temporaire exprimée dans cette unité.

Vous devez savoir que la valeur maximale de cette variable est non signé long, c'est-à-dire longtemps sans signe. Ceci est important, car si un plus petit est utilisé, des problèmes de logique peuvent survenir. De plus, sachez qu'il peut durer jusqu'à 50 jours (4.320.000.000 XNUMX XNUMX XNUMX ms), une fois qu'il a atteint cette valeur, il redémarrera et repartira à zéro.

Une autre chose que vous devez savoir est que la fonction millis n'utilise pas de paramètres.

Autres fonctions Arduino temporaires

Arduino a d'autres fonctions liées au temps que vous pouvez utiliser dans votre code. L'un d'eux est le fameux delay (), mais il y a plus:

  • délai (): C'est la plus utilisée et la plus commune de toutes les fonctions Arduino. Il utilise également des millisecondes comme millis (). Et il sera également de type unsigned long, en plus de ne pas avoir de valeur de retour. Il est principalement utilisé pour introduire des pauses dans l'exécution d'un programme, avec de nombreuses applications.
  • delayMicroseconds (): est moins utilisé dans les esquisses, dans ce cas, il est toujours non signé, sans valeur de retour, et dans ce cas, il utilise des microsecondes. Actuellement, une valeur maximale peut être atteinte avec une précision de 16383 et un minimum de 3 μs. Si vous devez gérer des attentes plus longues que cela, il est recommandé d'utiliser delay ().
  • micros (): renvoie également une valeur numérique en microsecondes (μs) depuis que la carte Arduino a commencé à exécuter le programme. Autrement dit, c'est comme millis (), mais avec une autre unité. En fait, il utilise également le type long non signé et il n'utilise pas non plus de paramètres. Mais il présente quelques différences supplémentaires, telles que le fait qu'il se réinitialise et recommence à zéro lorsqu'il atteint 70 minutes. Concernant sa résolution de 4 μs, autrement dit, la valeur qu'elle renvoie sera toujours un multiple de quatre (4, 8, 12, 16,…). N'oubliez pas que 1000 μs équivaut à 1 ms et 1.000.000 1 XNUMX équivaut à XNUMX s.

Exemples Millis () dans l'IDE Arduino

Capture d'écran Arduino IDE

Ce sont tous des mots, et la meilleure vue de la fonction millis () montre quelques exemples de simples esquisses Arduino IDE afin que vous puissiez voir certaines applications et cas d'utilisation. Alors voici quelques exemples pratiques...

Peut être utilisé avec toutes les cartes Arduino

1-Exemple pour expliquer l'utilisation à partir de millis ():

unsigned long inicio, fin, transcurrido;  // Declarar las variables a usar
void setup(){
   Serial.begin(9600);  //Iniciar la comunicación serial
}
void loop(){
   inicio=millis();  //Consultar ms desde que inició la ejecución del sketch
   delay(1000);  //Espera 1 segundo
   fin=millis();  //Consultar ms fin del sketch
   transcurrido=fin-inicio;  //Calcula el tiempo desde la última lectura
   Serial.println(transcurrido);  //Muestra el resultado en el monitor serial
   delay(500);  //Esperar medio segundo
}

Mesurer le temps entre deux messages série:

unsigned long tiempo1 = 0;  //Declaramos las variables e iniciamos a 0
unsigned long tiempo2 = 0;
unsigned long diferenciaTiempo = 0;
void setup() {
  Serial.begin(9600);
  Serial.println("Envía la letra A/a por la terminal serial");
}

void loop() {
  if(Serial.available() > 0){
     char datoRecibido = Serial.read();
     if(datoRecibido == 'A' || datoRecibido == 'a'){
        tiempo1 = millis();
        Serial.println("Envía la letra B/b por la terminal Serial");
     }
     else if(datoRecibido == 'b' && datoRecibido == 'B'){
        tiempo2 = millis();
        diferenciaTiempo = tiempo1-tiempo2;
        Serial.print("El tiempo transcurrido entre el primer y último dato enviado es: ");
        Serial.print(diferenciaTiempo);
     }
   }
}

Faire faire clignoter une LED avec millis ():

int estadoLed;  //Almacena el estado del LED (Encendido o apagado)
int periodo = 100;  //Tiempo que está el LED encendido o apagado
unsigned long tiempoAnterior = 0;  //Almacena tiempo de referencia para comparar
void setup() {
    pinMode(13,OUTPUT);  //Configura el pin 13 como salida para el LED
}
void loop() {
  if(millis()-tiempoAnterior>=periodo){  //Evalúa si ha transcurrido el periodo programado
    estadoLed=!estadoLed;  //Cambia el estado del LED cada 100ms
    digitalWrite(13,estadoLed);  //Actualiza el estado del LED al actual
    tiempoAnterior=millis();  //Almacena el tiempo actual como referencia
    }
}

Créer un séquenceur simple pour envoyer du texte via le moniteur série à différents intervalles de temps à l'aide de millis ():

#define INTERVALO_MENSAJE1 3000
#define INTERVALO_MENSAJE2 5000
#define INTERVALO_MENSAJE3 7000
#define INTERVALO_MENSAJE4 15000
 
unsigned long tiempo_1 = 0;
unsigned long tiempo_2 = 0;
unsigned long tiempo_3 = 0;
unsigned long tiempo_4 = 0;
 
void print_tiempo(unsigned long tiempo_millis);
 
void setup() {
    Serial.begin(9600);
}
 
void loop() {
    if(millis() > tiempo_1 + INTERVALO_MENSAJE1){
        tiempo_1 = millis();
        print_tiempo(tiempo_1);
        Serial.println("Soy");
    }
   
    if(millis() > tiempo_2 + INTERVALO_MENSAJE2){
        tiempo_2 = millis();
        print_tiempo(tiempo_2);
        Serial.println("Un mensaje");
    }
   
    if(millis() > tiempo_3 + INTERVALO_MENSAJE3){
        tiempo_3 = millis();
        print_tiempo(tiempo_3);
        Serial.println("De");
    }
   
    if(millis() > tiempo_4 + INTERVALO_MENSAJE4){
        tiempo_4 = millis();
        print_tiempo(tiempo_4);
        Serial.println("Esperanza");
    }
}
 
void print_tiempo(unsigned long tiempo_millis){
    Serial.print("Tiempo: ");
    Serial.print(tiempo_millis/1000);
    Serial.print("s - ");
}

Vous le savez déjà pour plus d'informations vous pouvez télécharger le cours de programmation Arduino gratuit en PDF.


Soyez le premier à commenter

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données: Miguel Ángel Gatón
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.