Проблема с простым таймером на основе millis()
Извините за беспокойство, но я совсем сошел с ума. Я экспериментирую с таймерами и начинаю очень просто. Предполагается, что следующий код печатает содержимое переменной каждый раз, когда проходит интервал времени, а затем обновляет эту переменную. Но по какой-то причине я не получаю вывода на последовательный монитор.
Я уже использовал последовательный монитор в других проектах без проблем, поэтому не уверен, в чем может быть проблема.
Есть ли какая-то ошибка в моем коде?
unsigned long previousMillis = 0;
unsigned long currentMillis = millis();
const long interval = 1000;
void setup() {
Serial.begin(9600);
}
void loop() {
if (currentMillis - previousMillis >= interval) {
Serial.println(previousMillis);
previousMillis = currentMillis;
}
else {
;
}
}
// previousMillis += interval;
1 ответ
Лучший ответ:
Поскольку currentMillis
- это всего лишь простая переменная, она не будет автоматически обновляться. На самом деле инициализация с помощью millis()
в глобальной области видимости не нужна. Просто инициализируйте значение 0. В то время, когда создаются глобальные переменные, время в любом случае равно 0 мс.
Вам нужно обновлять переменную currentMillis каждый раз, прежде чем использовать ее. Так что просто вставьте
currentMillis = millis();
прямо в начале функции loop ()
.
Еще раз спасибо за вашу помощь., @Zhelyazko Grudov
- Использование millis() и micros() внутри процедуры прерывания
- Кнопка с таймером переключения и функцией сброса времени + светодиод обратной связи
- Использовать timer0, не влияя на millis() и micros().
- Сброс Arduino с помощью ПО (каждый день)
- Как отслеживать миллисекунды в спящем режиме
- Отрегулируйте расчет времени после изменения частоты Timer0
- Обратный отсчет когда-нибудь остановится
- Нельзя использовать millis() вместо задержки
Простая проблема: вы нигде не обновляете переменную currentMillis. Его значение не обновляется волшебным образом, когда вы однажды присвоили ему значение
millis ()
. ВставьтеcurrentMillis = millis()
прямо в начало функцииloop ()
., @chrislСпасибо вам за ваш ответ. Я думал, что он автоматически обновляется с последним значением millis() постоянно. Таким образом, он будет обновляться только на каждой итерации цикла? Если вы хотите опубликовать этот ответ, я могу принять его, если это имеет для вас какое-то значение, потому что это очень полезно для меня., @Zhelyazko Grudov