millis (): viss, kas jums jāzina par Arduino funkciju

Arduino UNO milis funkcijas

Arduino ir labs funkciju repertuārs, ar kuru strādāt laika gaitā. Viens no tiem ir milis (), instrukcija, kas norāda laiku milisekundēs kopš Arduino dēļa ieslēgšanas. Tas var šķist absurdi un ka tas kalpo tikai tam, lai uzzinātu, kad plīts tika ieslēgta, bet patiesība ir tāda, ka tai ir daudz vairāk praktisku pielietojumu.

Ar ejemplo, to var izmantot, lai noteiktu laiku, kas pagājis starp diviem vai vairākiem notikumiem, izvairītos no pogas atlēciena (atlēciena) utt. Tas varētu arī kalpot, lai parādītu izpildes laiku kritiskos koda posmos, nodrošinot, ka programma darbojas reāllaikā.

Millis () funkcija

milis funkcija Arduino

Kā jau minēju, laika mērīšanai tiek izmantota funkcija Arduino millis, un tā to dara milisekundēs (ms), tāpēc tā nosaukums. Citiem vārdiem sakot, skaitliskā vērtība, ko šī funkcija atgriež, iekļaujot to savā skicē, ir pagaidu dati, kas izteikti šajā vienībā.

Jums jāzina, ka šī mainīgā maksimālā vērtība ir neparakstīts ilgi, tas ir, ilgi bez zīmes. Tas ir svarīgi, jo, ja tiek izmantots mazāks, var rasties loģikas problēmas. Turklāt jums jāzina, ka tas var ilgt līdz 50 dienām (4.320.000.000 XNUMX XNUMX XNUMX ms), tiklīdz tas sasniegs šo vērtību, tas tiks restartēts un sāksies no nulles.

Vēl viena lieta, kas jums jāzina, ir tā, ka mili darbojas neizmanto parametrus.

Citas pagaidu Arduino funkcijas

Arduino ir citas ar laiku saistītas funkcijas, kuras varat izmantot savā kodā. Viens no tiem ir slavenā kavēšanās (), bet ir vairāk:

  • kavēšanās (): Tas ir visbiežāk izmantotais un izplatītākais no visām Arduino funkcijām. Tas arī izmanto milisekundes kā milis (). Un tas arī būs neparakstīts garš, kā arī tam nebūs atgriešanās vērtības. To galvenokārt izmanto, lai ieviestu pauzes programmas izpildē ar daudzām lietojumprogrammām.
  • aizkaveMikrosekundes (): tas ir mazāk izmantots skicēs, šajā gadījumā tas joprojām nav parakstīts ilgi, bez atgriešanās vērtības, un šajā gadījumā tas izmanto mikrosekundes. Pašlaik maksimālo vērtību var sasniegt ar precizitāti 16383 un minimālo 3μs. Ja jums ir jārīkojas ilgāk par gaidīšanu, ieteicams izmantot kavēšanos ().
  • mikroshēmas (): atgriež arī skaitlisko vērtību mikrosekundēs (μs), kopš Arduino dēlis sāka izpildīt programmu. Tas ir, tas ir kā milis (), bet ar citu vienību. Patiesībā tas izmanto arī neparakstītu garo tipu un neizmanto parametrus. Bet tam ir dažas papildu atšķirības, piemēram, tas tiek atiestatīts un sākas no nulles, kad tas sasniedz 70 minūtes. Attiecībā uz 4 μs izšķirtspēju vai, citiem vārdiem sakot, tā atgrieztā vērtība vienmēr būs četru reizinājums (4, 8, 12, 16,…). Atcerieties, ka 1000 μs ir vienāds ar 1 ms un 1.000.000 1 XNUMX ir vienāds ar XNUMX s.

Millis () piemēri Arduino IDE

Arduino IDE ekrānuzņēmums

Tie ir visi vārdi, un labākais milis () funkcijas skats ir, parādot dažus vienkāršu skicu piemērus Arduino IDE, lai jūs varētu redzēt dažas lietojumprogrammas un lietojuma gadījumus. Tātad, šeit ir daži praktiski piemēri...

Var izmantot ar visi Arduino dēļi

1-piemērs izskaidrot lietojumu no 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
}

Izmēriet laiku starp diviem sērijas ziņojumiem:

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 mirgot gaismas diode ar miliem ():

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

Izveidojiet a vienkāršs sekvenceris lai nosūtītu tekstu caur seriālo monitoru dažādos laika intervālos, izmantojot 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 - ");
}

Jūs to jau zināt par más INFORMACION Jūs varat lejupielādēt bezmaksas Arduino programmēšanas kurss PDF formātā.


Raksta saturs atbilst mūsu principiem redakcijas ētika. Lai ziņotu par kļūdu, noklikšķiniet uz šeit.

Esi pirmais, kas komentārus

Atstājiet savu komentāru

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti ar *

*

*

  1. Atbildīgais par datiem: Migels Ángels Gatóns
  2. Datu mērķis: SPAM kontrole, komentāru pārvaldība.
  3. Legitimācija: jūsu piekrišana
  4. Datu paziņošana: Dati netiks paziņoti trešām personām, izņemot juridiskus pienākumus.
  5. Datu glabāšana: datu bāze, ko mitina Occentus Networks (ES)
  6. Tiesības: jebkurā laikā varat ierobežot, atjaunot un dzēst savu informāciju.