Arduino har en bra repertoar av funktioner att arbeta med över tiden. En av dem är milis (), en instruktion som ger dig tiden i millisekunder sedan Arduino-kortet är påslaget. Detta kan verka absurt, och det tjänar bara till att veta när hällen slogs på, men sanningen är att den har många fler praktiska tillämpningar.
Por ejemplo, den kan användas för att bestämma tiden som har gått mellan två eller flera händelser, undvika avstängning (studs) av en knapp, etc. Det kan också användas för att visa körtiden i kritiska steg i koden, så att programmet fungerar i realtid.
Millis () -funktion
Som jag redan har nämnt används Arduino millis-funktionen för att mäta tid, och den gör det i millisekunder (ms), därav dess namn. Med andra ord är det numeriska värdet som den här funktionen returnerar när du inkluderar det i din skiss en tillfällig data som uttrycks i den enheten.
Du bör veta att det maximala värdet för denna variabel är osignerad lång, det vill säga länge utan tecken. Detta är viktigt, för om en mindre används kan logiska problem uppstå. Dessutom borde du veta att det kan ta upp till 50 dagar (4.320.000.000 ms), när det väl har nått det värdet startar det om och startar om från noll.
En annan sak du måste veta är att millisfunktionen fungerar använder inte parametrar.
Andra tillfälliga Arduino-funktioner
Arduino har andra tidsrelaterade funktioner som du kan använda i din kod. En av dem är den berömda förseningen (), men det finns mer:
- dröjsmål(): Det är den mest använda och vanliga av alla Arduino-funktioner. Den använder också millisekunder som millis (). Och det kommer också att vara av typ osignerad lång, förutom att det inte har något returvärde. Den används främst för att införa pauser i genomförandet av ett program, med många applikationer.
- delayMicroseconds (): används mindre i skisser, i det här fallet är det fortfarande osignerat långt, utan returvärde, och i det här fallet använder det mikrosekunder. För närvarande kan ett maximalt värde uppnås med precision 16383 och minst 3 μs. Om du måste hantera väntetider längre än så rekommenderas det att du använder fördröjning ().
- mikro (): returnerar också ett numeriskt värde i mikrosekunder (μs) sedan Arduino-kortet började köra programmet. Det vill säga det är som millis (), men med en annan enhet. I själva verket använder den också den osignerade långa typen och den använder inte heller parametrar. Men det har några ytterligare skillnader, till exempel att det återställs och börjar från noll när det når 70 minuter. När det gäller dess upplösning på 4 μs, eller med andra ord, kommer värdet det returnerar alltid att vara en multipel av fyra (4, 8, 12, 16, ...). Kom ihåg att 1000 μs är lika med 1 ms och 1.000.000 är lika med 1 s.
Millis () exempel i Arduino IDE
Allt detta är ord, och den bästa utsikten över millis () -funktionen visar några exempel på enkla Arduino IDE-skisser så att du kan se några applikationer och använda fall. Så här är några praktiska exempel.
1-exempel för förklara användningen från 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 }
Mät tiden mellan två seriella meddelanden:
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); } } }
Gör blinka en LED med 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 } }
Skapa en enkel sequencer att skicka text genom den seriella bildskärmen med olika tidsintervall med 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 - "); }
Det vet du redan för mer du kan ladda ner gratis Arduino programmeringskurs i PDF.