millis (): alles wat u moet weten over de Arduino-functie

Arduino UNO millis-functies

Arduino heeft een goed repertoire aan functies om in de loop van de tijd mee te werken. Een van hen is millis (), een instructie die u de tijd in milliseconden geeft sinds het Arduino-bord is ingeschakeld. Dit lijkt misschien absurd, en dat het alleen dient om te weten wanneer de plaat werd aangezet, maar de waarheid is dat het veel meer praktische toepassingen heeft.

door voorbeeld bekijken, kan het worden gebruikt om de tijd te bepalen die is verstreken tussen twee of meer gebeurtenissen, het dempen (bouncen) van een knop te vermijden, enz. Het kan ook worden gebruikt om de uitvoeringstijd in kritieke fasen van de code weer te geven, zodat het programma in realtime werkt.

Millis () functie

millis-functie Arduino

Zoals ik al zei, wordt de Arduino millis-functie gebruikt om tijd te meten, en dat doet hij in milliseconden (ms), vandaar de naam. Met andere woorden, de numerieke waarde die deze functie retourneert wanneer u deze in uw schets opneemt, zijn tijdelijke gegevens die in die eenheid worden uitgedrukt.

U moet weten dat de maximale waarde van deze variabele is lang ongetekend, dat wil zeggen, lang zonder teken. Dit is belangrijk, want als er een kleinere wordt gebruikt, kunnen er logische problemen optreden. Bovendien moet u weten dat het tot 50 dagen kan duren (4.320.000.000 ms), zodra het die waarde heeft bereikt, zal het opnieuw opstarten en opnieuw beginnen vanaf nul.

Een ander ding dat u moet weten, is dat de millis-functie maakt geen gebruik van parameters.

Andere tijdelijke Arduino-functies

Arduino heeft andere tijdgerelateerde functies die u in uw code kunt gebruiken. Een van hen is de beroemde vertraging (), maar er is meer:

  • vertraging(): Het is de meest gebruikte en meest voorkomende van alle Arduino-functies. Het gebruikt ook milliseconden als millis (). En het zal ook van het type niet-ondertekend lang zijn, en ook geen retourwaarde hebben. Het wordt voornamelijk gebruikt om pauzes te introduceren in de uitvoering van een programma, met veel toepassingen.
  • delayMicroseconds (): het wordt minder gebruikt in schetsen, in dit geval is het nog steeds lang ongetekend, zonder retourwaarde, en in dit geval gebruikt het microseconden. Momenteel kan een maximale waarde worden bereikt met een precisie van 16383 en het minimum van 3 μs. Als u wachttijden langer moet afhandelen, is het raadzaam om delay () te gebruiken.
  • micros (): retourneert ook een numerieke waarde in microseconden (μs) sinds het Arduino-bord is begonnen met het uitvoeren van het programma. Dat wil zeggen, het is als millis (), maar met een andere eenheid. In feite gebruikt het ook het niet-ondertekende lange type en het gebruikt ook geen parameters. Maar het heeft enkele extra verschillen, zoals dat het wordt gereset en begint bij nul wanneer het 70 minuten bereikt. Wat betreft de resolutie van 4 μs, of met andere woorden, de waarde die het retourneert, is altijd een veelvoud van vier (4, 8, 12, 16,…). Onthoud dat 1000 μs gelijk is aan 1 ms en 1.000.000 gelijk is aan 1 s.

Millis () voorbeelden in Arduino IDE

Screenshot van Arduino IDE

Dit zijn allemaal woorden, en hoe de millis () -functie er het beste uitziet, is door enkele voorbeelden van eenvoudige Arduino IDE-schetsen te laten zien, zodat je enkele toepassingen en gebruiksscenario's kunt zien. Dus hier zijn er een paar praktische voorbeelden...

Kan worden gebruikt met alle Arduino-borden

1-voorbeeld voor leg het gebruik uit van 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
}

Meet de tijd tussen twee seriële berichten:

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

do knipperen een LED met 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
    }
}

Maak een eenvoudige sequencer om op verschillende tijdsintervallen tekst door de seriële monitor te sturen met 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 - ");
}

Dat weet je al voor Meer informatie u kunt het gratis Arduino-programmeercursus in PDF.


Wees de eerste om te reageren

Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.