millis (): kaikki mitä sinun tarvitsee tietää Arduino-toiminnosta

Arduino UNO millis-toiminnot

Arduinolla on hyvä valikoima toimintoja, joita voidaan käyttää ajan mittaan. Yksi niistä on millis (), ohje, joka antaa sinulle ajan millisekunteina Arduino-kortin käynnistämisen jälkeen. Tämä saattaa tuntua järjetöntä, ja se paljastaa vain tiedon siitä, milloin keittotaso kytkettiin päälle, mutta totuus on, että sillä on paljon käytännön sovelluksia.

Mukaan ejemplo, sitä voidaan käyttää kahden tai useamman tapahtuman välisen ajan määrittämiseen, napin poistamisen välttämiseen jne. Sitä voidaan käyttää myös suorittamisajan näyttämiseen koodin kriittisissä vaiheissa varmistaen, että ohjelma toimii reaaliajassa.

Millis () -funktio

millis-toiminto Arduino

Kuten jo mainitsin, Arduino millis -toimintoa käytetään ajan mittaamiseen, ja se tekee sen sisään millisekuntia (ms), joten sen nimi. Toisin sanoen numeerinen arvo, jonka tämä toiminto palauttaa, kun sisällytät sen luonnokseesi, on väliaikainen tieto, joka ilmaistaan ​​kyseisessä yksikössä.

Sinun tulisi tietää, että tämän muuttujan enimmäisarvo on allekirjoittamaton pitkä, eli kauan ilman merkkiä. Tämä on tärkeää, koska jos käytetään pienempää, loogisia ongelmia saattaa ilmetä. Lisäksi sinun on tiedettävä, että se voi kestää jopa 50 päivää (4.320.000.000 XNUMX XNUMX XNUMX ms), kun arvo on saavutettu, se käynnistyy uudelleen ja alkaa uudelleen nollasta.

Toinen asia, joka sinun on tiedettävä, on, että millit toimivat ei käytä parametreja.

Muut väliaikaiset Arduino-toiminnot

Arduinolla on muita aikakohtaisia ​​toimintoja, joita voit käyttää koodissasi. Yksi niistä on kuuluisa viive (), mutta on enemmän:

  • viive(): Se on yleisimmin käytetty ja yleisin kaikista Arduino-toiminnoista. Se käyttää myös millisekunteja millisekunteina (). Ja se on myös tyypiltään allekirjoittamaton pitkä, sen lisäksi, että sillä ei ole palautusarvoa. Sitä käytetään pääasiassa taukojen asettamiseen ohjelman suorittamiseen, monilla sovelluksilla.
  • viiveMikrosekunnit (): on vähemmän käytetty luonnoksissa, tässä tapauksessa se on silti allekirjoittamaton pitkä, ilman palautusarvoa, ja tässä tapauksessa se käyttää mikrosekuntia. Tällä hetkellä enimmäisarvo voidaan saavuttaa tarkkuudella 16383 ja vähintään 3μs. Jos joudut käsittelemään odotuksia pidempään, on suositeltavaa käyttää viivettä ().
  • mikrot (): palauttaa myös numeerisen arvon mikrosekunteina (μs) Arduino-kortin aloittamisen jälkeen. Eli se on kuin millis (), mutta toisen yksikön kanssa. Itse asiassa se käyttää myös allekirjoittamatonta pitkää tyyppiä eikä se käytä parametreja. Mutta sillä on joitain lisäeroja, kuten se, että se nollautuu ja alkaa nollasta, kun se saavuttaa 70 minuuttia. Mitä tulee 4 μs: n tarkkuuteen tai toisin sanoen, sen palauttama arvo on aina neljän (4, 8, 12, 16,…) kerroin. Muista, että 1000 μs on yhtä ms ja 1 1.000.000 1 yhtä sekuntia.

Millis () -esimerkkejä Arduino IDE: ssä

Näyttökuva Arduino IDE: stä

Nämä ovat kaikki sanat, ja millis () -funktion paras näkymä näyttää joitain esimerkkejä yksinkertaisista Arduino IDE -piirroksista, jotta voit nähdä joitain sovelluksia ja käyttötapauksia. Joten tässä on joitain käytännön esimerkkejä...

Voidaan käyttää kaikki Arduino-levyt

1-esimerkki selitä käyttö millisistä ():

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
}

Mittaa kahden sarjasanoman välinen aika:

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 vilkkuu LED millisillä ():

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

Luo a yksinkertainen sekvensseri lähettää tekstiä sarjamonitorin kautta eri aikavälein millis (): llä:

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

Tiedät sen jo Más información voit ladata ilmainen Arduino-ohjelmointikurssi PDF-muodossa.


Ole ensimmäinen kommentti

Jätä kommentti

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

*

*

  1. Vastuussa tiedoista: Miguel Ángel Gatón
  2. Tietojen tarkoitus: Roskapostin hallinta, kommenttien hallinta.
  3. Laillistaminen: Suostumuksesi
  4. Tietojen välittäminen: Tietoja ei luovuteta kolmansille osapuolille muutoin kuin lain nojalla.
  5. Tietojen varastointi: Occentus Networks (EU) isännöi tietokantaa
  6. Oikeudet: Voit milloin tahansa rajoittaa, palauttaa ja poistaa tietojasi.