millis (): a h-uile dad a dh ’fheumas tu a bhith agad mu dhreuchd Arduino

Arduino UNO gnìomhan millis

Tha farsaingeachd de dhleastanasan aig Arduino airson obrachadh leotha thar ùine. Tha aon dhiubh millis (), stiùireadh a bheir dhut an ùine ann am milleanan-mara bhon a thèid bòrd Arduino a thionndadh air. Is dòcha gu bheil seo a ’coimhead neo-àbhaisteach, agus chan eil e ach a’ faighinn eòlas air cuin a chaidh an hob a thionndadh air, ach is e an fhìrinn gu bheil mòran a bharrachd thagraidhean practaigeach ann.

Le eisimpleir, faodar a chleachdadh gus dearbhadh dè an ùine a tha air a dhol seachad eadar dà thachartas no barrachd, seachain deasbad (breab) putan, msaa. Dh ’fhaodadh e cuideachd a bhith air a chleachdadh gus an ùine cur gu bàs a nochdadh aig ìrean riatanach den chòd, a’ dèanamh cinnteach gu bheil am prògram ag obair ann an àm fìor.

Gnìomh Millis ()

gnìomh millis Arduino

Mar a thuirt mi mu thràth, thathas a ’cleachdadh gnìomh Arduino millis gus ùine a thomhas, agus bidh e a’ dèanamh sin a-steach milliseconds (ms), mar sin an t-ainm. Ann am faclan eile, is e an luach àireamhach a thilleas an gnìomh seo nuair a chuireas tu a-steach e san sgeidse agad dàta sealach air a chuir an cèill san aonad sin.

Bu chòir dhut fios a bhith agad gu bheil an luach as motha aig an caochlaideach seo gun ainm fada, is e sin, fada gun soidhne. Tha seo cudromach, oir ma thèid fear nas lugha a chleachdadh, dh ’fhaodadh duilgheadasan loidsig tachairt. A bharrachd air an sin, bu chòir dhut fios a bhith agad gum faod e mairsinn suas ri 50 latha de ùine (4.320.000.000 ms), aon uair ‘s gu bheil e air an luach sin a ruighinn ath-thòiseachadh agus tòisichidh e a-rithist bho neoni.

Is e rud eile a dh ’fheumas a bhith agad gu bheil gnìomh na millis nach eil a ’cleachdadh pharamadairean.

Dreuchdan sealach eile Arduino

Tha gnìomhan eile co-cheangailte ri ùine aig Arduino airson an cleachdadh sa chòd agad. Tha aon dhiubh an dàil ainmeil (), ach tha barrachd ann:

  • dàil (): Is e am fear as cumanta agus as cumanta de na gnìomhan Arduino gu lèir. Bidh e cuideachd a ’cleachdadh milliseconds mar millis (). Agus bidh e cuideachd de sheòrsa gun ainm fada, a bharrachd air nach bi luach tilleadh ann. Tha e air a chleachdadh sa mhòr-chuid gus stadan a thoirt a-steach ann an coileanadh prògram, le mòran thagraidhean.
  • dàilMicroseconds (): air a chleachdadh nas lugha ann an sgeidsichean, anns a ’chùis seo tha e fhathast gun ainm fada, gun luach tilleadh, agus anns a’ chùis seo bidh e a ’cleachdadh microseconds. An-dràsta, faodar luach as àirde a choileanadh le mionaideachd 16383, agus 3μs aig a ’char as lugha. Ma dh ’fheumas tu feitheamh feitheamh nas fhaide na sin, thathas a’ moladh dàil () a chleachdadh.
  • micros (): cuideachd a ’tilleadh luach àireamhach ann am microseconds (μs) bho thòisich bòrd Arduino a’ coileanadh a ’phrògraim. Is e sin, tha e coltach ri millis (), ach le aonad eile. Gu dearbh, bidh e cuideachd a ’cleachdadh an seòrsa fada gun ainm agus cha bhith e a’ cleachdadh paramadairean an dàrna cuid. Ach tha beagan eadar-dhealachaidhean a bharrachd aige, leithid gum bi e ag ath-shuidheachadh agus a ’tòiseachadh bho neoni nuair a ruigeas e 70 mionaid. A thaobh an rùn aige de 4 μs, no ann am faclan eile, bidh an luach a thilleas e an-còmhnaidh iomadach de cheithir (4, 8, 12, 16,…). Cuimhnich gu bheil 1000 μs co-ionann ri 1 ms agus 1.000.000 co-ionann ri 1 s.

Eisimpleirean Millis () ann an Arduino IDE

Glacadh-sgrìn de Arduino IDE

Tha iad sin uile nam faclan, agus tha an sealladh as fheàrr de dhreuchd millis () a ’sealltainn cuid de eisimpleirean de sgeidsichean sìmplidh Arduino IDE gus am faic thu cuid de thagraidhean agus cùisean a chleachdadh. Mar sin, seo cuid eisimpleirean practaigeach...

Faodar a chleachdadh le a h-uile bòrd Arduino

1-Eisimpleir airson mìnich an cleachdadh bho millis ():

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
}

Tomhais an ùine eadar dà theachdaireachd sreathach:

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

Dèan blink LED le millis ():

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

Cruthaich seicheadair sìmplidh gus teacsa a chuir tron ​​sgrùdair sreathach aig amannan eadar-dhealaichte a ’cleachdadh millis ():

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

Tha fios agad mu thràth airson barrachd fiosrachaidh faodaidh tu an cùrsa prògramadh Arduino an-asgaidh ann an PDF.


Tha susbaint an artaigil a ’cumail ri na prionnsapalan againn de moraltachd deasachaidh. Gus aithris a dhèanamh air mearachd cliog an seo.

Bi a 'chiad fhear a thog beachd

Fàg do bheachd

Seòladh-d cha tèid fhoillseachadh. Feum air achaidhean air an comharrachadh le *

*

*

  1. Uallach airson an dàta: Miguel Ángel Gatón
  2. Adhbhar an dàta: Smachd air SPAM, riaghladh bheachdan.
  3. Dìleab: Do chead
  4. Conaltradh an dàta: Cha tèid an dàta a thoirt do threas phàrtaidhean ach a-mhàin fo dhleastanas laghail.
  5. Stòradh dàta: Stòr-dàta air a chumail le Occentus Networks (EU)
  6. Còraichean: Aig àm sam bith faodaidh tu am fiosrachadh agad a chuingealachadh, fhaighinn air ais agus a dhubhadh às.