Millis не работает?

Добрый день.Имеется код с такой частью:

unsigned int timer = millis();

void setup() {
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("Temnep.:");
  //  lcd.setCursor(1, 1);
  //lcd.print("Arduino Uno");
}

void loop() {
  lcd.setCursor(0, 1);
  lcd.print("Bp.pa6:");
  lcd.print(millis() / 1000);
  lcd.setCursor(9, 0);
  if (millis() - timer >= 1000) {

    timer = millis();
    if (sensor.readTemp()) {
      temp = sensor.getTemp();
      lcd.print(temp, 1);
      lcd.print(char(223));
      lcd.print("C ");
    } else lcd.print("none  ");
    sensor.requestTemp();
  }
}

Но датчик температуры (ds18b20), если его нагревать, начинает обновлять данные гораздо быстрее, чем 1р/сек. Не могу понять, в чем ошибка. Думал, что таймер может быстро считается, вывел секунды - нет, идут вроде норм. Помогите разобраться, пожалуйста.

UPD: убрал в начале “=millis()” и привёл к виду:
unsigned long timer;
u вроде стало обновляться нормально. Но почему изначально не работало - непонятно.

Это все броуновское движение сбивает алгоритм с панталыку. Энтропия повышается и капец миллису.

А какой тип возвращает millis() ???

Думаю, что long. Это имеет значение? Ведь long до какого-то значения вписывается в диапазон. Да и если присваивание значения не происходит, то как тогда выполняется условие if?

Просто через 65 секунд millis() ВСЕГДА будет больше чем timer более чем на 1000 !
Со знаковым imt это происходило уже после 33 секунд …

Не знаете какой тип ставить - пробуйте тип auto и пусть компилятор думает !!!

2 лайка

Хорошо что хоть не переполняется !!!

1 лайк

Конечно, переполняется!! Нужно быть оптимистом во всем!

1 лайк