millis (): wszystko, co musisz wiedzieć o funkcji Arduino

Arduino UNO funkcje millis

Arduino ma dobry repertuar funkcji, z którymi można pracować w czasie. Jeden z nich jest millis (), instrukcja podająca czas w milisekundach od włączenia płyty Arduino. Może się to wydawać absurdalne i służy jedynie do poznania, kiedy płyta została włączona, ale prawda jest taka, że ​​ma o wiele więcej praktycznych zastosowań.

przez ejemplo, można go użyć do określenia czasu, który upłynął między dwoma lub więcej zdarzeniami, uniknięcia odbicia (odbicia) przycisku itp. Może również służyć do pokazywania czasu wykonania w krytycznych etapach kodu, zapewniając, że program działa w czasie rzeczywistym.

Funkcja Millis ()

funkcja millis Arduino

Jak już wspomniałem, funkcja Arduino millis służy do pomiaru czasu i robi to w formacie milisekund (ms), stąd jego nazwa. Innymi słowy, wartość liczbowa zwracana przez tę funkcję po uwzględnieniu jej w szkicu to tymczasowe dane wyrażone w tej jednostce.

Powinieneś wiedzieć, że maksymalna wartość tej zmiennej to bez znaku długoczyli długo bez znaku. Jest to ważne, ponieważ jeśli zostanie użyty mniejszy, mogą wystąpić problemy logiczne. Ponadto powinieneś wiedzieć, że może trwać do 50 dni (4.320.000.000 XNUMX XNUMX XNUMX ms), po osiągnięciu tej wartości uruchomi się ponownie i zacznie od zera.

Inną rzeczą, którą musisz wiedzieć, jest funkcja millis nie używa parametrów.

Inne tymczasowe funkcje Arduino

Arduino ma inne funkcje związane z czasem, których możesz użyć w swoim kodzie. Jeden z nich jest słynne opóźnienie (), ale jest więcej:

  • opóźnienie(): Jest to najczęściej używana i powszechna ze wszystkich funkcji Arduino. Używa również milisekund jako millis (). Będzie również typu unsigned long, a także nie będzie miał wartości zwracanej. Służy głównie do wprowadzania przerw w wykonaniu programu z wieloma aplikacjami.
  • delayMicroseconds (): jest rzadziej używany w szkicach, w tym przypadku jest nadal bez znaku, bez zwracanej wartości, aw tym przypadku używa mikrosekund. Obecnie maksymalną wartość można osiągnąć z dokładnością do 16383, a minimalną do 3μs. Jeśli musisz obsłużyć oczekiwania dłużej, zaleca się użycie delay ().
  • micros (): zwraca również wartość liczbową w mikrosekundach (μs) od momentu rozpoczęcia wykonywania programu przez płytkę Arduino. Oznacza to, że jest podobny do millis (), ale z inną jednostką. W rzeczywistości używa również typu unsigned long i nie używa również parametrów. Ale ma pewne dodatkowe różnice, na przykład resetuje się i zaczyna od zera, gdy osiągnie 70 minut. Jeśli chodzi o rozdzielczość 4 μs, czyli innymi słowy, zwracana wartość zawsze będzie wielokrotnością czterech (4, 8, 12, 16,…). Pamiętaj, że 1000 μs to 1 ms, a 1.000.000 to 1 s.

Przykłady Millis () w Arduino IDE

Zrzut ekranu Arduino IDE

To wszystko są słowa, a jak najlepiej wygląda funkcja millis (), pokazując kilka przykładów prostych szkiców Arduino IDE, abyś mógł zobaczyć niektóre aplikacje i przypadki użycia. Oto kilka praktyczne przykłady...

Może być używany z wszystkie płyty Arduino

1-Przykład dla wyjaśnij użycie z 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
}

Zmierz czas między dwoma komunikatami szeregowymi:

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

Zrobić mrugnąć diodą LED z 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
    }
}

Utwórz prosty sekwencer aby wysłać tekst przez monitor szeregowy w różnych odstępach czasu za pomocą 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 - ");
}

Wiesz już to od więcej możesz pobrać darmowy kurs programowania Arduino w formacie PDF.


Bądź pierwszym który skomentuje

Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.