часы стрелочные (ремейк)

Эдуард Анисимов

★★★★★★★
23 Сен 2019
2,547
1,014
60
Марий-Эл
Хорошая идея, особенно загоняние в сон. Только сначала сделай, потом я обьясню почему не получилось, Разговаривать с вами сложно. Вы такие крутые, а остальные такие бестолковые, ну и флаг в руки, загоняй в сон сначала stm а потом ЖК. И делай на L- ке, только с ножками правильно разберись (ваш совет).
Чувачок. Кажется ты уже хамишь в своём безрассудстве.
1793381024141.png

Держи список чипов, которые у меня есть и с которыми я работал. И засунь свой язык сам знаешь куда.

Сначала подумай на каком уровне находится человек посоветовавший писать под CubeIDE и на каком находишся ты когда пишешь такие ответы.
 
Изменено:

v.bay

✩✩✩✩✩✩✩
26 Окт 2026
12
0
Куда же она их читает если в ней в качестве аргументов пусто. скорее она готова читать, а читает она после условия и если оно выполняется, т.е. результат истина. Если условие фальш, то она читать их не будет, некуда. Фокус обойдет блок кода.
if (targetTime < millis()) {
hh = rtc.hour(); // грузим из rtc в рег-ы
mm = rtc.minute();
ss = rtc.second();
Week = rtc.dayOfWeek();
 
Изменено:

bort707

★★★★★★★
21 Сен 2020
3,550
1,010
@v.bay, я вам один раз напишу подробно. Но если опять будет реакция в стиле " я и без вас это все знаю", то больше никаких обсуждений не будет.

В библиотеке uRTClib, которую вы используете, все данные с RTC хранятся во внутренней структуре класса uRTCLib rtc. Весь обмен по i2c с модулем RTC происходит в функции refresh(), которая связывается с модулем и читает с него текущее значение времени, раскладывая его по внутренним переменным секунд, минут, часов, дней недели и тд.
Когда вы выполняете свои строки
C++:
hh = rtc.hour();  // грузим из rtc в рег-ы
mm = rtc.minute();
ss = rtc.second();
Week = rtc.dayOfWeek();
они, на самом деле, из RTC ничего не читают. Они просто копируют данные из переменных библиотеки, полученные при последнем обращении к функции refresh().

Таким образом, ваш код написан наоборот по сравнению с тем, как его надо было написать. Самая "тяжелая" функция работы с модулем часов - refresh() - вызывается при каждом входе в Loop(), в то время как обычное копирование данных из библиотеки в скетч - зачем то делается по условию.

То есть вы экономите не там. Вы там выше писали, что, чтобы уменьшить потребление, вы оформляли как функции 10-20 строк кода. А то что функция refresh(), в которой почти 300 строк и куча обращений к железу - у вас вызывается постоянно - вы не заметили.

============
Чтоб вам было понятнее, вот вам аналогия.
Допустим, у вас задача раз в сутки ставить в холодильник свежую бутылку пива. Для этого надо сходить в магазин, купить пиво, принести домой и поставить в холодильник.

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

Как сделано у вас в программе -вы сначала бежите в магазин, покупаете пиво и приносите домой (это функция refresh()). А придя домой, смотрите на часы (функция миллис). Если сутки прошли - ставите бутылку в холодильник (это ваши строчки hh = rtc.hour()), а если еще нет - выкидываете эту бутылку и сразу бежите за новой.
В итоге ваша программа целые сутки бегает в магазин и обратно (опрашивает часы), хотя могла просто сидеть и ждать и купить бутылку только тогда, когда пришло время.
 
Изменено:

v.bay

✩✩✩✩✩✩✩
26 Окт 2026
12
0
Вижу, держу, засуну, но вы все же попробуйте установить аддон на 151, и режим сна попробуйте. А на CubeIde можно пробовать любую stm. установить тактовую, подключить порты. АЦП, датчик, ну и много остального, она каждый раз показывает потребление. А вот компилировать не получится нужны файлы в репозиторий, ругается. Без проблем у меня только F103 и F446. потому что я их обживал очень давно, Тогда мы все братьями были.
В библиотеке uRTClib, которую вы используете, все данные с RTC хранятся во внутренней структуре класса uRTCLib rtc.
По моему это бред, uint32_t hh, mm, ss; uint8_t Week; вот переменные кторые созданы в Set,
hh = rtc.hour(); // грузим из rtc в рег-ы
mm = rtc.minute();
ss = rtc.second();
Week = rtc.dayOfWeek(); А вот данные с часов которыми переменные заполняются. А <uRTCLib.h> эта библитека, скорее всего и присваивает соответствие адреса регистров в RTC - имени (те самые идентификаторы) которыми пользоваться удобнее. чем лазить и искать адреса. У них даже
имена rtc.second. А про пиво это здорово доходчиво.
 
Изменено:

Эдуард Анисимов

★★★★★★★
23 Сен 2019
2,547
1,014
60
Марий-Эл
А на CubeIde можно пробовать любую stm. установить тактовую, подключить порты. АЦП, датчик, ну и много остального, она каждый раз показывает потребление. А вот компилировать не получится нужны файлы в репозиторий, ругается.
Мда. Так и не понял что я сказал. Какие нахрен аддоны? Какие репозитории? Почему не получится компилить? Я уже 10 лет компилю и не парюсь. Не примеряй ардуиновскую дребедень к профессиональной оболочке.
 

bort707

★★★★★★★
21 Сен 2020
3,550
1,010
Так куда же читает ф-я rtc.refresh(); // включить загрузку с rtc Если она без аргументов?.
ндя... я ведь пол-страницы это обьяснял... а без толку
Похоже, смотреть исходный код библиотеки вы и не пробовали. Или вообще не в курсе, что такое класс и что такое члены класса и методы.
Учите С++, может через год поймете.