Перейти к содержанию

Функция millis() в Ардуино, многозадачность

Функция millis() в Ардуино

Функция millis в Arduino играет важную роль при реализации многозадачности в программе. На нашем web сайте опубликовано множество проектов на Arduino, использующих функцию millis(), в которых необходимо производить отсчет времени. Рассмотрим применение команды millis() в Ардуино для управления временем и, как использовать millis без задержки delay в скетче на примере мигающего светодиода.

Необходимые компоненты:

  • Arduino Uno / Arduino Nano / Arduino Mega
  • светодиод и резистор
  • макетная плата
  • коннекторы

Дополнительные материалы на эту тему:

  1. Мигание светодиодом от Ардуино на miilis
  2. Функция delay, delayMicroseconds в Ардуино
  3. Interrupts — прерывания для начинающих

Функция millis в Arduino возвращает количество миллисекунд, прошедших с момента запуска программы. Счетчик времени обнуляется, когда значение переменной unsigned long переполняется (примерно через 50 дней). Функция millis в языке Arduino позволяет микроконтроллеру быть многозадачным, поскольку выполнение программы не останавливается, а другие операции могут выполняться параллельно.

Функция millis() в языке Ардуино

Функция millis() в Ардуино

Для мигания светодиодом или какой-нибудь периодически выполняемой задачи обычно используется функция delay, однако эта команда останавливает выполнение программы и плата Arduino не может выполнять другие операции. Чтобы преодолеть этот существенный недостаток у плат Ардуино функцию delay заменяют на функцию millis. Таким образом, происходит создание многозадачности микроконтроллера Ардуино.

Многозадачность в Arduino с помощью millis

Многозадачность Arduino с помощью millis

Когда вы используете функцию delay в программе, выполнение всех команд останавливается на заданное количество миллисекунд. В этом заключается основное различие между millis() и delay(). При подключении датчиков необходимо получать непрерывные данные, поэтому функция задержки заменяется на millis. В примере с мигающим светодиодом мы сделаем задержку (паузу) с помощью millis без delay.

Скетч мигание светодиодом без delay на Ардуино


#define LED 13

unsigned long timer;
boolean ledState = 0;

void setup() {
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
  timer = millis();
}
 
void loop() {
  if (millis() - timer > 1000) {
     ledState=!ledState; // меняем состояние светодиода
     digitalWrite(LED, ledState);
     timer = millis();
  }

  Serial.print("Time: ");
  Serial.println(timer);
}

Заключение. Команда Arduino millis не останавливает выполнение программы, а начинает отсчет с начала счетчика миллисекунд. В отличие от этой функции, delay и delayMicroseconds останавливают выполнение программы на заданное количество миллисекунд или микросекунд соответственно. Применение той или иной паузы для микроконтроллера, т.е. многозадачность Arduino Uno зависит от поставленной задачи.

Добавить комментарий

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

newzaym
➜