millis (): tot ce trebuie să știți despre funcția Arduino

Arduino UNO funcții de milis

Arduino are un repertoriu bun de funcții pentru a lucra în timp. Unul dintre ei este milis (), o instrucțiune care vă oferă timpul în milisecunde de când placa Arduino este pornită. Acest lucru poate părea absurd și că servește doar pentru a ști când a fost pornită placa, dar adevărul este că are mult mai multe aplicații practice.

De exemplu, poate fi folosit pentru a determina timpul care a trecut între două sau mai multe evenimente, pentru a evita retragerea (săritura) unui buton etc. De asemenea, ar putea servi pentru a arăta timpul de execuție în etape critice ale codului, asigurându-se că programul funcționează în timp real.

Funcția Millis ()

funcția millis Arduino

După cum am menționat deja, funcția Arduino millis este utilizată pentru a măsura timpul și o face în milisecunde (ms), de unde și numele său. Cu alte cuvinte, valoarea numerică pe care o returnează această funcție atunci când o includeți în schița dvs. este o dată temporară exprimată în acea unitate.

Trebuie să știți că valoarea maximă a acestei variabile este nesemnat mult, adică mult timp fără semn. Acest lucru este important, deoarece dacă se utilizează unul mai mic, ar putea apărea probleme logice. În plus, trebuie să știți că poate dura până la 50 de zile (4.320.000.000 ms), odată ce a atins acea valoare, va reporni și va porni din nou de la zero.

Un alt lucru pe care trebuie să-l știți este că funcția millis nu folosește parametri.

Alte funcții temporare Arduino

Arduino are alte funcții legate de timp pe care le puteți utiliza în codul dvs. Unul dintre ei este celebra întârziere (), dar există mai multe:

  • întârziere(): Este cea mai utilizată și comună dintre toate funcțiile Arduino. De asemenea, folosește milisecunde ca milis (). Și va fi, de asemenea, de tip nesemnat lung, precum și nu va avea o valoare de returnare. Este folosit în principal pentru a introduce pauze în executarea unui program, cu multe aplicații.
  • delayMicroseconds (): este mai puțin utilizat în schițe, în acest caz este încă nesemnat lung, fără valoare de returnare și în acest caz folosește microsecunde. În prezent, o valoare maximă poate fi atinsă cu precizie de 16383 și minimă de 3μs. Dacă trebuie să gestionați așteptările mai mult de atât, este recomandat să utilizați delay ().
  • micros (): returnează, de asemenea, o valoare numerică în microsecunde (μs) de când placa Arduino a început să execute programul. Adică, este ca milis (), dar cu o altă unitate. De fapt, folosește și tipul lung nesemnat și nici parametrii. Dar are unele diferențe suplimentare, cum ar fi faptul că se resetează și începe de la zero când atinge 70 de minute. În ceea ce privește rezoluția sa de 4 μs sau, cu alte cuvinte, valoarea pe care o returnează va fi întotdeauna un multiplu de patru (4, 8, 12, 16, ...). Amintiți-vă că 1000 μs este egal cu 1 ms și 1.000.000 este egal cu 1 s.

Exemple Millis () în Arduino IDE

Captură de ecran a Arduino IDE

Acestea sunt toate cuvinte și modul în care funcția millis () arată cel mai bine este prin afișarea unor exemple de schițe simple Arduino IDE, astfel încât să puteți vedea unele aplicații și cazuri de utilizare. Iată deci câteva exemple practice...

Poate fi folosit cu toate plăcile Arduino

1-Exemplu pentru explica utilizarea din milis ():

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ăsurați timpul dintre două mesaje seriale:

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

Face clipiți un LED cu milis ():

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

Creați un simplu secvențiator pentru a trimite text prin monitorul serial la diferite intervale de timp folosind 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 - ");
}

Știi deja asta pentru mai mult puteți descărca curs gratuit de programare Arduino în PDF.


Fii primul care comenteaza

Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.