Оцените код
- Войдите на сайт для отправки комментариев
Втр, 17/03/2020 - 02:56
Подскажите пожалуйста, пытаюсь избавиться от функции delay. Могли бы вы оценить решение данной проблемы с помощью такого кода? Именно с точки зрения применения такой конструкции в готовых проектах. По моему мнению, учитывая что не стопорится работа микроконтроллера и просто каждый цикл происходит перезапись значения в digitalWrite, функция гораздо уместнее delay. Что по вашему мнению? Не пинайте только, учусь!
const int LED = 3; unsigned long currentTime; unsigned long previousTime; long delayTime = 5000; boolean n=0; void setup () { pinMode(LED, OUTPUT); Serial.begin(9600); } void loop() { currentTime = millis(); if(currentTime - previousTime >= delayTime) { previousTime = currentTime; n = !n; } digitalWrite(LED, n); }
нормальный код, только стоит строку 21 тоже внутрь условия If перенести, иначе она будет выполнятся не с интервалом delayTime, а каждый оборот loop()
я бы строку 15 выкинул переместив миллис в условие
Честно говоря не понял, чем от делея отличается. Один в один почти. Если вспомнить елд.
вот так оптимальнее, зачем лишние переменные плодить. Стоит почитать о типах данных, их размерах и максимальных значениях. Поможет экономить ОЗУ контроллера, его мало.
вот так оптимальнее, зачем лишние переменные плодить.
я бы строку 15 выкинул переместив миллис в условие
Разница такая же, как и между "в среднем равно" и "больше или равно".
kostyamat, это относится и к Вашему коду.
я бы строку 15 выкинул переместив миллис в условие
Это тема старого, как мир холивара. Для разных задач нужно делать по-разному. Фишка тут в том, что между условием и строкой №18 значение millis может измениться.
Поэтому, вопрос, что Вам реально нужно - обеспечит равные интервалы, в которые включаются и действия внутри условия (тогда - как у ТС) или равные задержки между действиями в условии (тогда везде писать голимый миллис без сохранения в переменной)
Westwood, Вам правда нужно добросовестно полазить и объективно оценить с кучей замечаний? Или начнёте обижаться, что "к мелочам цепляюсь" и мудаком назовёте? Плавали - знаем, потому и спрашиваю, прежде, чем время тратить.
я бы строку 15 выкинул переместив миллис в условие
Это тема старого, как мир холивара. Для разных задач нужно делать по-разному. Фишка тут в том, что между условием и строкой №18 значение millis может измениться.
Поэтому, вопрос, что Вам реально нужно - обеспечит равные интервалы, в которые включаются и действия внутри условия (тогда - как у ТС) или равные задержки между действиями в условии (тогда везде писать голимый миллис без сохранения в переменной)
чессказать даже не рассматривал такую ситуацию, мне просто не нравится 100500 присваиваний переменной в цикле, до выполнения условия, если есть цель, тогда да, но ТС не систему RTL жеж делает )))
Если вам интересна "эстетика" вопроса, я бы посоветовал минимизировать число объявлений, особенно глобальных, и все такие мелкие задачи решать минимумом текста. При достаточно длинном листинге Вы в них "утоните". Т.е. вместо
лучше просто
Хреновая программа для контроллера, поскольку создана на "похвалится", а не для работы.