Arduino ka një repertor të mirë funksionesh për të punuar me kalimin e kohës. Një prej tyre është milis (), një udhëzim që ju jep kohën në milisekonda që kur bordi Arduino është i ndezur. Kjo mund të duket absurde dhe shërben vetëm për të ditur se kur është ndezur pllaka, por e vërteta është se ajo ka shumë më shumë zbatime praktike.
Por Ejemplo, mund të përdoret për të përcaktuar kohën që ka kaluar midis dy ose më shumë ngjarjeve, për të shmangur zbritjen (kërcimin) e një butoni, etj. Mund të përdoret gjithashtu për të treguar kohën e ekzekutimit në fazat kritike të kodit, duke siguruar që programi të funksionojë në kohë reale.
Funksioni Millis ()
Siç e kam përmendur tashmë, funksioni Arduino millis përdoret për të matur kohën, dhe kjo e bën në milisekonda (ms), prandaj dhe emri i saj. Me fjalë të tjera, vlera numerike që kthen funksionin kur e përfshini në skicën tuaj është një e dhënë e përkohshme e shprehur në atë njësi.
Duhet ta dini se vlera maksimale e kësaj ndryshore është i nënshkruar gjatë, që është, gjatë pa shenjë. Kjo është e rëndësishme, sepse nëse përdoret një më e vogël, mund të ndodhin probleme logjike. Për më tepër, duhet të dini se mund të zgjasë deri në 50 ditë (4.320.000.000 ms), pasi të ketë arritur atë vlerë do të riniset dhe do të fillojë përsëri nga zero.
Një tjetër gjë që duhet të dini është se funksioni i milisit nuk përdor parametra.
Funksione të tjera të përkohshme të Arduino
Arduino ka funksione të tjera të lidhura me kohën që ju t'i përdorni në kodin tuaj. Një prej tyre është vonesa e famshme (), por ka më shumë:
- vonesë (): Theshtë më e përdorura dhe e zakonshme nga të gjitha funksionet Arduino. Ai gjithashtu përdor milisekonda si milis (). Dhe gjithashtu do të jetë i tipit i nënshkruar gjatë, përveç që nuk do të ketë një vlerë kthyese. Përdoret kryesisht për të futur pauza në ekzekutimin e një programi, me shumë aplikacione.
- vonesaMikrosekonda (): përdoret më pak në skica, në këtë rast është akoma e nënshkruar gjatë, pa vlerë kthyese, dhe në këtë rast përdor mikrosekonda. Aktualisht, një vlerë maksimale mund të arrihet me saktësi prej 16383, dhe minimumin prej 3μs. Nëse duhet të trajtoni pritje më të gjata se kaq, rekomandohet të përdorni vonesë ().
- mikro (): gjithashtu kthen një vlerë numerike në mikrosekonda (μs) që kur bordi Arduino filloi ekzekutimin e programit. Kjo është, është si milis (), por me një njësi tjetër. Në fakt, ai gjithashtu përdor llojin e gjatë të nënshkruar dhe nuk përdor as parametrat. Por ka disa ndryshime shtesë, siç është ajo që rivendoset dhe fillon nga zero kur arrin 70 minuta. Lidhur me rezolucionin e tij prej 4 μs, ose me fjalë të tjera, vlera që ajo kthen do të jetë gjithmonë një shumëfish i katër (4, 8, 12, 16,…). Mos harroni se 1000 μs është e barabartë me 1 ms dhe 1.000.000 është e barabartë me 1 s.
Shembuj të Millis () në Arduino IDE
Këto janë të gjitha fjalë, dhe pamja më e mirë e funksionit millis () tregon disa shembuj të skicave të thjeshta Arduino IDE, në mënyrë që të shihni disa aplikacione dhe të përdorni raste. Kështu që këtu janë disa shembuj praktikë...
1-Shembull për të shpjegojë përdorimin nga 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 }
Matni kohën ndërmjet dy mesazheve serike:
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); } } }
bëj hap një LED me milis ():
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 } }
Krijoni një sekuencues i thjeshtë për të dërguar tekst përmes monitorit serik në interval të ndryshëm kohor duke përdorur 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 - "); }
Ju tashmë e dini se për më shumë informacion ju mund të shkarkoni kurs falas i programimit Arduino në PDF.