millis (): alt du trenger å vite om Arduino-funksjonen

Arduino UNO millis funksjoner

Arduino har et godt repertoar av funksjoner å jobbe med over tid. En av dem er millis (), en instruksjon som gir deg tiden i millisekunder siden Arduino-kortet er slått på. Dette kan virke absurd, og at det bare tjener å vite når koketoppen ble slått på, men sannheten er at den har mange flere praktiske anvendelser.

av ejemplo, kan den brukes til å bestemme tiden som har gått mellom to eller flere hendelser, unngå avvisning (sprette) av en knapp, etc. Det kan også brukes til å vise utførelsestiden i kritiske stadier av koden, slik at programmet fungerer i sanntid.

Millis () -funksjon

millis funksjon Arduino

Som jeg allerede har nevnt, brukes Arduino millis-funksjonen til å måle tid, og den gjør det i millisekunder (ms), derav navnet. Med andre ord er den numeriske verdien som denne funksjonen returnerer når du inkluderer den i skissen din, midlertidige data uttrykt i den enheten.

Du bør vite at den maksimale verdien for denne variabelen er usignert lang, altså lenge uten tegn. Dette er viktig, for hvis en mindre brukes, kan det oppstå logiske problemer. I tillegg bør du vite at den kan vare opptil 50 dager (4.320.000.000 ms), når den har nådd den verdien, vil den starte på nytt og starte på nytt fra null.

En annen ting du må vite er at millis funksjonen bruker ikke parametere.

Andre midlertidige Arduino-funksjoner

Arduino har andre tidsrelaterte funksjoner du kan bruke i koden din. En av dem er den berømte forsinkelsen (), men det er mer:

  • forsinkelse(): Det er den mest brukte og vanlige av alle Arduino-funksjonene. Den bruker også millisekunder som millis (). Og den vil også være av typen usignert lang, i tillegg til at den ikke har returverdi. Den brukes hovedsakelig til å introdusere pauser i gjennomføringen av et program, med mange applikasjoner.
  • delayMicroseconds (): er mindre brukt i skisser, i dette tilfellet er det fortsatt ikke signert langt, uten returverdi, og i dette tilfellet bruker det mikrosekunder. For øyeblikket kan en maksimal verdi oppnås med presisjon på 16383, og minimum 3 μs. Hvis du må håndtere ventetid lenger enn det, anbefales det å bruke forsinkelse ().
  • micros (): returnerer også en numerisk verdi i mikrosekunder (μs) siden Arduino-kortet begynte å utføre programmet. Det vil si at det er som millis (), men med en annen enhet. Faktisk bruker den også den usignerte lange typen, og den bruker heller ikke parametere. Men det har noen ekstra forskjeller, for eksempel at den tilbakestilles og starter fra null når den når 70 minutter. Når det gjelder oppløsningen på 4 μs, eller med andre ord, vil verdien den returnerer alltid være et multiplum av fire (4, 8, 12, 16, ...). Husk at 1000 μs tilsvarer 1 ms og 1.000.000 tilsvarer 1 s.

Millis () eksempler i Arduino IDE

Skjermbilde av Arduino IDE

Dette er alle ord, og den beste utsikten over millis () -funksjonen viser noen eksempler på enkle Arduino IDE-skisser, slik at du kan se noen applikasjoner og brukstilfeller. Så her er noen praktiske eksempler...

Kan brukes med alle Arduino-brett

1-Eksempel for forklar bruken fra 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ål tiden mellom to serielle meldinger:

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

Gjøre blink 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
    }
}

Lag en enkel sequencer å sende tekst gjennom den serielle skjermen med forskjellige tidsintervaller ved hjelp av 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 allerede for mer du kan laste ned gratis Arduino programmeringskurs i PDF.


Bli den første til å kommentere

Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.