millis (): всичко, което трябва да знаете за функцията Arduino

Arduino UNO милис функции

Arduino има добър репертоар от функции, с които да работите с течение на времето. Един от тях е милис (), инструкция, която ви дава времето в милисекунди от включването на платката Arduino. Това може да изглежда абсурдно и че служи само за да се знае кога плочата е била включена, но истината е, че има много повече практически приложения.

Por ejemplo, може да се използва за определяне на времето, изминало между две или повече събития, избягване на отпадане (отскачане) на бутон и т.н. Той може също така да служи за показване на времето за изпълнение в критични етапи на кода, като гарантира, че програмата работи в реално време.

Функция Millis ()

функция милис Arduino

Както вече споменах, функцията Arduino millis се използва за измерване на времето и го прави в милисекунди (ms), откъдето идва и името му. С други думи, числовата стойност, която тази функция връща, когато я включите в скицата си, е временна информация, изразена в тази единица.

Трябва да знаете, че максималната стойност на тази променлива е неподписано дълго, тоест дълго без знак. Това е важно, защото ако се използва по-малък, могат да възникнат логически проблеми. Освен това трябва да знаете, че може да продължи до 50 дни от времето (4.320.000.000 XNUMX XNUMX XNUMX ms), след като достигне тази стойност, ще се рестартира и ще започне отново от нула.

Друго нещо, което трябва да знаете е, че функцията милис не използва параметри.

Други временни функции на Arduino

Arduino има други функции, свързани с времето, които можете да използвате във вашия код. Един от тях е известното забавяне (), но има още:

  • забавяне (): Това е най-използваната и често срещана от всички функции на Arduino. Той също така използва милисекунди като милис (). И също така ще бъде от тип unsigned long, както и нямаща връщаща стойност. Използва се главно за въвеждане на паузи при изпълнението на програма с много приложения.
  • delayMicroseconds (): той се използва по-малко в скици, в този случай той все още е неподписан дълго, без възвръщаема стойност и в този случай използва микросекунди. Понастоящем може да се постигне максимална стойност с точност 16383, а минималната 3μs. Ако трябва да се справите с чаканията по-дълги от това, препоръчително е да използвате delay ().
  • микро (): също връща числова стойност в микросекунди (μs), откакто платката Arduino започна да изпълнява програмата. Тоест е като милис (), но с друга единица. Всъщност той също използва неподписания дълъг тип и също не използва параметри. Но има някои допълнителни разлики, като например, че се нулира и започва от нула, когато достигне 70 минути. По отношение на разделителната способност от 4 μs, или с други думи, стойността, която тя връща, винаги ще бъде кратна на четири (4, 8, 12, 16, ...). Не забравяйте, че 1000 μs е равно на 1 ms и 1.000.000 1 XNUMX е равно на XNUMX s.

Примери за Millis () в IDE на Arduino

Екранна снимка на Arduino IDE

Това са всички думи и как функцията millis () изглежда най-добре, като показва някои примери за прости скици на Arduino IDE, за да можете да видите някои приложения и случаи на използване. Ето някои практически примери...

Може да се използва с всички дъски на Arduino

1-Пример за обяснете използването от милис ():

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
}

Измерете времето между две серийни съобщения:

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

За да направите мига светодиод с милис ():

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

Създайте a прост секвенсор за изпращане на текст през серийния монитор на различни интервали от време с помощта на милис ():

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

Вече го знаете за MÁS información можете да изтеглите безплатен курс за програмиране на Arduino в PDF.


Бъдете първите, които коментират

Оставете вашия коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

*

*

  1. Отговорен за данните: Мигел Анхел Гатон
  2. Предназначение на данните: Контрол на СПАМ, управление на коментари.
  3. Легитимация: Вашето съгласие
  4. Съобщаване на данните: Данните няма да бъдат съобщени на трети страни, освен по законово задължение.
  5. Съхранение на данни: База данни, хоствана от Occentus Networks (ЕС)
  6. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.