millis (): sve što trebate znati o funkciji Arduino

Arduino UNO milis funkcije

Arduino ima dobar repertoar funkcija za rad s vremenom. Jedan od njih je milis (), uputa koja vam daje vrijeme u milisekundama od uključivanja ploče Arduino. To može izgledati apsurdno i da služi samo za saznanje kada je ploča uključena, ali istina je da ima mnogo više praktičnih primjena.

por ejemplo, može se koristiti za određivanje vremena koje je proteklo između dva ili više događaja, izbjegavanje otkazivanja (odbijanja) gumba itd. Takođe bi mogao poslužiti za prikaz vremena izvršenja u kritičnim fazama koda, osiguravajući da program radi u stvarnom vremenu.

Funkcija Millis ()

milis funkcija Arduino

Kao što sam već spomenuo, funkcija Arduino millis koristi se za mjerenje vremena i to u milisekunde (ms), otuda i njegovo ime. Drugim riječima, numerička vrijednost koju ova funkcija vraća kada je uključite u skicu privremeni su podaci izraženi u toj jedinici.

Trebali biste znati da je maksimalna vrijednost ove varijable bez potpisa dugo, odnosno dugo bez znaka. Ovo je važno, jer ako se koristi manji, mogu se pojaviti logički problemi. Pored toga, trebali biste znati da može trajati do 50 dana (4.320.000.000 ms), nakon što dostigne tu vrijednost, ponovo će se pokrenuti i početi od nule.

Još jedna stvar koju morate znati je da milis funkcionira ne koristi parametre.

Ostale privremene funkcije Arduina

Arduino ima druge funkcije povezane s vremenom koje možete koristiti u svom kodu. Jedan od njih je poznato kašnjenje (), ali postoji još:

  • kašnjenje (): To je najčešće korištena i najčešća od svih Arduino funkcija. Takođe koristi milisekunde kao milisekunde (). Također će biti tipa unsigned long, kao i da nema povratnu vrijednost. Koristi se uglavnom za uvođenje pauza u izvršavanju programa, s mnogim aplikacijama.
  • delayMicroseconds (): manje se koristi u skicama, u ovom je slučaju još uvijek nepotpisan dugo, bez povratne vrijednosti, au ovom slučaju koristi mikrosekunde. Trenutno se maksimalna vrijednost može postići s preciznošću od 16383, a minimalna od 3 μs. Ako morate rješavati čekanja duža od toga, preporučuje se korištenje delay ().
  • mikro (): također vraća numeričku vrijednost u mikrosekundama (μs) otkako je Arduino ploča započela s izvršavanjem programa. Odnosno, to je poput milisa (), ali s drugom jedinicom. U stvari, koristi i nepotpisani long tip, a ne koristi ni parametre. Ali ima neke dodatne razlike, poput one da se resetira i započinje od nule kad dostigne 70 minuta. Što se tiče njegove rezolucije od 4 μs, ili drugim riječima, vrijednost koju vraća uvijek će biti višestruka od četiri (4, 8, 12, 16, ...). Zapamtite da je 1000 μs jednako 1 ms, a 1.000.000 1 s.

Primjeri Millis () u Arduino IDE-u

Snimak ekrana Arduino IDE-a

Sve su to riječi, a kako milis () funkcija najbolje izgleda tako što prikazuje neke primjere jednostavnih Arduino IDE skica kako biste mogli vidjeti neke aplikacije i slučajeve upotrebe. Dakle, evo nekih praktični primjeri...

Može se koristiti sa sve Arduino ploče

1-Primjer za objasniti upotrebu od milisa ():

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
}

Izmjerite vrijeme između dvije serijske poruke:

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

Napravi trepće LED sa milisima ():

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

Kreiraj a jednostavan sekvencer za slanje teksta kroz serijski monitor u različitim vremenskim intervalima pomoću milisa ():

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

To već znate više informacija možete preuzeti besplatni kurs Arduino programiranja u PDF-u.


Budite prvi koji komentarišete

Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.