Подсчёт секунд с помощью millis()

Я понимаю, вопрос заезженный но всё таки задам.

Пытаюсь с помощью millis() секунды посчитать однако счёт идёт не по секундам а по циклам. На фото можно видеть системное время и как идёт счёт.

аднака, static нужен. Ну и секунды так, через жо, не считают добрые луди.

Нежели скопипастить код и вывод сериала и выложить текстом настолько сложно?

Кланяюсь, про статик я и не подумал.

Мне больше интересно - Зачем с миллис связываться, если я вижу выше что имеется модуль реального времени. Чо с него то не берется?

первый раз

Неспортивно! С модулем РВ и дурак сделает!

Да да.

  • Чтобы продать что-то ненужное - нужно купить что-то ненужное. А у нас денег нет!

МРВ пожелал всего самого наилучшего, а делать надо. Пока таким обходимся

Тогда нужно выпаивать штатный 16-ти мгц кварц и вместо него ставить часовой. Иначе от миллиса толку не будет. +/- лапоть.

Новичок, сразу видно. Немного попривыкнет - поймёт, что покупать что-то по 1 шт и глупо и дорого. Нужно всегда иметь запасные части.

Нахрена? Чтобы ничего не работало (от сериала и далее везде, типа цифровых датчиков, неопикселей, виртуал-вайр и т.д. и т.п.)?

Если уж так приспичило иметь именно часовой кварц, нужно просто делать на нём генератор и от него тактировать один из таймеров (0-ой или лучше 1-ый, чтобы миллис не ломать). Тогда мы жертвуем только шимом на этом таймере, а всё остальное работает как работало.

… или просто заказываем

https://www.ozon.ru/product/ds3231-rtc-modul-chasov-realnogo-vremeni-i2c-2809952733/

И завтра забираем. А чтобы было по дешевле - заказываем на али сразу десяток (а так «рублём» набираемся опыта всегда иметь запасные части)…

Раз новичок, значит обычная Ардуино на AVR. А у неё асинхронный таймер для часового кварца только вместо основного кварца и никак иначе. А тогда тактирование делается от intrc. Тогда и Serial работает и всё остальное. Это бюджетно, но только не для начинающего.)

а если так?

unsigned long timer;
uint32_t cycle = millis();
uint32_t sec = 0;

void loop() {
 timer = millis();
 if ( (timer - cycles) > 1000) {
  sec++;
  cycle = timer;
 }
 Serial.println(sec);
}

Точно. Одна нога для такт. CPU и таймера.
Однако, никто не мешает ТС-у сделать внешний генератор, и, скажем, дёргать свободную ногу раз в сек.))

Да нормально. Только timer не нужно делать глобальной - достаточно сделать static и разместить в loop().

И в 7 строке использовать вместо “больше” - “больше или равно”

if ( (timer - cycles) >= 1000)

“Это не наш метод”.

Благодарю за бурное обсуждение. Я сейчас запустить хочу, а далее уйду на малину или esp.

Счастливого пути!