Arduino ima dober repertoar funkcij, s katerimi lahko sčasoma delate. Eden izmed njih je milis (), navodilo, ki vam daje čas v milisekundah od vklopa plošče Arduino. To se morda zdi absurdno in služi le temu, da vemo, kdaj je bila plošča vklopljena, resnica pa je, da ima veliko več praktičnih aplikacij.
Z ejemplo, lahko se uporablja za določanje časa, ki je pretekel med dvema ali več dogodki, izogibanje odklopu (odboju) gumba itd. Lahko tudi služi za prikaz časa izvajanja v kritičnih fazah kode, s čimer zagotavlja, da program deluje v realnem času.
Funkcija Millis ()
Kot sem že omenil, se funkcija Arduino millis uporablja za merjenje časa in to počne v milisekunde (ms), od tod tudi njegovo ime. Z drugimi besedami, številska vrednost, ki jo ta funkcija vrne, ko jo vključite v skico, je začasni podatek, izražen v tej enoti.
Vedeti morate, da je največja vrednost te spremenljivke nepodpisano dolgo, torej dolgo brez znaka. To je pomembno, kajti če uporabimo manjšega, lahko pride do težav z logiko. Poleg tega morate vedeti, da lahko traja do 50 dni (4.320.000.000 ms), ko doseže to vrednost, se bo znova zagnal in začel z nič.
Še ena stvar, ki jo morate vedeti, je, da deluje milis ne uporablja parametrov.
Druge začasne funkcije Arduino
Arduino ima druge funkcije, povezane s časom, ki jih lahko uporabite v svoji kodi. Eden izmed njih je slavna zamuda (), vendar obstaja še več:
- zamuda (): Je najbolj uporabljena in najpogostejša od vseh funkcij Arduino. Milisekunde uporablja tudi kot milisekunde (). Poleg tega ne bo imel vrnjene vrednosti, bo tudi tipa unsigned long. Uporablja se predvsem za uvajanje premorov pri izvajanju programa s številnimi aplikacijami.
- delayMicroseconds (): v skicah se manj uporablja, v tem primeru je še vedno nepodpisan dolgo, brez vrnjene vrednosti, v tem primeru pa uporablja mikrosekunde. Trenutno je mogoče doseči največjo vrednost z natančnostjo 16383 in najmanj 3 μs. Če morate čakanje obravnavati dlje od tega, je priporočljivo uporabiti delay ().
- mikro (): vrne tudi številčno vrednost v mikrosekundah (μs), odkar je plošča Arduino začela izvajati program. To pomeni, da je kot milis (), vendar z drugo enoto. Pravzaprav uporablja tudi nepodpisani dolgi tip in tudi ne uporablja parametrov. Ima pa nekaj dodatnih razlik, na primer, da se ponastavi in začne od nič, ko doseže 70 minut. Glede na ločljivost 4 μs ali z drugimi besedami bo vrednost, ki jo vrne, vedno večkratnik štirih (4, 8, 12, 16,…). Ne pozabite, da je 1000 μs enako 1 ms in 1.000.000 1 s.
Primeri Millis () v Arduino IDE
To so vse besede, najboljši pogled funkcije millis () pa prikazuje nekaj primerov preprostih skic Arduino IDE, tako da lahko vidite nekatere aplikacije in primere uporabe. Torej, tukaj je nekaj praktični primeri...
1-primer za razložite uporabo od 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 }
Izmerite čas med dvema zaporednima sporočiloma:
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); } } }
Storite utripa LED z milisami ():
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 } }
Ustvarite preprost sekvencer za pošiljanje besedila skozi serijski monitor v različnih časovnih intervalih z uporabo 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 - "); }
To že veste za más información lahko prenesete brezplačni tečaj programiranja Arduino v PDF.