milis (): viskas, ką reikia žinoti apie „Arduino“ funkciją

Arduino UNO milis funkcijos

„Arduino“ turi gerą funkcijų, su kuriomis galima dirbti, repertuarą. Vienas jų yra milis (), instrukcija, nurodanti laiką milisekundėmis nuo „Arduino“ plokštės įjungimo. Tai gali atrodyti absurdiška ir tai naudinga žinoti tik tada, kai viryklė buvo įjungta, tačiau tiesa ta, kad ji yra daug praktiškesnė.

Pagal ejemplo, jis gali būti naudojamas nustatyti laiką, kuris praėjo tarp dviejų ar daugiau įvykių, išvengti mygtuko atšokimo (atmetimo) ir kt. Jis taip pat gali būti naudojamas vykdymo laikui parodyti kritiniuose kodo etapuose, užtikrinant, kad programa veiktų realiu laiku.

„Millis“ () funkcija

milis funkcija Arduino

Kaip jau minėjau, laiko matavimui naudojama „Arduino millis“ funkcija, kuri tai daro milisekundės (ms), taigi ir jo pavadinimas. Kitaip tariant, skaitinė vertė, kurią grąžina ši funkcija, kai ją įtraukiate į eskizą, yra laikini duomenys, išreikšti tame vienete.

Turėtumėte žinoti, kad didžiausia šio kintamojo vertė yra nepasirašytas ilgas, tai yra ilgai be ženklo. Tai svarbu, nes jei naudojamas mažesnis, gali kilti logikos problemų. Be to, turėtumėte žinoti, kad jis gali trukti iki 50 dienų (4.320.000.000 XNUMX XNUMX XNUMX ms), kai pasieks šią vertę, jis bus paleistas iš naujo ir vėl prasidės nuo nulio.

Kitas dalykas, kurį turite žinoti, yra tai, kad milis veikia nenaudoja parametrų.

Kitos laikinos „Arduino“ funkcijos

„Arduino“ turi kitas su laiku susijusias funkcijas, kurias galite naudoti savo kode. Vienas jų yra garsus vėlavimas (), bet yra ir daugiau:

  • delsimas(): Tai yra dažniausiai naudojama ir įprasta iš visų „Arduino“ funkcijų. Jis taip pat naudoja milisekundes kaip milis (). Be to, jis neturės ilgo parašo, be grąžinimo vertės. Jis daugiausia naudojamas norint įvesti programos vykdymo pauzes su daugybe programų.
  • delsos mikrosekundės (): yra mažiau naudojamas eskizuose, šiuo atveju jis vis dar nepasirašytas ilgas, be grąžinimo vertės ir šiuo atveju naudoja mikrosekundes. Šiuo metu maksimalią vertę galima pasiekti tikslumu 16383, o mažiausia - 3μs. Jei turite laukti ilgiau nei laukiama, rekomenduojama naudoti atidėjimą ().
  • mikros (): taip pat pateikia skaitinę vertę mikrosekundėmis (μs) nuo tada, kai „Arduino“ plokštė pradėjo vykdyti programą. Tai yra, tai yra kaip milis (), bet su kitu vienetu. Tiesą sakant, jis taip pat naudoja nepasirašytą ilgą tipą ir nenaudoja parametrų. Bet jis turi keletą papildomų skirtumų, pavyzdžiui, kad jis atstato ir prasideda nuo nulio, kai pasiekia 70 minučių. Kalbant apie 4 μs skiriamąją gebą arba, kitaip tariant, jos grąžinta vertė visada bus keturių (4, 8, 12, 16,…) kartotinė. Atminkite, kad 1000 μs yra lygus 1 ms, o 1.000.000 1 XNUMX - XNUMX s.

„Millis“ () pavyzdžiai „Arduino IDE“

„Arduino IDE“ ekrano kopija

Tai visi žodžiai, o geriausias „Millis“ () funkcijos vaizdas yra rodant keletą paprastų „Arduino IDE“ eskizų pavyzdžių, kad galėtumėte pamatyti kai kurias programas ir naudojimo atvejus. Taigi čia yra keletas praktiniai pavyzdžiai...

Galima naudoti su visos „Arduino“ lentos

1 pavyzdys paaiškinti naudojimą nuo 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
}

Išmatuokite laiką tarp dviejų serijinių pranešimų:

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

Padaryti mirksi šviesos diodas su milis ():

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

Sukurti a paprastas sekvenceris siųsti tekstą per serijinį monitorių skirtingais laiko intervalais, naudojant 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 - ");
}

Jūs tai jau žinote más información galite atsisiųsti nemokamas „Arduino“ programavimo kursas PDF formatu.


Būkite pirmas, kuris pakomentuos

Palikite komentarą

Jūsų elektroninio pašto adresas nebus skelbiamas. Privalomi laukai yra pažymėti *

*

*

  1. Atsakingas už duomenis: Miguel Ángel Gatón
  2. Duomenų paskirtis: kontroliuoti šlamštą, komentarų valdymą.
  3. Įteisinimas: jūsų sutikimas
  4. Duomenų perdavimas: Duomenys nebus perduoti trečiosioms šalims, išskyrus teisinius įsipareigojimus.
  5. Duomenų saugojimas: „Occentus Networks“ (ES) talpinama duomenų bazė
  6. Teisės: bet kuriuo metu galite apriboti, atkurti ir ištrinti savo informaciją.