Arduino het 'n goeie repertoire van funksies om oor tyd mee te werk. Een daarvan is milis (), 'n instruksie wat u die tyd in millisekondes gee sedert die Arduino-bord aangeskakel is. Dit lyk dalk absurd en dat dit slegs dien om te weet wanneer die plaatjie aangeskakel is, maar die waarheid is dat dit baie meer praktiese toepassings het.
Por ejemplo, kan dit gebruik word om die tyd tussen twee of meer gebeurtenisse te bepaal, om die knoppie van 'n knoppie af te weer, ens. Dit kan ook dien om die uitvoeringstyd in kritieke stadiums van die kode aan te dui, om te verseker dat die program intyds werk.
Millis () -funksie
Soos ek reeds genoem het, word die Arduino millis-funksie gebruik om tyd te meet, en dit doen dit in millisekondes (ms), vandaar sy naam. Met ander woorde, die numeriese waarde wat hierdie funksie weergee as u dit in u skets opneem, is 'n tydelike uitdrukking in die eenheid.
U moet weet dat die maksimum waarde van hierdie veranderlike is ongetekende lank, dit wil sê, lank sonder teken. Dit is belangrik, want as 'n kleiner een gebruik word, kan logiese probleme voorkom. Daarbenewens moet u weet dat dit tot 50 dae tyd kan duur (4.320.000.000 ms). Sodra die waarde bereik is, sal dit weer begin en weer van nul af begin.
'N Ander ding wat u moet weet, is dat die millis funksioneer gebruik nie parameters nie.
Ander tydelike Arduino-funksies
Arduino het ander tydverwante funksies wat u in u kode kan gebruik. Een daarvan is die beroemde vertraging (), maar daar is meer:
- vertraging (): Dit is die mees gebruikte en algemeenste van al die Arduino-funksies. Dit gebruik ook millisekondes as millis (). En dit sal ook lank wees en nie 'n terugkeerwaarde hê nie. Dit word hoofsaaklik gebruik om pouses in die uitvoering van 'n program, met baie toepassings, in te voer.
- vertragingMikrosekondes (): dit word minder in sketse gebruik, in hierdie geval is dit nog steeds ongetekend lank, sonder retourwaarde, en in hierdie geval gebruik dit mikrosekondes. Tans kan 'n maksimum waarde met 'n presisie van 16383 en 'n minimum van 3μs bereik word. As u langer as dit moet wag, moet u vertraging () gebruik.
- mikro's (): gee ook 'n numeriese waarde terug in mikrosekondes (μs) sedert die Arduino-bord die program begin uitvoer het. Dit wil sê, dit is soos millis (), maar met 'n ander eenheid. In werklikheid gebruik dit ook die ongetekende lang tipe en gebruik dit ook nie parameters nie. Maar dit het 'n paar ekstra verskille, soos dat dit weer begin en van nul af begin wanneer dit 70 minute bereik. Met betrekking tot die resolusie van 4 μs, of met ander woorde, die waarde wat dit oplewer, sal altyd 'n veelvoud van vier wees (4, 8, 12, 16, ...). Onthou dat 1000 μs gelyk is aan 1 ms en 1.000.000 gelyk aan 1 s.
Millis () voorbeelde in Arduino IDE
Dit is alles woorde en hoe die millis () -funksie die beste lyk, is deur enkele voorbeelde van eenvoudige Arduino IDE-sketse te wys, sodat u toepassings kan sien en gevalle kan gebruik. So hier is 'n paar praktiese voorbeelde...
1-Voorbeeld vir verduidelik die gebruik vanaf 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 }
Meet die tyd tussen twee seriële boodskappe:
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); } } }
Doen knip 'n LED met 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 } }
Skep 'n eenvoudige volgorde om met behulp van millis () met verskillende tydintervalle teks deur die seriële monitor te stuur:
#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 - "); }
U weet dit alreeds vir meer inligting u kan die gratis Arduino programmeringskursus in PDF.
Wees die eerste om te kommentaar lewer