Некорректно отрабатывает задержка на millis()

Переосмыслил скетч, решил сделать задержку между чтениями данных с датчика.
Добавил флаг, указывающий на актуальность данных, полученных с датчика.
Получился следующий скетч:

#include <DHT.h>
#include <DHT_U.h>
#include <LiquidCrystal_1602_RUS.h>

LiquidCrystal_1602_RUS lcd(2, 3, 4, 5, 6, 7);
#define DHTPIN 8
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

float temperature;
float humidity;
bool isDataActual = false;

int READ_DELAY = 5000;

void setup() {
  Serial.begin(9600);
  dht.begin();
  lcd.begin(20, 4);
  lcd.setCursor(0, 0);
  lcd.print(F("Влажность: "));
  lcd.setCursor(0, 2);
  lcd.print(F("Температура: "));
}

void loop() {
  if (isDataActual) {
    lcd.setCursor(11, 0);
    lcd.print(humidity);
    lcd.print(F("%"));
    lcd.setCursor(13, 2);
    lcd.print(temperature);
    lcd.print(F("°C"));
    isDataActual = false;
  } else {
    readData();
  }
}

void readData() {
  static unsigned long lastDataReadTime = 0;
  unsigned long now = millis();
  if (lastDataReadTime > now) {
    lastDataReadTime = 0;
  }
  Serial.println(now);
  Serial.println(lastDataReadTime);
  if (now - lastDataReadTime >= READ_DELAY) {
    Serial.println(now - lastDataReadTime);
    float t = dht.readTemperature();
    float h = dht.readHumidity();
    Serial.println(t);
    Serial.println(h);
    if (!isnan(t) && !isnan(h)) {
      temperature = t;
      humidity = h;
      isDataActual = true;
      lastDataReadTime = now;
    } else {
      Serial.println(F("ERROR READING"));
    }
  }
}

Спустя некоторое кол-во времени работы функция millis() начинает возвращать одно и то же значение
Вывод порта

13:29:00.621 -> 100156
13:29:00.621 -> 100119
13:29:00.621 -> 100156
13:29:00.655 -> 100119
13:29:00.655 -> 100156
13:29:00.655 -> 100119
13:29:00.655 -> 100156
13:29:00.688 -> 100119

Ну, примерно, так оно и будет до тех пор, пока Вы не начнёте читать, что Вам пишут и удалять из кода явные глупости. Пока же такое ощущение, что Вы вообще не читаете, а только пишете сами.

Прочитал оставленный Вами ответ, решил попробовать использовать библиотеку TimeLib.
Кусок скетча

void loop() {
  Serial.println(second());
  Serial.println(minute());
  if (isDataActual) {
    lcd.setCursor(11, 0);
    lcd.print(humidity);
    lcd.print(F("%"));
    lcd.setCursor(13, 2);
    lcd.print(temperature);
    lcd.print(F("°C"));
    isDataActual = false;
  } else {
    readData();
  }
}

Вывод в порт первые 1 минуту 12 секунд корректный

14:29:36.446 -> 1
14:29:36.446 -> 0
14:29:36.446 -> 1
14:29:36.446 -> 0
14:29:36.446 -> 2
14:29:36.480 -> 0

Спустя 1 минуту 12 секунд выводит одни и те же значения уже на протяжении 5 минут

14:34:51.941 -> 12
14:34:51.941 -> 1
14:34:51.941 -> 12
14:34:51.941 -> 1

Также просьба ткнуть носом в кусок кода, где написаны явные глупости.

Мною? Боже упаси, это был ответ тупого ИИ и размещён исключительно для стёба над ним.

Вам уже писали

В последней версии эта же дурь осталась, только переползла в строки №№43-45. Из чего я сделал вывод, что Вы не читаете, что Вам пишут.

Ответ под вопросом оставили Вы. Кто источник информации в данном ответе - дело второе.
К тому же я новичок, так что распознавать сарказм в теме, в которой не являюсь опытным, не в моих силах (речь о переполнении millis).
Удалил строки 43-45, поведение не изменилось.
В какой-то момент начинает возвращать одни и те же значения

14:57:03.676 -> 0
14:57:03.676 -> 22
14:57:03.676 -> 0
14:57:03.676 -> 22
14:57:03.676 -> 0
14:57:03.676 -> 22
14:57:03.676 -> 0
14:57:03.676 -> 22
14:57:03.676 -> 0
14:57:03.709 -> 22
14:57:03.709 -> 0
14:57:03.709 -> 22
14:57:03.709 -> 0

Каким образом мешали указанные строки корректному выполнению кода - мне не понятно.
Их удаление не привело к желаемому результату.

Берете BlnkWithoutDelay, заряжаете на 2 секунды. Ставите println(millis()) и смотрите в монитор - ровно ходит или нет.
Затем суете туда DHT.
Все.

И не должно было. Это была просто глупость.

Вам много чего в этом деле непонятно, правда? Я попытаюсь объяснить. Если в системе что-то не работает, и в ней есть явные глупости, от них надо избавляться. Чем меньше останется глупостей (и чем меньше строк кода, кстати), тем скорее всё прояснится.

Я могу Вам помочь, но есть условие. Вы делаете точно то, что я скажу без заявлений, о том, что Вы не понимаете, как это влияет и без лишнего умничанья. Согласны? Я готов помочь, нет - разбирайтесь сами.

Ходит не ровно

15:15:22.146 -> 1000
15:15:23.146 -> 2000
15:15:23.915 -> 2765
15:15:24.933 -> 3765
15:15:25.932 -> 4765
15:15:26.939 -> 5765
15:15:27.217 -> 6049
15:15:27.400 -> 6252
15:15:28.414 -> 7252
15:15:29.424 -> 8252
15:15:30.417 -> 9252
15:15:31.418 -> 10252
/*
  Blink without Delay

  Turns on and off a light emitting diode (LED) connected to a digital pin,
  without using the delay() function. This means that other code can run at the
  same time without being interrupted by the LED code.

  The circuit:
  - Use the onboard LED.
  - Note: Most Arduinos have an on-board LED you can control. On the UNO, MEGA
    and ZERO it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN
    is set to the correct LED pin independent of which board is used.
    If you want to know what pin the on-board LED is connected to on your
    Arduino model, check the Technical Specs of your board at:
    https://www.arduino.cc/en/Main/Products

  created 2005
  by David A. Mellis
  modified 8 Feb 2010
  by Paul Stoffregen
  modified 11 Nov 2013
  by Scott Fitzgerald
  modified 9 Jan 2017
  by Arturo Guadalupi

  This example code is in the public domain.

  https://www.arduino.cc/en/Tutorial/BuiltInExamples/BlinkWithoutDelay
*/

// constants won't change. Used here to set a pin number:
const int ledPin = LED_BUILTIN;  // the number of the LED pin

// Variables will change:
int ledState = LOW;  // ledState used to set the LED

// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0;  // will store last time LED was updated

// constants won't change:
const long interval = 1000;  // interval at which to blink (milliseconds)

void setup() {
  // set the digital pin as output:
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // here is where you'd put code that needs to be running all the time.

  // check to see if it's time to blink the LED; that is, if the difference
  // between the current time and last time you blinked the LED is bigger than
  // the interval at which you want to blink the LED.
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;
    Serial.println(millis());

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
    }

    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
  }
}

ScreAmm поднял жуткий scream :slight_smile:

Да, согласен, спасибо.

Хорошо.

Тогда забудьте на время про свои датчики и оставьте пример, который у Вас ходит “неровно”. Только, давайте в нём ошибки поправим и вообще, сделаем его покошернееи поиформативнее:

Код
#define printVar(x) do { Serial.print(#x "="); Serial.print(x); Serial.print("; "); } while (false)
#define printVarLn(x) do { Serial.print(#x "="); Serial.println(x); } while (false)

void setup() {
  Serial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
	static unsigned long previousMillis = 0;
	static constexpr unsigned long interval = 1000;

	unsigned long currentMillis = millis();

	if (currentMillis - previousMillis >= interval) {
		previousMillis = currentMillis;
		printVar(currentMillis);
		printVar(previousMillis);
		printVarLn(interval);
		digitalWrite(LED_BUILTIN, ! digitalRead(LED_BUILTIN));
   }
}

Запустите и покажите мне Ваш код и лог из монитора порта.

Под “Ваш код” я понимаю копипасту из Вашего IDE. Выкладывайте его всегда, даже если Вы поменяли одну запятую или вовсе ничего не меняли, а код взяли у меня. Я всегда (без исключений!) должен видеть:

  1. копипасту кода из Вашего IDE;
  2. копипасту окна монитора порта из Вашего IDE.
Код
#define printVar(x) do { Serial.print(#x "="); Serial.print(x); Serial.print("; "); } while (false)
#define printVarLn(x) do { Serial.print(#x "="); Serial.println(x); } while (false)

void setup() {
  Serial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
	static unsigned long previousMillis = 0;
	static constexpr unsigned long interval = 1000;

	unsigned long currentMillis = millis();

	if (currentMillis - previousMillis >= interval) {
		previousMillis = currentMillis;
		printVar(currentMillis);
		printVar(previousMillis);
		printVarLn(interval);
		digitalWrite(LED_BUILTIN, ! digitalRead(LED_BUILTIN));
   }
}
Лог
15:40:42.948 -> currentMillis=63; previousMillis=63; interval=1000
15:40:43.356 -> currentMillis=468; previousMillis=468; interval=1000
15:40:44.356 -> currentMillis=1468; previousMillis=1468; interval=1000
15:40:44.987 -> currentMillis=2091; previousMillis=2091; interval=1000
15:40:45.020 -> currentMillis=2130; previousMillis=2130; interval=1000
15:40:46.019 -> currentMillis=3130; previousMillis=3130; interval=1000
15:40:47.016 -> currentMillis=4130; previousMillis=4130; interval=1000
15:40:48.018 -> currentMillis=5130; previousMillis=5130; interval=1000
15:40:48.103 -> currentMillis=5213; previousMillis=5213; interval=1000
15:40:49.102 -> currentMillis=6213; previousMillis=6213; interval=1000
15:40:49.216 -> currentMillis=6307; previousMillis=6307; interval=1000
15:40:49.676 -> currentMillis=6794; previousMillis=6794; interval=1000
15:40:49.846 -> currentMillis=6957; previousMillis=6957; interval=1000

Вот так будет поинформативнее

15:40:53.458 -> currentMillis=10566; previousMillis=10566; interval=1000
15:40:54.005 -> currentMillis=11094; previousMillis=11094; interval=1000
15:40:54.973 -> currentMillis=12094; previousMillis=12094; interval=1000
15:40:55.985 -> currentMillis=13094; previousMillis=13094; interval=1000
15:40:56.984 -> currentMillis=14094; previousMillis=14094; interval=1000
15:40:57.392 -> currentMillis=14500; previousMillis=14500; interval=1000
15:40:58.380 -> currentMillis=15500; previousMillis=15500; interval=1000
15:40:59.393 -> currentMillis=16500; previousMillis=16500; interval=1000
15:40:59.764 -> currentMillis=16852; previousMillis=16852; interval=1000
15:40:59.856 -> currentMillis=16974; previousMillis=16974; interval=1000
15:41:00.865 -> currentMillis=17974; previousMillis=17974; interval=1000
15:41:01.866 -> currentMillis=18974; previousMillis=18974; interval=1000
15:41:01.933 -> currentMillis=19042; previousMillis=19042; interval=1000
15:41:02.931 -> currentMillis=20042; previousMillis=20042; interval=1000
15:41:03.933 -> currentMillis=21042; previousMillis=21042; interval=1000
15:41:04.921 -> currentMillis=22042; previousMillis=22042; interval=1000
15:41:05.924 -> currentMillis=23042; previousMillis=23042; interval=1000
15:41:06.934 -> currentMillis=24042; previousMillis=24042; interval=1000
15:41:07.049 -> currentMillis=24151; previousMillis=24151; interval=1000
15:41:08.043 -> currentMillis=25151; previousMillis=25151; interval=1000
15:41:09.044 -> currentMillis=26151; previousMillis=26151; interval=1000
15:41:10.042 -> currentMillis=27151; previousMillis=27151; interval=1000
15:41:11.057 -> currentMillis=28151; previousMillis=28151; interval=1000
15:41:12.019 -> currentMillis=29139; previousMillis=29139; interval=1000
15:41:13.037 -> currentMillis=30139; previousMillis=30139; interval=1000
15:41:13.946 -> currentMillis=31045; previousMillis=31045; interval=1000
15:41:14.937 -> currentMillis=32045; previousMillis=32045; interval=1000
15:41:15.281 -> currentMillis=128; previousMillis=128; interval=1000
15:41:15.314 -> currentMillis=32385; previousMillis=32385; interval=1000
15:41:15.478 -> currentMillis=32586; previousMillis=32586; interval=1000
15:41:16.464 -> currentMillis=33586; previousMillis=33586; interval=1000
15:41:16.971 -> currentMillis=34086; previousMillis=34086; interval=1000
15:41:17.830 -> currentMillis=34938; previousMillis=34938; interval=1000
15:41:18.817 -> currentMillis=35938; previousMillis=35938; interval=1000
15:41:19.821 -> currentMillis=36938; previousMillis=36938; interval=1000
15:41:20.830 -> currentMillis=37938; previousMillis=37938; interval=1000
15:41:21.825 -> currentMillis=38938; previousMillis=38938; interval=1000
15:41:22.829 -> currentMillis=39938; previousMillis=39938; interval=1000
15:41:23.462 -> currentMillis=40574; previousMillis=40574; interval=1000
15:41:23.505 -> currentMillis=40615; previousMillis=40615; interval=1000
15:41:24.492 -> currentMillis=41615; previousMillis=41615; interval=1000
15:41:25.507 -> currentMillis=42615; previousMillis=42615; interval=1000
15:41:25.986 -> currentMillis=43088; previousMillis=43088; interval=1000
15:41:26.079 -> currentMillis=43170; previousMillis=43170; interval=1000
15:41:27.080 -> currentMillis=44170; previousMillis=44170; interval=1000
15:41:28.076 -> currentMillis=45170; previousMillis=45170; interval=1000
15:41:29.066 -> currentMillis=46170; previousMillis=46170; interval=1000
15:41:29.100 -> currentMillis=46171; previousMillis=46171; interval=1000
15:41:29.764 -> currentMillis=46860; previousMillis=46860; interval=1000
15:41:30.748 -> currentMillis=47860; previousMillis=47860; interval=1000
15:41:31.576 -> currentMillis=48685; previousMillis=48685; interval=1000
15:41:32.578 -> currentMillis=49685; previousMillis=49685; interval=1000
15:41:33.578 -> currentMillis=50685; previousMillis=50685; interval=1000
15:41:34.011 -> currentMillis=51119; previousMillis=51119; interval=1000
15:41:35.019 -> currentMillis=52119; previousMillis=52119; interval=1000
15:41:36.025 -> currentMillis=53120; previousMillis=53120; interval=1000
15:41:37.014 -> currentMillis=54120; previousMillis=54120; interval=1000
15:41:37.859 -> currentMillis=54971; previousMillis=54971; interval=1000
15:41:38.864 -> currentMillis=55971; previousMillis=55971; interval=1000
15:41:39.730 -> currentMillis=56837; previousMillis=56837; interval=1000
15:41:40.662 -> currentMillis=57769; previousMillis=57769; interval=1000
15:41:41.660 -> currentMillis=58769; previousMillis=58769; interval=1000
15:41:41.879 -> currentMillis=58986; previousMillis=58986; interval=1000
15:41:42.767 -> currentMillis=59878; previousMillis=59878; interval=1000
15:41:42.951 -> currentMillis=60081; previousMillis=59878; interval=1000
15:41:43.623 -> currentMillis=60081; previousMillis=59878; interval=1000
15:41:45.040 -> currentMillis=60081; previousMillis=60081; interval=1000
15:41:47.557 -> currentMillis=60081; previousMillis=60081; interval=1000
15:41:48.782 -> currentMillis=60081; previousMillis=60081; interval=1000
15:41:49.543 -> currentMillis=60081; previousMillis=60081; interval=1000
15:41:51.853 -> currentMillis=60081; previousMillis=60081; interval=1000
15:41:52.903 -> currentMillis=60081; previousMillis=60081; interval=1000
15:41:53.314 -> currentMillis=60081; previousMillis=60081; interval=1000
15:41:54.335 -> currentMillis=60081; previousMillis=60081; interval=1000
15:41:54.902 -> 60081; previousMillis=60081; interval=1000
15:41:55.025 -> currentMillis=60081; previousMillis=60081; interval=1000
15:41:55.596 -> currentMillis=60081; previousMillis=60081; interval=1000
15:41:55.674 -> currentMillis=60081; previousMillis=60081; interval=1000
15:41:56.769 -> currentMillis=60081; previousMillis=60081; interval=1000
15:41:56.861 -> currentMillis=60081; previousMillis=60081; interval=1000
15:41:57.707 -> currentMillis=60081; previousMillis=60081; interval=1000
15:41:58.318 -> currentMillis=60081; previousMillis=60081; interval=1000
15:41:59.039 -> currentMillis=60081; previousMillis=60081; interval=1000
15:41:59.224 -> currentMillis=60081; previousMillis=60081; interval=1000
15:41:59.994 -> currentMillis=60081; previousMillis=60081; interval=1000
15:42:03.303 -> currentMillis=60081; previousMillis=60081; interval=1000
15:42:04.118 -> currentMillis=60081; previousMillis=60081; interval=1000
15:42:06.610 -> currentMillis=60081; previousMillis=60081; interval=1000
15:42:06.818 -> currentMillis=60081; previousMillis=60081; interval=1000
15:42:07.438 -> currentMillis=60081; previousMillis=60081; interval=1000
15:42:09.167 -> currentMillis=60081; previousMillis=60081; interval=1000
15:42:09.589 -> currentMillis=60081; previousMillis=60081; interval=1000
15:42:11.050 -> currentMillis=60081; previousMillis=60081; interval=1000
15:42:12.048 -> currentMillis=60081; previousMillis=60081; interval=1000
15:42:12.087 -> currentMillis=177; previousMillis=177; interval=1000
15:42:12.401 -> currentMillis=60081; previousMillis=60081; interval=1000
15:42:13.955 -> currentMillis=60081; previousMillis=60081; interval=1000
15:42:14.943 -> currentMillis=60081; previousMillis=60081; interval=1000
15:42:19.675 -> currentMillis=60081; previousMillis=60081; interval=1000
15:42:20.688 -> currentMillis=60081; previousMillis=60081; interval=1000
15:42:21.712 -> currentMillis=60081; previousMillis=60081; interval=1000
15:42:21.942 -> currentMillis=60081; previousMillis=60081; interval=1000
15:42:22.810 -> currentMillis=60081; previousMillis=60081; interval=1000

Блин! Лопухнулся! Перенесите строку №16 на три строки ниже, чтобы она была после всех печатей. Извините. Запустите и выложите.

Код
#define printVar(x) do { Serial.print(#x "="); Serial.print(x); Serial.print("; "); } while (false)
#define printVarLn(x) do { Serial.print(#x "="); Serial.println(x); } while (false)

void setup() {
  Serial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
	static unsigned long previousMillis = 0;
	static constexpr unsigned long interval = 1000;

	unsigned long currentMillis = millis();

	if (currentMillis - previousMillis >= interval) {
		printVar(currentMillis);
		printVar(previousMillis);
		printVarLn(interval);
		previousMillis = currentMillis;
		digitalWrite(LED_BUILTIN, ! digitalRead(LED_BUILTIN));
   }
}
Лог
15:48:13.417 -> currentMillis=485; previousMillis=0; interval=1000
15:48:13.771 -> currentMillis=850; previousMillis=485; interval=1000
15:48:14.619 -> currentMillis=1701; previousMillis=850; interval=1000
15:48:15.618 -> currentMillis=2701; previousMillis=1701; interval=1000
15:48:16.173 -> currentMillis=3241; previousMillis=2701; interval=1000
15:48:17.145 -> currentMillis=4241; previousMillis=3241; interval=1000
15:48:18.154 -> currentMillis=5241; previousMillis=4241; interval=1000
15:48:19.147 -> currentMillis=6241; previousMillis=5241; interval=1000
15:48:19.375 -> currentMillis=6444; previousMillis=6241; interval=1000
15:48:20.375 -> currentMillis=7444; previousMillis=6444; interval=1000
15:48:20.668 -> currentMillis=7781; previousMillis=7444; interval=1000
15:48:21.709 -> currentMillis=8781; previousMillis=7781; interval=1000
15:48:22.710 -> currentMillis=9781; previousMillis=8781; interval=1000
15:48:23.694 -> currentMillis=10781; previousMillis=9781; interval=1000
15:48:24.694 -> currentMillis=11781; previousMillis=10781; interval=1000
15:48:25.694 -> currentMillis=12781; previousMillis=11781; interval=1000
15:48:26.696 -> currentMillis=13782; previousMillis=12781; interval=1000
15:48:27.696 -> currentMillis=14782; previousMillis=13782; interval=1000
15:48:28.144 -> currentMillis=15241; previousMillis=14782; interval=1000
15:48:28.712 -> currentMillis=15808; previousMillis=15241; interval=1000
15:48:29.722 -> currentMillis=16808; previousMillis=15808; interval=1000
15:48:29.847 -> currentMillis=16944; previousMillis=16808; interval=1000
15:48:30.847 -> currentMillis=17944; previousMillis=16944; interval=1000
15:48:31.858 -> currentMillis=18944; previousMillis=17944; interval=1000
15:48:31.927 -> currentMillis=19011; previousMillis=18944; interval=1000
15:48:32.328 -> currentMillis=19417; previousMillis=19011; interval=1000
15:48:33.161 -> currentMillis=20228; previousMillis=19417; interval=1000
15:48:34.156 -> currentMillis=21228; previousMillis=20228; interval=1000
15:48:35.155 -> currentMillis=22228; previousMillis=21228; interval=1000
15:48:35.987 -> currentMillis=23065; previousMillis=22228; interval=1000
15:48:36.989 -> currentMillis=24065; previousMillis=23065; interval=1000
15:48:38.003 -> currentMillis=25065; previousMillis=24065; interval=1000
15:48:38.371 -> currentMillis=25423; previousMillis=25065; interval=1000
15:48:39.370 -> currentMillis=26423; previousMillis=25423; interval=1000
15:48:39.445 -> currentMillis=26518; previousMillis=26423; interval=1000
15:48:40.458 -> currentMillis=27518; previousMillis=26518; interval=1000
15:48:41.466 -> currentMillis=28518; previousMillis=27518; interval=1000
15:48:41.949 -> currentMillis=28991; previousMillis=28518; interval=1000
15:48:42.937 -> currentMillis=29991; previousMillis=28991; interval=1000
15:48:43.523 -> currentMillis=30571; previousMillis=29991; interval=1000
15:48:44.289 -> currentMillis=31342; previousMillis=30571; interval=1000
15:48:45.290 -> currentMillis=32342; previousMillis=31342; interval=1000
15:48:46.265 -> currentMillis=33342; previousMillis=32342; interval=1000
15:48:47.295 -> currentMillis=34342; previousMillis=33342; interval=1000
15:48:48.294 -> currentMillis=35342; previousMillis=34342; interval=1000
15:48:48.556 -> currentMillis=35599; previousMillis=35342; interval=1000
15:48:49.547 -> currentMillis=36599; previousMillis=35599; interval=1000
15:48:50.562 -> currentMillis=37599; previousMillis=36599; interval=1000
15:48:50.976 -> currentMillis=38031; previousMillis=37599; interval=1000
15:48:51.561 -> currentMillis=38598; previousMillis=38031; interval=1000
15:48:51.684 -> currentMillis=38719; previousMillis=38598; interval=1000
15:48:52.684 -> currentMillis=39719; previousMillis=38719; interval=1000
15:48:52.806 -> currentMillis=39854; previousMillis=39719; interval=1000
15:48:53.768 -> currentMillis=40827; previousMillis=39854; interval=1000
15:48:53.813 -> currentMillis=40868; previousMillis=40827; interval=1000
15:48:54.302 -> currentMillis=41354; previousMillis=40868; interval=1000
15:48:55.301 -> currentMillis=42354; previousMillis=41354; interval=1000
15:48:56.296 -> currentMillis=43354; previousMillis=42354; interval=1000
15:48:57.302 -> currentMillis=44354; previousMillis=43354; interval=1000
15:48:58.301 -> currentMillis=45354; previousMillis=44354; interval=1000
15:48:58.558 -> currentMillis=45610; previousMillis=45354; interval=1000
15:48:59.558 -> currentMillis=46610; previousMillis=45610; interval=1000
15:49:00.558 -> currentMillis=47610; previousMillis=46610; interval=1000
15:49:01.319 -> currentMillis=48367; previousMillis=47610; interval=1000
15:49:01.351 -> currentMillis=48407; previousMillis=48367; interval=1000
15:49:02.338 -> currentMillis=49407; previousMillis=48407; interval=1000
15:49:03.354 -> currentMillis=50407; previousMillis=49407; interval=1000
15:49:04.372 -> currentMillis=51407; previousMillis=50407; interval=1000
15:49:04.881 -> currentMillis=51935; previousMillis=51407; interval=1000
15:49:05.738 -> currentMillis=52786; previousMillis=51935; interval=1000
15:49:06.748 -> currentMillis=53786; previousMillis=52786; interval=1000
15:49:07.748 -> currentMillis=54786; previousMillis=53786; interval=1000
15:49:08.287 -> currentMillis=55340; previousMillis=54786; interval=1000
15:49:08.966 -> currentMillis=56029; previousMillis=55340; interval=1000
15:49:09.099 -> currentMillis=56151; previousMillis=56029; interval=1000
15:49:09.221 -> currentMillis=56273; previousMillis=56151; interval=1000
15:49:09.342 -> currentMillis=56395; previousMillis=56273; interval=1000
15:49:10.347 -> currentMillis=57395; previousMillis=56395; interval=1000
15:49:11.022 -> currentMillis=58057; previousMillis=57395; interval=1000
15:49:11.694 -> currentMillis=58746; previousMillis=58057; interval=1000
15:49:11.853 -> currentMillis=58908; previousMillis=58746; interval=1000
15:49:11.945 -> currentMillis=58990; previousMillis=58908; interval=1000
15:49:13.164 -> 4236437142; previousMillis=58990; interval=1000
15:49:13.750 -> 4228048534; previousMillis=59030; interval=1000
15:49:15.636 -> 4228048534; previousMillis=59030; interval=1000
15:49:16.005 -> 4228048534; previousMillis=59030; interval=1000
15:49:16.144 -> 4228048534; previousMillis=59030; interval=1000
15:49:16.687 -> 4228048534; previousMillis=59030; interval=1000
15:49:17.913 -> 4228048534; previousMillis=59030; interval=1000
15:49:19.923 -> currentMillis=59030; previousMillis=59030; interval=1000
15:49:19.962 -> 4227989770; previousMillis=59030; interval=1000
15:49:21.603 -> currentMillis=59030; previousMillis=19862; interval=1000
15:49:21.788 -> 4228048534; previousMillis=59030; interval=1000
15:49:21.910 -> currentMillis=59030; previousMillis=59030; interval=1000
15:49:22.396 -> currentMillis=59030; previousMillis=59030; interval=1000
15:49:24.257 -> currentMillis=59030; previousMillis=59030; interval=1000
15:49:25.679 -> currentMillis=59030; previousMillis=59030; interval=1000
15:49:26.124 -> currentMillis=59030; previousMillis=59030; interval=1000
15:49:27.110 -> currentMillis=59030; previousMillis=59030; interval=1000
15:49:28.230 -> 4228048534; previousMillis=59030; interval=1000
15:49:28.399 -> currentMillis=59030; previousMillis=59030; interval=1000
15:49:28.431 -> 4227989770; previousMillis=59030; interval=1000
15:49:28.849 -> currentMillis=59030; previousMillis=12694; interval=1000
15:49:29.296 -> 4228048534; previousMillis=59030; interval=1000
15:49:29.621 -> currentMillis=59030; previousMillis=59030; interval=1000
15:49:30.718 -> 4228048534; previousMillis=59030; interval=1000
15:49:31.306 -> currentMillis=59030; previousMillis=59030; interval=1000
15:49:32.167 -> currentMillis=59030; previousMillis=59030; interval=1000
15:49:32.706 -> currentMillis=59030; previousMillis=59030; interval=1000
15:49:33.326 -> currentMillis=59030; previousMillis=59030; interval=1000

Т.е. Вы хотите сказать, что у нас при вот таких значения переменных

почему-то выполнилось условие

Ну, мы же с Вами взрослые люди и понимаем, что это бред!

Давайте так, чем Вы это компилируете, в какой среде (название, версия), для какой платы, на какой плате исполняете, все подробности.

И, да, кстати, добавьте слово const в начало строки №13. На скорость не влияет, но так правильнее.

Выдернул землю и 5V, идущие на макетную плату, к которой подключен датчик и дисплей.
Стало работать корректно…

15:57:26.279 -> currentMillis=4000; previousMillis=3000; interval=1000
15:57:27.279 -> currentMillis=5000; previousMillis=4000; interval=1000
15:57:28.276 -> currentMillis=6000; previousMillis=5000; interval=1000
15:57:29.279 -> currentMillis=7000; previousMillis=6000; interval=1000
15:57:30.264 -> currentMillis=8000; previousMillis=7000; interval=1000
15:57:31.282 -> currentMillis=9000; previousMillis=8000; interval=1000
15:57:32.283 -> currentMillis=10000; previousMillis=9000; interval=1000
15:57:33.282 -> currentMillis=11000; previousMillis=10000; interval=1000
15:57:34.268 -> currentMillis=12000; previousMillis=11000; interval=1000
15:57:35.281 -> currentMillis=13000; previousMillis=12000; interval=1000
15:57:36.270 -> currentMillis=14000; previousMillis=13000; interval=1000
15:57:37.270 -> currentMillis=15000; previousMillis=14000; interval=1000
15:57:38.270 -> currentMillis=16000; previousMillis=15000; interval=1000
15:57:39.271 -> currentMillis=17000; previousMillis=16000; interval=1000
15:57:40.266 -> currentMillis=18000; previousMillis=17000; interval=1000
15:57:41.266 -> currentMillis=19000; previousMillis=18000; interval=1000
15:57:42.262 -> currentMillis=20000; previousMillis=19000; interval=1000
15:57:43.266 -> currentMillis=21000; previousMillis=20000; interval=1000
15:57:44.266 -> currentMillis=22000; previousMillis=21000; interval=1000
15:57:45.265 -> currentMillis=23000; previousMillis=22000; interval=1000
15:57:46.260 -> currentMillis=24000; previousMillis=23000; interval=1000
15:57:47.262 -> currentMillis=25000; previousMillis=24000; interval=1000
15:57:48.266 -> currentMillis=26000; previousMillis=25000; interval=1000
15:57:49.265 -> currentMillis=27000; previousMillis=26000; interval=1000
15:57:50.281 -> currentMillis=28000; previousMillis=27000; interval=1000
15:57:51.265 -> currentMillis=29000; previousMillis=28000; interval=1000
15:57:52.265 -> currentMillis=30000; previousMillis=29000; interval=1000
15:57:53.270 -> currentMillis=31000; previousMillis=30000; interval=1000
15:57:54.265 -> currentMillis=32000; previousMillis=31000; interval=1000

Ну, ScreAmm ещё нормально взаимодействует, не то что некоторые (это комплимент).
Но я, обычно, вывожу на печать только изменения, а не всё подряд.

Хорошая тема, атмосферная такая… :rofl:

1 лайк

Схема подключения - был бы мой следующий вопрос, но раз уж пошла такая пьянка, то к вопросу о среде и плате, добавляется схема. Полностью, с питанием (или несколькими).

Пока рисуйте схему и описывайте среду, а код для будущих запусков давайте сделаем

Такой
#define printVar(x) do { Serial.print(#x "="); Serial.print(x); Serial.print("; "); } while (false)
#define printVarLn(x) do { Serial.print(#x "="); Serial.println(x); } while (false)

void setup() {
  Serial.begin(9600);
  Serial.println("Fun begins!");
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
	static unsigned long previousMillis = 0;
	static constexpr unsigned long interval = 1000;

	const unsigned long currentMillis = millis();

	if (currentMillis - previousMillis >= interval) {
		printVar(currentMillis);
		printVar(previousMillis);
		printVarLn(interval);
		previousMillis = currentMillis;
		digitalWrite(LED_BUILTIN, ! digitalRead(LED_BUILTIN));
   }
}