За 3 часа примерно на полминуты отстали. Поставил int period=999; Посмотрим
Ухожу до воскресенья, можно будет поточнее посмотреть разницу.
Вы исправили вопрос с миллис ???
И вот такие хирурги нас режут! Причём, это не самые плохие. Тоска. (
Если тактироваться от резонатора на Nano, то и тысяч воскресений не хватит, чтобы подобрать формулу.
Четыре за сутки - нормально. Надо продумать систему удобной установки показанийдля ежесуточной коррекции.
if (millis()-ms_previous >= period) {
ms_previous+= period;
Так всеж правильней
Редактирование значений нужно переделать, чтоб происходило по кругу .
Минуты в сторону увеличения …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 выше.
Чтобы дефайнами не писать.
Тоже думал об этом, но не реализовал.
И с остальным я тоже согласен с Вами.
Благодарю за потраченное Вами время.
А зачем это ВООБЩЕ писать, хоть с дефайнами, хоть без?
А вот Вы о чём. Стартовое время хотел покрасивее оформить. Т.е. задумка такая, в момент прошивки устанавливаем текущее время и часы показывают реальное время.