Ардуино задержка: delay и millis (без delay)

Arduino команды millis, delay, delaymicroseconds

Команды millis Arduino, delay и delayMicroseconds играют важную роль в скетчах. Рассмотрим применение функции задержки в программировании Ардуино.

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

Ардуино задержка включения / выключения

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

Ардуино delayMicroseconds()

Команда delayMicroseconds останавливает выполнение программы на заданное количество микросекунд (в 1 секунде 1 000 000 микросекунд). При необходимости задержки в программе более чем на несколько тысяч микросекунд рекомендуется использовать delay(). Продемонстрируем на простом примере использование функции в скетче для мигания встроенным светодиодом на плате Arduino.

// пример использования delayMicroseconds() для мигания светодиодом
void setup() {
   pinMode(13, OUTPUT);
}
 
void loop() {
   digitalWrite(13, HIGH);      // подаем сигнал HIGH на выход
   delayMicroseconds(100);  // задержка 100 микросекунд
   digitalWrite(13, LOW);       // подаем сигнал LOW на выход
   delayMicroseconds(100);  // задержка 100 микросекунд
}

Ардуино delay()

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

// пример использования delay() для мигания светодиодом
void setup() {
   pinMode(13, OUTPUT);
}
 
void loop() {
   digitalWrite(13, HIGH);   // подаем сигнал HIGH на выход
   delay(100);                        // задержка 100 миллисекунд
   digitalWrite(13, LOW);    // подаем сигнал LOW на выход
   delay(100);                        // задержка 100 миллисекунд
}

Ардуино millis()

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

// пример использования millis() при мигании светодиодом
unsigned long time;

void setup() {
   pinMode(13, OUTPUT);
   Serial.begin(9600);  // запускаем монитор порта
   time = millis();          // запускаем отсчет времени
}
 
void loop() {
   digitalWrite(13, HIGH);   // подаем сигнал HIGH на выход
   delay(1000);                      // задержка 1 секунда
   digitalWrite(13, LOW);    // подаем сигнал LOW на выход
   delay(1000);                      // задержка 1 секунда

   // выводим количество миллисекунд прошедших с момента начала программы
   Serial.print("Time: ");
   Serial.println(time);
}
Arduino команды millis, delay, delaymicroseconds
Arduino команды millis, delay, delaymicroseconds

Используем в Ардуино millis вместо delay

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

// пример замены delay на millis в программе
unsigned long time;   // переменная времени
boolean ledState = 0;  // переменная состояния светодиода

void setup() {
   pinMode(13, OUTPUT);
   Serial.begin(9600);  // запускаем монитор порта
   time = millis();          // запускаем отсчет времени
}
 
void loop() {
    if (millis() - currentTime > 500)   // проверяем сколько прошло миллисекунд
    {
       currentTime = millis();
       ledState=!ledState;                   // меняем состояние светодиода на противоположное
       digitalWrite(10, ledState);
    }

   // выводим количество миллисекунд прошедших с момента начала программы
   Serial.print("Time: ");
   Serial.println(time);
}

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

1 Star2 Stars3 Stars4 Stars5 Stars (2 votes, average: 5,00 out of 5)
Загрузка...

Похожие записи по теме:

Один комментарий для “Пример: Ардуино задержка: delay и millis (без delay)”

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

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