millis (): dak kollu li għandek bżonn tkun taf dwar il-funzjoni Arduino

Arduino UNO funzjonijiet millis

Arduino għandu repertorju tajjeb ta 'funzjonijiet biex jaħdem maż-żmien. Waħda minnhom hija millis (), struzzjoni li tagħtik il-ħin f'millisekondi minn meta l-bord Arduino huwa mixgħul. Dan jista 'jidher assurd, u jservi biss biex tkun taf meta nxtegħel il-hob, iżda l-verità hi li għandha ħafna iktar applikazzjonijiet prattiċi.

Por eżempju, jista 'jintuża biex jiddetermina l-ħin li jkun għadda bejn żewġ avvenimenti jew aktar, jevita d-debounce (bounce) ta' buttuna, eċċ. Jista 'jintuża wkoll biex juri l-ħin ta' eżekuzzjoni fi stadji kritiċi tal-kodiċi, u jiżgura li l-programm jaħdem f'ħin reali.

Funzjoni Millis ()

funzjoni millis Arduino

Kif diġà semmejt, il-funzjoni Arduino millis tintuża biex tkejjel il-ħin, u tagħmel hekk fi millisekondi (ms), minn hawn ismu. Fi kliem ieħor, il-valur numeriku li din il-funzjoni tirritorna meta tinkludiha fl-iskeċċ tiegħek hija data temporanja espressa f'dik l-unità.

Għandek tkun taf li l-valur massimu ta 'din il-varjabbli huwa twil mhux iffirmat, jiġifieri, twil mingħajr sinjal. Dan huwa importanti, għax jekk tintuża waħda iżgħar, jistgħu jseħħu problemi ta 'loġika. Barra minn hekk, għandek tkun taf li jista 'jdum sa 50 jum (4.320.000.000 ms), ladarba jkun laħaq dak il-valur jerġa' jibda u jerġa 'jibda minn żero.

Ħaġa oħra li għandek tkun taf hija li l-funzjoni millis ma jużax parametri.

Funzjonijiet Arduino temporanji oħra

Arduino għandu funzjonijiet oħra relatati mal-ħin biex tużahom fil-kodiċi tiegħek. Waħda minnhom hija il-famuż dewmien (), imma hemm iktar:

  • dewmien (): Hija l-aktar użata u komuni mill-funzjonijiet kollha ta 'Arduino. Juża wkoll millisekondi bħala millis (). U jkun ukoll tat-tip mhux iffirmat twil, minbarra li ma jkollux valur ta 'ritorn. Jintuża prinċipalment biex jintroduċi pawżi fl-eżekuzzjoni ta 'programm, b'ħafna applikazzjonijiet.
  • delayMicroseconds (): jintuża inqas fl-iskeċċijiet, f'dan il-każ għadu mhux iffirmat twil, mingħajr valur ta 'ritorn, u f'dan il-każ juża mikrosekondi. Bħalissa, valur massimu jista 'jinkiseb bi preċiżjoni ta' 16383, u l-minimu ta '3μs. Jekk għandek tieħu ħsieb tistenna itwal minn dak, huwa rrakkomandat li tuża dewmien ().
  • mikros (): jirritorna wkoll valur numeriku f'mikrosekondi (μs) minn meta l-bord Arduino beda jeżegwixxi l-programm. Jiġifieri, huwa bħal millis (), iżda ma 'unità oħra. Fil-fatt, juża wkoll it-tip twil mhux iffirmat u lanqas juża parametri. Iżda għandu xi differenzi addizzjonali, bħal li jerġa 'jibda u jibda minn żero meta jilħaq is-70 minuta. Rigward ir-riżoluzzjoni tiegħu ta '4 μs, jew fi kliem ieħor, il-valur li jirritorna dejjem ikun multiplu ta' erba '(4, 8, 12, 16, ...). Ftakar li 1000 μs huwa ugwali għal 1 ms u 1.000.000 huwa ugwali għal 1 s.

Millis () eżempji f'Arduino IDE

Screenshot ta 'Arduino IDE

Dawn huma kollha kliem, u l-aqwa veduta tal-funzjoni millis () qed turi xi eżempji ta 'skeċċijiet sempliċi Arduino IDE sabiex tkun tista' tara xi applikazzjonijiet u każijiet ta 'użu. Allura hawn xi wħud eżempji prattiċi...

Jista 'jintuża ma' il-bordijiet kollha ta 'Arduino

1-Eżempju għal spjega l-użu minn 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
}

Kejjel il-ħin bejn żewġ messaġġi serjali:

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

Do teptip LED bil-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
    }
}

Oħloq sequencer sempliċi biex tibgħat test permezz tal-moniter tas-serje f'intervalli ta 'ħin differenti billi tuża 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 - ");
}

Int diġà taf li għal aktar informazzjoni tista 'tniżżel kors ta 'programmazzjoni Arduino bla ħlas f'PDF.


Il-kontenut tal-artikolu jaderixxi mal-prinċipji tagħna ta ' etika editorjali. Biex tirrapporta żball ikklikkja hawn.

Kun l-ewwel li tikkummenta

Ħalli l-kumment tiegħek

Your email address mhux se jkun ippubblikat. oqsma meħtieġa huma mmarkati bl *

*

*

  1. Responsabbli għad-dejta: Miguel Ángel Gatón
  2. Għan tad-dejta: Kontroll SPAM, ġestjoni tal-kummenti.
  3. Leġittimazzjoni: Il-kunsens tiegħek
  4. Komunikazzjoni tad-dejta: Id-dejta ma tiġix ikkomunikata lil partijiet terzi ħlief b'obbligu legali.
  5. Ħażna tad-dejta: Bażi tad-dejta ospitata minn Occentus Networks (UE)
  6. Drittijiet: Fi kwalunkwe ħin tista 'tillimita, tirkupra u tħassar l-informazzjoni tiegħek.