millis (): все, що вам потрібно знати про функцію Arduino

Arduino UNO функції міліс

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

За приклад, за його допомогою можна визначити час, що минув між двома або більше подіями, уникнути скасування (відмов) кнопки тощо. Він також може служити для відображення часу виконання на критичних стадіях коду, забезпечуючи роботу програми в режимі реального часу.

Функція Millis ()

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

Як я вже згадував, функція Arduino millis використовується для вимірювання часу, і вона робить це в мілісекунд (мс), звідси і його назва. Іншими словами, числове значення, яке ця функція повертає, коли ви включаєте її у свій ескіз, є тимчасовими даними, вираженими в цій одиниці.

Ви повинні знати, що максимальне значення цієї змінної становить без підпису довгий, тобто довго без знаку. Це важливо, оскільки якщо використовувати менший, можуть виникнути логічні проблеми. Крім того, ви повинні знати, що він може тривати до 50 днів (4.320.000.000 XNUMX XNUMX XNUMX мс), як тільки воно досягне цього значення, він перезапуститься і знову почнеться з нуля.

Інша річ, яку ви повинні знати, - це функція міліс не використовує параметри.

Інші тимчасові функції Arduino

Arduino має інші функції, пов’язані з часом, які ви можете використовувати у своєму коді. Один з них є знаменита затримка (), але є ще:

  • затримка (): Це найпоширеніша та найпоширеніша з усіх функцій Arduino. Він також використовує мілісекунди як міліс (). І він також буде типу unsigned long, а також не матиме поверненого значення. Він використовується в основному для введення пауз у виконанні програми з багатьма програмами.
  • delayMicroseconds (): він менше використовується в ескізах, у цьому випадку він все ще без знака довгий, без поверненого значення, і в цьому випадку він використовує мікросекунди. В даний час максимальне значення може бути досягнуте з точністю 16383, а мінімальне - 3 мкс. Якщо вам доводиться обробляти очікування довше цього, рекомендується використовувати delay ().
  • мікро (): також повертає числове значення в мікросекундах (мкс) з тих пір, як плата Arduino почала виконувати програму. Тобто це як міліс (), але з іншою одиницею. Насправді він також використовує непідписаний довгий тип і також не використовує параметри. Але у нього є деякі додаткові відмінності, такі як те, що він скидається і починається з нуля, коли досягає 70 хвилин. Щодо роздільної здатності 4 мкс, або іншими словами, значення, яке він повертає, завжди буде кратне чотирьом (4, 8, 12, 16, ...). Пам'ятайте, що 1000 мкс дорівнює 1 мс, а 1.000.000 1 XNUMX дорівнює XNUMX с.

Приклади Millis () в IDE Arduino

Знімок екрана Arduino IDE

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

Може використовуватися з всі дошки 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
    }
}

Створіть простий секвенсор для надсилання тексту через послідовний монітор через різні інтервали часу за допомогою мілісекунд ():

#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. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.