millis (): alt hvad du behøver at vide om Arduino-funktionen

Arduino UNO millis funktioner

Arduino har et godt repertoire af funktioner at arbejde med over tid. En af dem er millis (), en instruktion, der giver dig tiden i millisekunder, siden Arduino-kortet er tændt. Dette kan virke absurd, og det tjener kun at vide, hvornår kogepladen blev tændt, men sandheden er, at den har mange flere praktiske anvendelser.

Ved ejemplo, det kan bruges til at bestemme den tid, der er gået mellem to eller flere begivenheder, undgå afvisning (bounce) af en knap osv. Det kunne også bruges til at vise udførelsestiden i kritiske faser af koden, hvilket sikrer, at programmet fungerer i realtid.

Millis () funktion

millis funktion Arduino

Som jeg allerede har nævnt, bruges Arduino millis-funktionen til at måle tid, og den gør det i millisekunder (ms)deraf navnet. Med andre ord er den numeriske værdi, som denne funktion returnerer, når du inkluderer den i din skitse, midlertidige data udtrykt i den enhed.

Du skal vide, at den maksimale værdi for denne variabel er usigneret længe, dvs. lang uden tegn. Dette er vigtigt, for hvis der anvendes en mindre, kan der opstå logiske problemer. Derudover skal du vide, at den kan vare op til 50 dages tid (4.320.000.000 ms), når den har nået den værdi, genstarter den og starter igen fra nul.

En anden ting, du skal vide, er, at millis-funktionen fungerer bruger ikke parametre.

Andre midlertidige Arduino-funktioner

Arduino har andre tidsrelaterede funktioner, som du kan bruge i din kode. En af dem er den berømte forsinkelse (), men der er mere:

  • forsinke(): Det er den mest anvendte og almindelige af alle Arduino-funktionerne. Det bruger også millisekunder som millis (). Og det vil også være af typen usigneret lang, såvel som ikke at have en returværdi. Det bruges hovedsageligt til at introducere pauser i udførelsen af ​​et program med mange applikationer.
  • delayMicroseconds (): er mindre brugt i skitser, i dette tilfælde er den stadig usigneret lang uden returværdi, og i dette tilfælde bruger den mikrosekunder. I øjeblikket kan en maksimal værdi opnås med en præcision på 16383 og et minimum på 3 μs. Hvis du skal håndtere ventetider længere end det, anbefales det at bruge forsinkelse ().
  • micros (): returnerer også en numerisk værdi i mikrosekunder (μs), siden Arduino-kortet begyndte at udføre programmet. Det vil sige, det er som millis (), men med en anden enhed. Faktisk bruger den også den usignerede lange type, og den bruger heller ikke parametre. Men det har nogle yderligere forskelle, såsom at det nulstilles og starter fra nul, når det når 70 minutter. Med hensyn til dens opløsning på 4 μs eller med andre ord vil den værdi, den returnerer, altid være et multiplum af fire (4, 8, 12, 16, ...). Husk at 1000 μs er lig med 1 ms og 1.000.000 er lig med 1 s.

Millis () eksempler i Arduino IDE

Skærmbillede af Arduino IDE

Dette er alle ord, og den bedste visning af millis () - funktionen viser nogle eksempler på enkle Arduino IDE-skitser, så du kan se nogle applikationer og brugssager. Så her er nogle praktiske eksempler...

Kan bruges med alle Arduino-brædder

1-eksempel til forklar brugen 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 mellem to serielle meddelelser:

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

Opret en enkel sequencer at sende tekst gennem den serielle skærm med forskellige tidsintervaller ved hjælp af 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 ved du allerede for flere oplysninger du kan downloade gratis Arduino programmeringskursus i PDF.


Vær den første til at kommentere

Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.