У Arduino есть хороший набор функций, с которыми можно работать с течением времени. Один из них является миллис (), инструкция, которая показывает время в миллисекундах с момента включения платы Arduino. Это может показаться абсурдным и служит лишь для того, чтобы узнать, когда плита была включена, но правда в том, что у него есть гораздо больше практических применений.
По пример, его можно использовать для определения времени, прошедшего между двумя или более событиями, предотвращения дребезга (дребезга) кнопки и т. д. Его также можно использовать для отображения времени выполнения на критических этапах кода, гарантируя, что программа работает в реальном времени.
Функция Millis ()
Как я уже упоминал, миллис-функция 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
Все это слова, и лучший вид функции millis () показывает несколько примеров простых эскизов IDE 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.