millis (): όλα όσα πρέπει να γνωρίζετε για τη λειτουργία Arduino

Arduino UNO λειτουργίες millis

Το Arduino έχει ένα καλό ρεπερτόριο λειτουργιών για εργασία με την πάροδο του χρόνου. Ένα από αυτά είναι χιλιοστά (), μια οδηγία που σας δίνει το χρόνο σε χιλιοστά του δευτερολέπτου από την ενεργοποίηση της πλακέτας Arduino. Αυτό μπορεί να φαίνεται παράλογο και χρησιμεύει μόνο για να μάθει πότε ενεργοποιήθηκε η εστία, αλλά η αλήθεια είναι ότι έχει πολλές περισσότερες πρακτικές εφαρμογές.

Με παράδειγμα, μπορεί να χρησιμοποιηθεί για τον προσδιορισμό του χρόνου που έχει παρέλθει μεταξύ δύο ή περισσότερων συμβάντων, για να αποφευχθεί η αναπήδηση (αναπήδηση) ενός κουμπιού κ.λπ. Θα μπορούσε επίσης να χρησιμοποιηθεί για να δείξει τον χρόνο εκτέλεσης σε κρίσιμα στάδια του κώδικα, διασφαλίζοντας ότι το πρόγραμμα λειτουργεί σε πραγματικό χρόνο.

Συνάρτηση Millis ()

λειτουργία millis Arduino

Όπως έχω ήδη αναφέρει, η λειτουργία Arduino millis χρησιμοποιείται για τη μέτρηση του χρόνου και το κάνει χιλιοστά του δευτερολέπτου (ms), εξ ου και το όνομά του. Με άλλα λόγια, η αριθμητική τιμή που επιστρέφει αυτή η συνάρτηση όταν την συμπεριλάβετε στο σκίτσο σας είναι προσωρινά δεδομένα που εκφράζονται σε αυτήν τη μονάδα.

Πρέπει να γνωρίζετε ότι η μέγιστη τιμή αυτής της μεταβλητής είναι χωρίς υπογραφή πολύ, δηλαδή, πολύ χωρίς σημάδι. Αυτό είναι σημαντικό, επειδή εάν χρησιμοποιείται μικρότερο, μπορεί να προκύψουν προβλήματα λογικής. Επιπλέον, πρέπει να γνωρίζετε ότι μπορεί να διαρκέσει έως και 50 ημέρες (4.320.000.000 ms), μόλις φτάσει σε αυτήν την τιμή, θα επανεκκινήσει και θα ξεκινήσει ξανά από το μηδέν.

Ένα άλλο πράγμα που πρέπει να γνωρίζετε είναι ότι το millis λειτουργεί δεν χρησιμοποιεί παραμέτρους.

Άλλες προσωρινές λειτουργίες Arduino

Το Arduino έχει άλλες συναφείς με το χρόνο λειτουργίες που μπορείτε να χρησιμοποιήσετε στον κωδικό σας. Ένα από αυτά είναι η περίφημη καθυστέρηση (), αλλά υπάρχουν περισσότερα:

  • καθυστέρηση(): Είναι η πιο χρησιμοποιούμενη και κοινή από όλες τις λειτουργίες του Arduino. Χρησιμοποιεί επίσης χιλιοστά του δευτερολέπτου ως χιλιοστά (). Και θα είναι επίσης τύπου χωρίς υπογραφή, εκτός από το να μην έχει τιμή επιστροφής. Χρησιμοποιείται κυρίως για την εισαγωγή παύσεων στην εκτέλεση ενός προγράμματος, με πολλές εφαρμογές.
  • καθυστέρηση Μικροδευτερόλεπτα (): χρησιμοποιείται λιγότερο σε σκίτσα, σε αυτήν την περίπτωση εξακολουθεί να είναι χωρίς υπογραφή, χωρίς τιμή επιστροφής και στην περίπτωση αυτή χρησιμοποιεί μικροδευτερόλεπτα. Επί του παρόντος, μια μέγιστη τιμή μπορεί να επιτευχθεί με ακρίβεια 16383 και το ελάχιστο 3μs. Εάν πρέπει να χειριστείτε περιμένει περισσότερο από αυτό, συνιστάται να χρησιμοποιήσετε καθυστέρηση ().
  • μικρο (): επιστρέφει επίσης μια αριθμητική τιμή σε μικροδευτερόλεπτα (μs) από τότε που ο πίνακας Arduino άρχισε να εκτελεί το πρόγραμμα. Δηλαδή, είναι σαν millis (), αλλά με μια άλλη μονάδα. Στην πραγματικότητα, χρησιμοποιεί επίσης τον μη υπογεγραμμένο μακρύ τύπο και δεν χρησιμοποιεί παραμέτρους. Αλλά έχει κάποιες επιπλέον διαφορές, όπως επαναφέρει και ξεκινά από το μηδέν όταν φτάσει τα 70 λεπτά. Όσον αφορά την ανάλυσή του των 4 μs, ή με άλλα λόγια, η τιμή που επιστρέφει θα είναι πάντα πολλαπλάσιο των τεσσάρων (4, 8, 12, 16,…). Να θυμάστε ότι 1000 μs ισούται με 1 ms και 1.000.000 ισούται με 1 s.

Millis () παραδείγματα στο Arduino IDE

Στιγμιότυπο οθόνης Arduino IDE

Αυτές είναι όλες οι λέξεις και η καλύτερη προβολή της λειτουργίας millis () δείχνει μερικά παραδείγματα απλών σκίτσων Arduino IDE, ώστε να μπορείτε να δείτε μερικές εφαρμογές και περιπτώσεις χρήσης. Εδώ είναι μερικά πρακτικά παραδείγματα...

Μπορεί να χρησιμοποιηθεί με όλες οι σανίδες Arduino

1-Παράδειγμα για εξηγήστε τη χρήση από 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
}

Μετρήστε το χρόνο μεταξύ δύο σειριακών μηνυμάτων:

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

κάνω αναβοσβήνει ένα LED με χιλιοστά ():

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

Δημιουργήστε ένα απλό sequencer για να στείλετε κείμενο μέσω της σειριακής οθόνης σε διαφορετικά χρονικά διαστήματα χρησιμοποιώντας 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 - ");
}

Το γνωρίζετε ήδη για αυτό περισσότερο μπορείτε να κατεβάσετε το δωρεάν πρόγραμμα προγραμματισμού Arduino σε μορφή PDF.


Γίνε ο πρώτος που θα σχολιάσει

Αφήστε το σχόλιό σας

Η διεύθυνση email σας δεν θα δημοσιευθεί. Τα υποχρεωτικά πεδία σημειώνονται με *

*

*

  1. Υπεύθυνος για τα δεδομένα: Miguel Ángel Gatón
  2. Σκοπός των δεδομένων: Έλεγχος SPAM, διαχείριση σχολίων.
  3. Νομιμοποίηση: Η συγκατάθεσή σας
  4. Κοινοποίηση των δεδομένων: Τα δεδομένα δεν θα κοινοποιούνται σε τρίτους, εκτός από νομική υποχρέωση.
  5. Αποθήκευση δεδομένων: Βάση δεδομένων που φιλοξενείται από τα δίκτυα Occentus (ΕΕ)
  6. Δικαιώματα: Ανά πάσα στιγμή μπορείτε να περιορίσετε, να ανακτήσετε και να διαγράψετε τις πληροφορίες σας.