millis (): gjithçka që duhet të dini në lidhje me funksionin Arduino

Arduino UNO funksionet milis

Arduino ka një repertor të mirë funksionesh për të punuar me kalimin e kohës. Një prej tyre është milis (), një udhëzim që ju jep kohën në milisekonda që kur bordi Arduino është i ndezur. Kjo mund të duket absurde dhe shërben vetëm për të ditur se kur është ndezur pllaka, por e vërteta është se ajo ka shumë më shumë zbatime praktike.

Por Ejemplo, mund të përdoret për të përcaktuar kohën që ka kaluar midis dy ose më shumë ngjarjeve, për të shmangur zbritjen (kërcimin) e një butoni, etj. Mund të përdoret gjithashtu për të treguar kohën e ekzekutimit në fazat kritike të kodit, duke siguruar që programi të funksionojë në kohë reale.

Funksioni Millis ()

funksioni milis Arduino

Siç e kam përmendur tashmë, funksioni Arduino millis përdoret për të matur kohën, dhe kjo e bën në milisekonda (ms), prandaj dhe emri i saj. Me fjalë të tjera, vlera numerike që kthen funksionin kur e përfshini në skicën tuaj është një e dhënë e përkohshme e shprehur në atë njësi.

Duhet ta dini se vlera maksimale e kësaj ndryshore është i nënshkruar gjatë, që është, gjatë pa shenjë. Kjo është e rëndësishme, sepse nëse përdoret një më e vogël, mund të ndodhin probleme logjike. Për më tepër, duhet të dini se mund të zgjasë deri në 50 ditë (4.320.000.000 ms), pasi të ketë arritur atë vlerë do të riniset dhe do të fillojë përsëri nga zero.

Një tjetër gjë që duhet të dini është se funksioni i milisit nuk përdor parametra.

Funksione të tjera të përkohshme të Arduino

Arduino ka funksione të tjera të lidhura me kohën që ju t'i përdorni në kodin tuaj. Një prej tyre është vonesa e famshme (), por ka më shumë:

  • vonesë (): Theshtë më e përdorura dhe e zakonshme nga të gjitha funksionet Arduino. Ai gjithashtu përdor milisekonda si milis (). Dhe gjithashtu do të jetë i tipit i nënshkruar gjatë, përveç që nuk do të ketë një vlerë kthyese. Përdoret kryesisht për të futur pauza në ekzekutimin e një programi, me shumë aplikacione.
  • vonesaMikrosekonda (): përdoret më pak në skica, në këtë rast është akoma e nënshkruar gjatë, pa vlerë kthyese, dhe në këtë rast përdor mikrosekonda. Aktualisht, një vlerë maksimale mund të arrihet me saktësi prej 16383, dhe minimumin prej 3μs. Nëse duhet të trajtoni pritje më të gjata se kaq, rekomandohet të përdorni vonesë ().
  • mikro (): gjithashtu kthen një vlerë numerike në mikrosekonda (μs) që kur bordi Arduino filloi ekzekutimin e programit. Kjo është, është si milis (), por me një njësi tjetër. Në fakt, ai gjithashtu përdor llojin e gjatë të nënshkruar dhe nuk përdor as parametrat. Por ka disa ndryshime shtesë, siç është ajo që rivendoset dhe fillon nga zero kur arrin 70 minuta. Lidhur me rezolucionin e tij prej 4 μs, ose me fjalë të tjera, vlera që ajo kthen do të jetë gjithmonë një shumëfish i katër (4, 8, 12, 16,…). Mos harroni se 1000 μs është e barabartë me 1 ms dhe 1.000.000 është e barabartë me 1 s.

Shembuj të Millis () në Arduino IDE

Foto nga Arduino IDE

Këto janë të gjitha fjalë, dhe pamja më e mirë e funksionit millis () tregon disa shembuj të skicave të thjeshta Arduino IDE, në mënyrë që të shihni disa aplikacione dhe të përdorni raste. Kështu që këtu janë disa shembuj praktikë...

Mund të përdoret me të gjitha bordet Arduino

1-Shembull për të shpjegojë përdorimin nga 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
}

Matni kohën ndërmjet dy mesazheve serike:

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

bëj hap një LED me 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
    }
}

Krijoni një sekuencues i thjeshtë për të dërguar tekst përmes monitorit serik në interval të ndryshëm kohor duke përdorur 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 - ");
}

Ju tashmë e dini se për më shumë informacion ju mund të shkarkoni kurs falas i programimit Arduino në PDF.


Bëhu i pari që komenton

Lini komentin tuaj

Adresa juaj e emailit nuk do të publikohet. Fusha e kërkuar janë shënuar me *

*

*

  1. Përgjegjës për të dhënat: Miguel Ángel Gatón
  2. Qëllimi i të dhënave: Kontrolloni SPAM, menaxhimin e komenteve.
  3. Legjitimimi: Pëlqimi juaj
  4. Komunikimi i të dhënave: Të dhënat nuk do t'u komunikohen palëve të treta përveç me detyrim ligjor.
  5. Ruajtja e të dhënave: Baza e të dhënave e organizuar nga Occentus Networks (BE)
  6. Të drejtat: Në çdo kohë mund të kufizoni, rikuperoni dhe fshini informacionin tuaj.