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 se možda čini apsurdnim i služi samo da se zna kada je ploča za kuhanje uključena, ali istina je da ima mnogo više praktičnih primjena.

Po 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đer se može koristiti 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), odakle mu i 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 nepotpisano dugo, odnosno dugo bez znaka. To je važno, jer ako se koristi manji, mogu se pojaviti logički problemi. Uz to, trebali biste znati da može trajati do 50 dana (4.320.000.000 ms), nakon što dosegne tu vrijednost, pokrenut će se i ponovno 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š:

  • odgoditi(): To je najčešće korištena i najčešća od svih Arduino funkcija. Također koristi milisekunde kao milisekunde (). Također će biti tipa unsigned long, osim što neće imati 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, a u 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 brojčanu vrijednost u mikrosekundama (μs) otkako je ploča Arduino započela s izvršavanjem programa. Odnosno, to je poput milisa (), ali s drugom jedinicom. Zapravo koristi i nepotpisani long tip, a ne koristi ni parametre. Ali ima neke dodatne razlike, poput one da se resetira i započinje s nule kad dosegne 70 minuta. Što se tiče njegove razlučivosti 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 jednako 1 s.

Primjeri Millis () u Arduino IDE-u

Snimka zaslona Arduino IDE-a

Sve su to riječi, a najbolji prikaz funkcije millis () prikazuje neke primjere jednostavnih Arduino IDE skica kako biste mogli vidjeti neke aplikacije i slučajeve upotrebe. Pa evo nekoliko 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);
     }
   }
}

Hacer trepnuti LED s 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
    }
}

Stvorite jednostavni 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 za više možete preuzeti besplatni tečaj programiranja Arduino u PDF-u.


Budite prvi koji će komentirati

Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  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 obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.