millis (): все, что вам нужно знать о функции Arduino

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

У Arduino есть хороший набор функций, с которыми можно работать с течением времени. Один из них является миллис (), инструкция, которая показывает время в миллисекундах с момента включения платы Arduino. Это может показаться абсурдным и служит лишь для того, чтобы узнать, когда плита была включена, но правда в том, что у него есть гораздо больше практических применений.

По пример, его можно использовать для определения времени, прошедшего между двумя или более событиями, предотвращения дребезга (дребезга) кнопки и т. д. Его также можно использовать для отображения времени выполнения на критических этапах кода, гарантируя, что программа работает в реальном времени.

Функция Millis ()

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

Как я уже упоминал, миллис-функция Arduino используется для измерения времени, и это делается в миллисекунды (мс), отсюда и его название. Другими словами, числовое значение, которое эта функция возвращает, когда вы включаете его в свой эскиз, является временными данными, выраженными в этой единице.

Вы должны знать, что максимальное значение этой переменной равно без знака долго, то есть долго без знака. Это важно, потому что при использовании меньшего размера могут возникнуть проблемы с логикой. Кроме того, вы должны знать, что он может длиться до 50 дней (4.320.000.000 XNUMX XNUMX XNUMX мс), как только он достигнет этого значения, он перезапустится и снова начнется с нуля.

Еще вам нужно знать, что функция millis не использует параметры.

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

У Arduino есть и другие функции, связанные со временем, которые вы можете использовать в своем коде. Один из них является знаменитая задержка (), но это еще не все:

  • задержка (): Это самая используемая и распространенная из всех функций Arduino. Он также использует миллисекунды как millis (). И он также будет иметь тип unsigned long, помимо отсутствия возвращаемого значения. Он используется в основном для введения пауз в выполнении программы во многих приложениях.
  • delayMicroseconds (): меньше используется в скетчах, в этом случае он все еще беззнаковый, без возвращаемого значения, и в этом случае он использует микросекунды. В настоящее время максимальное значение может быть достигнуто с точностью 16383, а минимальное - 3 мкс. Если вам нужно обрабатывать более длительное ожидание, рекомендуется использовать delay ().
  • микро (): также возвращает числовое значение в микросекундах (мкс) с момента начала выполнения программы платой Arduino. То есть это похоже на millis (), но с другим модулем. Фактически, он также использует беззнаковый длинный тип и не использует параметры. Но у него есть некоторые дополнительные отличия, например, он сбрасывается и запускается с нуля по достижении 70 минут. Что касается его разрешения 4 мкс, или, другими словами, возвращаемое значение всегда будет кратным четырем (4, 8, 12, 16,…). Помните, что 1000 мкс равняется 1 мс, а 1.000.000 равняется 1 с.

Примеры Millis () в Arduino IDE

Скриншот Arduino IDE

Все это слова, и лучший вид функции millis () показывает несколько примеров простых эскизов IDE Arduino, чтобы вы могли увидеть некоторые приложения и варианты использования. Итак, вот некоторые практические примеры...

Может использоваться с все платы Arduino

1-Пример для объясните использование из 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
}

Измерьте время между двумя последовательными сообщениями:

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

Делать мигать светодиодом с 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
    }
}

Создать простой секвенсор для отправки текста через последовательный монитор через разные промежутки времени с помощью 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 - ");
}

Вы уже знаете, что для Дополнительную информацию вы можете скачать бесплатный курс программирования Arduino в формате PDF.


Будьте первым, чтобы комментировать

Оставьте свой комментарий

Ваш электронный адрес не будет опубликован. Обязательные для заполнения поля помечены *

*

*

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