Я понимаю, вопрос заезженный но всё таки задам.
Пытаюсь с помощью 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.
Счастливого пути!