millis (): allt du behöver veta om Arduino-funktionen

Arduino UNO millis funktioner

Arduino har en bra repertoar av funktioner att arbeta med över tiden. En av dem är milis (), en instruktion som ger dig tiden i millisekunder sedan Arduino-kortet är påslaget. Detta kan verka absurt, och det tjänar bara till att veta när hällen slogs på, men sanningen är att den har många fler praktiska tillämpningar.

Por ejemplo, den kan användas för att bestämma tiden som har gått mellan två eller flera händelser, undvika avstängning (studs) av en knapp, etc. Det kan också användas för att visa körtiden i kritiska steg i koden, så att programmet fungerar i realtid.

Millis () -funktion

millis funktion Arduino

Som jag redan har nämnt används Arduino millis-funktionen för att mäta tid, och den gör det i millisekunder (ms), därav dess namn. Med andra ord är det numeriska värdet som den här funktionen returnerar när du inkluderar det i din skiss en tillfällig data som uttrycks i den enheten.

Du bör veta att det maximala värdet för denna variabel är osignerad lång, det vill säga länge utan tecken. Detta är viktigt, för om en mindre används kan logiska problem uppstå. Dessutom borde du veta att det kan ta upp till 50 dagar (4.320.000.000 ms), när det väl har nått det värdet startar det om och startar om från noll.

En annan sak du måste veta är att millisfunktionen fungerar använder inte parametrar.

Andra tillfälliga Arduino-funktioner

Arduino har andra tidsrelaterade funktioner som du kan använda i din kod. En av dem är den berömda förseningen (), men det finns mer:

  • dröjsmål(): Det är den mest använda och vanliga av alla Arduino-funktioner. Den använder också millisekunder som millis (). Och det kommer också att vara av typ osignerad lång, förutom att det inte har något returvärde. Den används främst för att införa pauser i genomförandet av ett program, med många applikationer.
  • delayMicroseconds (): används mindre i skisser, i det här fallet är det fortfarande osignerat långt, utan returvärde, och i det här fallet använder det mikrosekunder. För närvarande kan ett maximalt värde uppnås med precision 16383 och minst 3 μs. Om du måste hantera väntetider längre än så rekommenderas det att du använder fördröjning ().
  • mikro (): returnerar också ett numeriskt värde i mikrosekunder (μs) sedan Arduino-kortet började köra programmet. Det vill säga det är som millis (), men med en annan enhet. I själva verket använder den också den osignerade långa typen och den använder inte heller parametrar. Men det har några ytterligare skillnader, till exempel att det återställs och börjar från noll när det når 70 minuter. När det gäller dess upplösning på 4 μs, eller med andra ord, kommer värdet det returnerar alltid att vara en multipel av fyra (4, 8, 12, 16, ...). Kom ihåg att 1000 μs är lika med 1 ms och 1.000.000 är lika med 1 s.

Millis () exempel i Arduino IDE

Skärmdump av Arduino IDE

Allt detta är ord, och den bästa utsikten över millis () -funktionen visar några exempel på enkla Arduino IDE-skisser så att du kan se några applikationer och använda fall. Så här är några praktiska exempel.

Kan användas med alla Arduino-kort

1-exempel för förklara användningen från 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
}

Mät tiden mellan två seriella meddelanden:

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

Gör blinka en LED med 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
    }
}

Skapa en enkel sequencer att skicka text genom den seriella bildskärmen med olika tidsintervall med 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 - ");
}

Det vet du redan för mer du kan ladda ner gratis Arduino programmeringskurs i PDF.


Bli först att kommentera

Lämna din kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade med *

*

*

  1. Ansvarig för uppgifterna: Miguel Ángel Gatón
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.