millis (): tutto ciò che devi sapere sulla funzione Arduino

Arduino UNO funzioni millis

Arduino ha un buon repertorio di funzioni con cui lavorare nel tempo. Uno di essi è millis (), un'istruzione che ti dà il tempo in millisecondi da quando la scheda Arduino è accesa. Questo può sembrare assurdo e serve solo per sapere quando è stato acceso il piano cottura, ma la verità è che ha molte più applicazioni pratiche.

da ejemplo, può essere utilizzato per determinare il tempo che è trascorso tra due o più eventi, evitare il debounce (rimbalzo) di un pulsante, ecc. Potrebbe anche essere utilizzato per mostrare il tempo di esecuzione nelle fasi critiche del codice, assicurando che il programma funzioni in tempo reale.

Funzione Millis ()

funzione millis Arduino

Come ho già accennato, la funzione millis di Arduino viene utilizzata per misurare il tempo e lo fa in millisecondi (ms), da cui il nome. In altre parole, il valore numerico restituito da questa funzione quando viene inclusa nello schizzo è un dato temporaneo espresso in quell'unità.

Dovresti sapere che il valore massimo di questa variabile è non firmato a lungo, cioè lungo senza segno. Questo è importante, perché se ne viene utilizzato uno più piccolo, potrebbero verificarsi problemi logici. Inoltre, dovresti sapere che può durare fino a 50 giorni (4.320.000.000 ms), una volta raggiunto quel valore si riavvierà e ricomincerà da zero.

Un'altra cosa che devi sapere è che la funzione millis non utilizza parametri.

Altre funzioni temporanee di Arduino

Arduino ha altre funzioni relative al tempo che puoi utilizzare nel tuo codice. Uno di essi è il famoso ritardo (), ma c'è di più:

  • ritardo (): È la più utilizzata e comune di tutte le funzioni di Arduino. Utilizza anche millisecondi come millis (). E sarà anche di tipo unsigned long, oltre a non avere un valore di ritorno. Viene utilizzato principalmente per introdurre pause nell'esecuzione di un programma, con molte applicazioni.
  • delayMicroseconds (): è meno utilizzato negli schizzi, in questo caso è ancora lungo senza segno, senza valore di ritorno, e in questo caso utilizza i microsecondi. Attualmente, un valore massimo può essere raggiunto con una precisione di 16383 e il minimo di 3μs. Se devi gestire attese più lunghe, si consiglia di utilizzare delay ().
  • micros (): restituisce anche un valore numerico in microsecondi (μs) da quando la scheda Arduino ha avviato l'esecuzione del programma. Cioè, è come millis (), ma con un'altra unità. In effetti, utilizza anche il tipo lungo senza segno e non utilizza nemmeno i parametri. Ma ha alcune differenze aggiuntive, come il fatto che si resetta e riparte da zero quando raggiunge i 70 minuti. Per quanto riguarda la sua risoluzione di 4 μs, ovvero il valore che restituisce sarà sempre un multiplo di quattro (4, 8, 12, 16,…). Ricorda che 1000 μs equivale a 1 ms e 1.000.000 equivale a 1 s.

Esempi di Millis () nell'IDE di Arduino

Screenshot dell'IDE di Arduino

Queste sono tutte parole e la migliore visualizzazione della funzione millis () è mostrare alcuni esempi di semplici schizzi IDE di Arduino in modo da poter vedere alcune applicazioni e casi d'uso. Quindi eccone alcuni esempi pratici...

Può essere utilizzato con tutte le schede Arduino

1-Esempio per spiegare l'uso da 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
}

Misura il tempo tra due messaggi seriali:

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

Fare lampeggia un LED con 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
    }
}

Creazione di un sequencer semplice per inviare testo tramite il monitor seriale a diversi intervalli di tempo utilizzando 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 - ");
}

Lo sai già per ulteriori informazioni puoi scaricare il file corso gratuito di programmazione Arduino in PDF.


Puoi essere il primo a lasciare un commento

Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

*

*

  1. Responsabile dei dati: Miguel Ángel Gatón
  2. Scopo dei dati: controllo SPAM, gestione commenti.
  3. Legittimazione: il tuo consenso
  4. Comunicazione dei dati: I dati non saranno oggetto di comunicazione a terzi se non per obbligo di legge.
  5. Archiviazione dati: database ospitato da Occentus Networks (UE)
  6. Diritti: in qualsiasi momento puoi limitare, recuperare ed eliminare le tue informazioni.