Примитивные часы. Два пути

За 3 часа примерно на полминуты отстали. Поставил int period=999; Посмотрим :slight_smile: Ухожу до воскресенья, можно будет поточнее посмотреть разницу.

Вы исправили вопрос с миллис ???

И вот такие хирурги нас режут! Причём, это не самые плохие. Тоска. (

Если тактироваться от резонатора на Nano, то и тысяч воскресений не хватит, чтобы подобрать формулу.

1 лайк

Четыре за сутки - нормально. Надо продумать систему удобной установки показанийдля ежесуточной коррекции.

if (millis()-ms_previous >= period) {
  ms_previous+= period;

Так всеж правильней

1 лайк

Редактирование значений нужно переделать, чтоб происходило по кругу .
Минуты в сторону увеличения …58, 59, 0, 1, 2… и в сторону уменьшения …2, 1, 0, 59, 58…

@Pyotr ТС из разряда писателей … наши правки ему до лампочки !!!

Талмуды рекомендуют так:

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

Для кода ТС разницы нет. Но представим, что прошло 999 мс, в условие мы не попадаем, но выполняется другой тормознутый код 5 мс.
Следующий Луп - прошло 1004 мс и мы попадаем в условие и у нас появилась ошибка +4 мс.
А если прибавлять interval , то следующее условие сработает через 996 мс .

В коде ТС вообще гарантированная ошибка каждую секунду …

Полминуты за 180 минут, это 1/360 - намного больше, (1000-999)/1000. Надо было ставить где-то 997, а еще лучше - последовать совету Командира.

А причем тут дети? Я говорил про народ, кто уже прошел стадию школы и института. Это мы когда то начинали с Ёмкостной Трёхточки. Но сегодня то даже начинать примитив надо несколько с других стартовых позиций. Не тратя время на чтение журнала Радио за 1970 год. Это моё личное мнение.

Я понимаю, что влез в тему ТС ) Но может мой скетч кто-нибудь покритикует?

Ну, так у тебя ж на миллисе ведь. А это точность +/- лапоть.
А так что там смотреть. Индикация и всё тут.

Так я ж и говорю что это аналог блинка для начинающих. Другое дело, что головоломки можно всегда решать, в любом возрасте, дабы не застаиваться.) А учиться никогда не поздно.) Другое дело что лениво со временем…

Он идеален. Не хватает кнопки для оперативной коррекции показаний хотя бы для минут.

Вообще-то такие просьбы IMHO надо располагать в разделе Ищу исполнителя.

Вот это вообще зачем?

Строки с 10 по 47 могу предложить в следующей редакции:

void goSMH(uint8_t myValue, uint8_t position) {
   lcd.setCursor(position,0);
   if (myValue < 10) {
      lcd.print("0");
   }
   lcd.print(myValue);
}

Строка 60: interval лучше определить как const.
Строка 67 неверная, должно быть previousMillis += interval;
Строка 86: по хорошему здесь надо не тупо присваивать 0, а присваивать (currentMillis - previousMillis)/ interval с последующей коррекцией previousMillis при необходимости.
Ну и все строки 83, 87, 90, 94, 97 и 101 подправить в соответствии с правкой функции goSMH выше.

Чтобы дефайнами не писать.

Тоже думал об этом, но не реализовал.

И с остальным я тоже согласен с Вами.

Благодарю за потраченное Вами время.

А зачем это ВООБЩЕ писать, хоть с дефайнами, хоть без?

А вот Вы о чём. Стартовое время хотел покрасивее оформить. Т.е. задумка такая, в момент прошивки устанавливаем текущее время и часы показывают реальное время.