millis (): gach rud atá uait ar fheidhm Arduino

Arduino UNO feidhmeanna millis

Tá stór maith feidhmeanna ag Arduino le bheith ag obair leo le himeacht ama. Tá ceann acu millis (), treoir a thugann an t-am duit i milleasoicindí ó chasadh bord Arduino air. B’fhéidir go bhfuil cuma áiféiseach air seo, agus nach mbíonn a fhios aige ach cathain a chasadh an hob air, ach is í an fhírinne ná go bhfuil go leor feidhmchlár níos praiticiúla aige.

De réir ejemplo, is féidir é a úsáid chun an t-am atá caite idir dhá imeacht nó níos mó a chinneadh, seachain an preab (preab) cnaipe, srl. D’fhéadfadh sé freisin an t-am forghníomhaithe a thaispeáint i gcéimeanna criticiúla den chód, ag cinntiú go n-oibríonn an clár i bhfíor-am.

Feidhm Millis ()

feidhm millis Arduino

Mar a luaigh mé cheana, úsáidtear feidhm Arduino millis chun am a thomhas, agus déanann sé amhlaidh i milleasoicindí (ms), mar sin a ainm. Is é sin le rá, sonraí sealadacha a chuirtear in iúl san aonad sin an luach uimhriúil a fhilleann ar an bhfeidhm seo nuair a chuireann tú san áireamh é i do sceitse.

Ba chóir go mbeadh a fhios agat gurb é uasluach na hathróg seo gan síniú fada, is é sin, fada gan chomhartha. Tá sé seo tábhachtach, mar má úsáidtear ceann níos lú, d’fhéadfadh fadhbanna loighic tarlú. Ina theannta sin, ba chóir go mbeadh a fhios agat go bhféadfadh sé maireachtáil suas le 50 lá (4.320.000.000 ms), a luaithe a shroichfidh sé an luach sin atosóidh sé agus tosóidh sé arís ó nialas.

Rud eile a chaithfidh a bheith ar eolas agat ná go bhfeidhmíonn an millis nach n-úsáideann paraiméadair.

Feidhmeanna sealadacha Arduino eile

Tá feidhmeanna eile ag Arduino a bhaineann le ham chun tú a úsáid i do chód. Tá ceann acu an mhoill cháiliúil (), ach tá níos mó ann:

  • moill (): Is é an ceann is mó a úsáidtear agus is coitianta de na feidhmeanna Arduino go léir. Úsáideann sé milleasoicindí freisin mar millis (). Agus beidh sé de chineál gan síniú fada freisin, chomh maith le gan luach toraidh a bheith aige. Úsáidtear go príomha é chun sosanna a thabhairt isteach i gcur i bhfeidhm clár, le go leor iarratas.
  • moillMicroseconds (): ní úsáidtear níos lú é i sceitsí, sa chás seo tá sé fós gan síniú fada, gan aon luach toraidh, agus sa chás seo úsáideann sé micrea-chumhachtaí. Faoi láthair, is féidir uasluach a bhaint amach le cruinneas 16383, agus íosmhéid 3μs. Má tá ort fanacht níos faide ná sin a láimhseáil, moltar moill () a úsáid.
  • micrea (): tugann sé luach uimhriúil ar ais i micrea-chumhachtaí (μs) freisin ó thosaigh bord Arduino ag feidhmiú an chláir. Is é sin, tá sé cosúil le millis (), ach le haonad eile. Déanta na fírinne, úsáideann sé an cineál fada gan síniú agus ní úsáideann sé paraiméadair ach an oiread. Ach tá roinnt difríochtaí breise aige, mar shampla go ndéanann sé athshocrú agus tosú ó nialas nuair a shroicheann sé 70 nóiméad. Maidir lena rún de 4 μs, nó i bhfocail eile, beidh an luach a fhilleann sé iolraithe de cheithre i gcónaí (4, 8, 12, 16,…). Cuimhnigh go bhfuil 1000 μs cothrom le 1 ms agus 1.000.000 cothrom le 1 s.

Samplaí Millis () in Arduino IDE

Gabháil scáileáin de Arduino IDE

Is focail iad seo go léir, agus is é an radharc is fearr ar an bhfeidhm millis () trí roinnt samplaí de sceitsí simplí a thaispeáint san Arduino IDE ionas gur féidir leat roinnt feidhmchlár a fheiceáil agus cásanna a úsáid. Mar sin, seo roinnt samplaí praiticiúla...

Is féidir é a úsáid le gach bord Arduino

1-Sampla do mínigh an úsáid ó 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 t-am idir dhá shraithuimhir:

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

Cruthaigh a seicheamhóir simplí téacs a sheoladh tríd an monatóir sraitheach ag eatraimh ama éagsúla ag úsáid 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 - ");
}

Tá a fhios agat cheana féin le haghaidh tuilleadh eolais is féidir leat an cúrsa cláraithe Arduino saor in aisce i bhformáid PDF.


Cloíonn ábhar an ailt lenár bprionsabail eitic eagarthóireachta. Chun earráid a thuairisciú cliceáil anseo.

Bí ar an chéad trácht

Fág do thrácht

Ní thabharfar do sheoladh r-phoist a fhoilsiú. Réimsí riachtanacha atá marcáilte le *

*

*

  1. Freagrach as na sonraí: Miguel Ángel Gatón
  2. Cuspóir na sonraí: SPAM a rialú, bainistíocht trácht.
  3. Legitimation: Do thoiliú
  4. Na sonraí a chur in iúl: Ní chuirfear na sonraí in iúl do thríú páirtithe ach amháin trí oibleagáid dhlíthiúil.
  5. Stóráil sonraí: Bunachar sonraí arna óstáil ag Occentus Networks (EU)
  6. Cearta: Tráth ar bith is féidir leat do chuid faisnéise a theorannú, a aisghabháil agus a scriosadh.