Какой метод лучше использовать для задержек в программе?
До этого мы использовали 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/
Комментарии
Отправить комментарий