millis (): vše, co potřebujete vědět o funkci Arduino

Arduino UNO millis funkce

Arduino má dobrý repertoár funkcí, se kterými lze v průběhu času pracovat. Jedním z nich je millis (), instrukce, která vám poskytne čas v milisekundách od zapnutí desky Arduino. To se může zdát absurdní a slouží pouze ke zjištění, kdy byla varná deska zapnutá, ale pravdou je, že má mnohem více praktických aplikací.

Por ejemplo, lze jej použít k určení času, který uplynul mezi dvěma nebo více událostmi, k zabránění odskoku (odrazu) tlačítka atd. Mohlo by to být také použito k zobrazení doby spuštění v kritických fázích kódu a zajištění toho, že program funguje v reálném čase.

Funkce Millis ()

millis funkce Arduino

Jak jsem již zmínil, funkce Arduino millis se používá k měření času, a to v milisekundy (ms), proto jeho jméno. Jinými slovy, číselná hodnota, kterou tato funkce vrací, když ji zahrnete do náčrtu, je dočasná data vyjádřená v této jednotce.

Měli byste vědět, že maximální hodnota této proměnné je bez podpisu dlouho, to znamená dlouho bez znamení. To je důležité, protože pokud se použije menší, mohou nastat logické problémy. Kromě toho byste měli vědět, že může trvat až 50 dní (4.320.000.000 XNUMX XNUMX XNUMX ms), jakmile dosáhne této hodnoty, restartuje se a začne znovu od nuly.

Další věc, kterou musíte vědět, je, že funkce millis nepoužívá parametry.

Další dočasné funkce Arduina

Arduino má další časové funkce, které můžete použít ve svém kódu. Jedním z nich je slavné zpoždění (), ale je toho víc:

  • zpoždění(): Je to nejpoužívanější a nejběžnější ze všech funkcí Arduina. Také používá milisekundy jako millis (). A bude také typu unsigned long, kromě toho, že nebude mít návratovou hodnotu. Používá se hlavně k zavedení pauz při provádění programu s mnoha aplikacemi.
  • delayMicroseconds (): je méně používán v náčrtcích, v tomto případě je stále nepodepsaný dlouho, bez návratové hodnoty, a v tomto případě používá mikrosekundy. V současné době lze maximální hodnoty dosáhnout s přesností 16383 a minimálně 3 μs. Pokud musíte čekat déle, doporučujeme použít delay ().
  • mikro (): také vrací číselnou hodnotu v mikrosekundách (μs) od doby, kdy deska Arduino začala provádět program. To znamená, že je to jako millis (), ale s jinou jednotkou. Ve skutečnosti také používá dlouhý typ bez znaménka a nepoužívá ani parametry. Má ale několik dalších rozdílů, například to, že se resetuje a začíná od nuly, když dosáhne 70 minut. Pokud jde o rozlišení 4 μs, nebo jinými slovy, hodnota, kterou vrátí, bude vždy násobkem čtyř (4, 8, 12, 16,…). Pamatujte, že 1000 1 μs se rovná 1.000.000 ms a 1 XNUMX XNUMX se rovná XNUMX s.

Millis () příklady v Arduino IDE

Screenshot Arduino IDE

To jsou všechna slova a nejlepší pohled na funkci millis () ukazuje některé příklady jednoduchých náčrtů Arduino IDE, takže můžete vidět některé aplikace a případy použití. Takže tady jsou některé praktické příklady...

Lze použít s všechny desky Arduino

1-příklad pro vysvětlete použití od 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
}

Změřte čas mezi dvěma sériovými zprávami:

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

Dělat blikat LED s 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
    }
}

Vytvořit jednoduchý řadič poslat text přes sériový monitor v různých časových intervalech 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 - ");
}

Už to víte pro viac info si můžete stáhnout bezplatný kurz programování Arduino v PDF.


Buďte první komentář

Zanechte svůj komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

*

*

  1. Odpovědný za údaje: Miguel Ángel Gatón
  2. Účel údajů: Ovládací SPAM, správa komentářů.
  3. Legitimace: Váš souhlas
  4. Sdělování údajů: Údaje nebudou sděleny třetím osobám, s výjimkou zákonných povinností.
  5. Úložiště dat: Databáze hostovaná společností Occentus Networks (EU)
  6. Práva: Vaše údaje můžete kdykoli omezit, obnovit a odstranit.