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. Права: в любое время вы можете ограничить, восстановить и удалить свою информацию.