millis (): vse, kar morate vedeti o funkciji Arduino

Arduino UNO milis funkcije

Arduino ima dober repertoar funkcij, s katerimi lahko sčasoma delate. Eden izmed njih je milis (), navodilo, ki vam daje čas v milisekundah od vklopa plošče Arduino. To se morda zdi absurdno in služi le temu, da vemo, kdaj je bila plošča vklopljena, resnica pa je, da ima veliko več praktičnih aplikacij.

Z ejemplo, lahko se uporablja za določanje časa, ki je pretekel med dvema ali več dogodki, izogibanje odklopu (odboju) gumba itd. Lahko tudi služi za prikaz časa izvajanja v kritičnih fazah kode, s čimer zagotavlja, da program deluje v realnem času.

Funkcija Millis ()

milis funkcija Arduino

Kot sem že omenil, se funkcija Arduino millis uporablja za merjenje časa in to počne v milisekunde (ms), od tod tudi njegovo ime. Z drugimi besedami, številska vrednost, ki jo ta funkcija vrne, ko jo vključite v skico, je začasni podatek, izražen v tej enoti.

Vedeti morate, da je največja vrednost te spremenljivke nepodpisano dolgo, torej dolgo brez znaka. To je pomembno, kajti če uporabimo manjšega, lahko pride do težav z logiko. Poleg tega morate vedeti, da lahko traja do 50 dni (4.320.000.000 ms), ko doseže to vrednost, se bo znova zagnal in začel z nič.

Še ena stvar, ki jo morate vedeti, je, da deluje milis ne uporablja parametrov.

Druge začasne funkcije Arduino

Arduino ima druge funkcije, povezane s časom, ki jih lahko uporabite v svoji kodi. Eden izmed njih je slavna zamuda (), vendar obstaja še več:

  • zamuda (): Je najbolj uporabljena in najpogostejša od vseh funkcij Arduino. Milisekunde uporablja tudi kot milisekunde (). Poleg tega ne bo imel vrnjene vrednosti, bo tudi tipa unsigned long. Uporablja se predvsem za uvajanje premorov pri izvajanju programa s številnimi aplikacijami.
  • delayMicroseconds (): v skicah se manj uporablja, v tem primeru je še vedno nepodpisan dolgo, brez vrnjene vrednosti, v tem primeru pa uporablja mikrosekunde. Trenutno je mogoče doseči največjo vrednost z natančnostjo 16383 in najmanj 3 μs. Če morate čakanje obravnavati dlje od tega, je priporočljivo uporabiti delay ().
  • mikro (): vrne tudi številčno vrednost v mikrosekundah (μs), odkar je plošča Arduino začela izvajati program. To pomeni, da je kot milis (), vendar z drugo enoto. Pravzaprav uporablja tudi nepodpisani dolgi tip in tudi ne uporablja parametrov. Ima pa nekaj dodatnih razlik, na primer, da se ponastavi in ​​začne od nič, ko doseže 70 minut. Glede na ločljivost 4 μs ali z drugimi besedami bo vrednost, ki jo vrne, vedno večkratnik štirih (4, 8, 12, 16,…). Ne pozabite, da je 1000 μs enako 1 ms in 1.000.000 1 s.

Primeri Millis () v Arduino IDE

Posnetek zaslona Arduino IDE

To so vse besede, najboljši pogled funkcije millis () pa prikazuje nekaj primerov preprostih skic Arduino IDE, tako da lahko vidite nekatere aplikacije in primere uporabe. Torej, tukaj je nekaj praktični primeri...

Se lahko uporablja z vse plošče Arduino

1-primer za razložite uporabo od 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
}

Izmerite čas med dvema zaporednima sporočiloma:

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

Storite utripa LED z milisami ():

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

Ustvarite preprost sekvencer za pošiljanje besedila skozi serijski monitor v različnih časovnih intervalih z uporabo milis ():

#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 že veste za más información lahko prenesete brezplačni tečaj programiranja Arduino v PDF.


Bodite prvi komentar

Pustite svoj komentar

Vaš e-naslov ne bo objavljen. Obvezna polja so označena z *

*

*

  1. Za podatke odgovoren: Miguel Ángel Gatón
  2. Namen podatkov: Nadzor neželene pošte, upravljanje komentarjev.
  3. Legitimacija: Vaše soglasje
  4. Sporočanje podatkov: Podatki se ne bodo posredovali tretjim osebam, razen po zakonski obveznosti.
  5. Shranjevanje podatkov: Zbirka podatkov, ki jo gosti Occentus Networks (EU)
  6. Pravice: Kadar koli lahko omejite, obnovite in izbrišete svoje podatke.