Robots #7 Виды задержек в С++

Какой метод лучше использовать для задержек в программе?

До этого мы использовали delay() – это самая простая команда и её чаще всего используют новички. По сути она является задержкой, которая приостанавливает работу программы, на указанное в скобках число миллисекунд.
НО. Нужно отчетливо понимать, что на время паузы с помощью delay работа программы приостанавливается, приложение не будет получать никаких данных с датчиков. Это является самым большим недостатком использования функции delay в Arduino. Обойти это ограничения можно с помощью прерываний.

Функция millis() позволит выполнить задержку без delay.

С помощью millis мы не останавливаем выполнение всего скетча, а просто указываем, сколько времени ардуино должна просто “обходить” именно тот блок кода, который мы хотим приостановить. В отличие от delay millis сама по себе ничего не останавливает. Данная команда просто возвращает нам от встроенного таймера микроконтроллера количество миллисекунд, прошедших с момента запуска. При каждом вызове loop Мы сами измеряем время, прошедшее с последнего вызова нашего кода и если разница времени меньше желаемой паузы, то игнорируем код. Как только разница станет больше нужной паузы, мы выполняем код, получаем текущее время с помощью той же millis и запоминаем его – это время будет новой точкой отсчета. В следующем цикле отсчет уже будет от новой точки и мы опять будем игнорировать код, пока новая разница millis и нашего сохраненного прежде значения не достигнет вновь желаемой паузы.

Пример блока кода с millis

void loop() {
/*
 В этом месте начинается выполнение аналога delay()
 Вычисляем разницу между текущим моментом и ранее сохраненной точкой отсчета.
 Если разница больше нужного значения, то выполняем код.
 Если нет - ничего не делаем
*/
  static uint16_t timing = 0; // Объявляем переменную timing
  if (millis() - timing > 10000){ // Вместо 10000 подставьте нужное вам значение паузы в мс
  timing = millis();
  /* нужный нам блок кода, 
    который требуется 
     выполнять с задержкой
  */
 }
}

В уроке используются материалы с сайта Ардуино-мастер:
https://arduinomaster.ru/program/arduino-delay-millis/

Задания

Задание 1. Используя задержки с millis напишите программу, чтобы робот ехал вперёд со скоростью 70 и мигал красной лампочкой каждые полсекунды.

Комментарии