Есть ли необходимость вводить задержку в основной цикл
Я полный новичок. Вообще говоря, есть ли вообще какая-либо необходимость в задержке в основном цикле()? Я не привык писать бесконечные циклы
Правильно ли говорить, что команда delay() просто полезна для учебных пособий (т. е. включите свет, подождите, выключите свет.вау!), Но обычно задержка не была бы полезной, и вместо этого мы просто быстро бесконечно опрашиваем наши подключенные устройства. Это правильно?
(Я понимаю, что в некоторых специализированных случаях может быть полезно ввести задержку в цикл. Я не спрашиваю о специальных случаях.)
@Megan Spencer, 👍2
Обсуждение2 ответа
Нет абсолютной необходимости в том, чтобы какая-либо программа Arduino использовала delay()
Скетч "Мигание без задержки", включенный в стандартные примеры скетчей, является канонической иллюстрацией этого.
В большинстве случаев вам не нужно опрашивать свои датчики тысячи раз в секунду. Это хорошая дисциплина-опрашивать датчики только так часто, как это имеет смысл для конкретного применения. Иногда это может происходить раз в пять минут. Например, датчик температуры окружающей среды. В этих случаях ничего не добьешься, если будешь опрашивать тысячу раз в секунду. Это приводит к растрате ресурсов и является плохой привычкой, которая может быть проблематичной для приложений, работающих на батарейках.
Например, использование функции millis()
для синхронизации позволяет эффективно опрашивать несколько периферийных устройств с разными интервалами, возможно, усредняя некоторые показания для уменьшения шума, возможно, также обновляя дисплей с другими интервалами, которые соответствуют человеческому восприятию.
Для приложений с длительным питанием от батареи, вероятно, вам будет полезно узнать о том, как перевести микроконтроллер в режим сна с помощью функции sleep()
или DeepSleep()
и использовать прерывания для его пробуждения. Часы реального времени (RTC) или прерывание сторожевого таймера, возможно, можно использовать для планирования показаний датчиков и других действий, возможно, в сочетании с millis()
.
Для очень простых программ, которым не требуется точное время. delay()
может быть самым простым и понятным способом управления таймингами.
+1 Хороший ответ. Я бы добавил, что иногда необходимо ограничить скорость определенных действий, которые зависят от аппаратного обеспечения или другого кода, чтобы избежать проблем (например, переполнения буфера, заполнения "последовательного" буфера, который затем блокирует выполнение),...). Использование delay ()
- один из простых способов сделать это, хотя и далеко не лучший., @chrisl
Во многих случаях ограничение скорости опроса полезно только в том случае, если вы спите. В приложении, работающем от сети, опрос тысячи раз в секунду-это нормально и проще., @Edgar Bonet
Нет, нет никакой необходимости использовать delay()
вообще. В отличие от команд sleep()
или DeepSleep ()
, задержка не экономит энергию и не делает ничего особенного.
Стандартная реализация задержки
заключается в том, чтобы просто подождать, пока не истечет время, что-то вроде:
void delay(int ms)
{
int end = millis() + ms;
while (millis() < end) {}; // do nothing
}
Таким образом, для самого процессора это просто тратит впустую циклы процессора, это не экономит энергию.
- Мигните светодиодом 5 раз с помощью цикла for
- Чтение нескольких аналоговых входных контактов
- Как остановить цикл в последовательном мониторе?
- Arduino - Кнопка для запуска/остановки цикла
- Одновременное чтение кнопки?
- Что на самом деле делает delay(0)?
- Объектно-ориентированное программирование Arduino
- Случайная ошибка "Compilation error: Error: 13 INTERNAL: exit status 1". Как устранить или что вызывает эту ошибку
Как и все остальное, это зависит от ... Я не уверен, что есть "нормально говорящий", учитывая широкий спектр приложений Arduino. "задержка" идеально подходит, когда во время задержки не происходит никаких других чувствительных ко времени процессов (прерываний, фоновых задач и т.д.)., @Dave Newton
@DaveNewton Если вы хотите опубликовать ответ, пожалуйста, сделайте это. Комментарии под вопросами предназначены для уточнения вопроса, чего в данном комментарии не делается. Если вы дадите правильный ответ, вы вполне можете получить за это похвалу, и люди смогут прокомментировать точность или нет вашего ответа., @Nick Gammon