shSimpleClock - библиотека-часы

Библиотека позволяет легко и быстро создавать часы с использованием различных модулей часов реального времени (RTC), нескольких типов экранов и различным набором опций (календарь, будильник, датчики освещенности и температуры и т.д) на выбор пользователя.

Часы могут быть построены на базе модуля DS3231, DS1307, PCF8563 или PCF8523.

В часах могут быть использованы несколько типов экранов - как семисегментных индикаторов, так и светодиодных матриц.

Так же есть возможность использовать датчик освещенности в виде фоторезистора для автоматического снижения яркости экрана в темное время суток.

Часы могут выводить данные о температуре, при этом есть возможность использовать как внутренний датчик температуры микросхемы DS3231, так и внешние датчики.

В часах используются три кнопки для настройки поддерживаемых опций.

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

Все базовые настройки часов, как то: используемые модули, используемый набор опций, пины для подключения периферии - задаются в файле clockSetting.h, который нужно поместить в папку со скетчем.

С библиотекой идет образец этого файла.

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

Минимальный и достаточный скетч часов выглядит так:

#include "clockSetting.h"
#include <shSimpleClock.h> // https://github.com/VAleSh-Soft/shSimpleClock

// объявляем экземпляр часов
shSimpleClock simple_clock;

void setup()
{
  // инициализируем часы
  simple_clock.init();
}

void loop()
{
  // обработка событий часов
  simple_clock.tick();
}

Важно!!! - объявление файла clockSetting.h в скетче должно быть ДО объявления библиотеки shSimpleClock.h

Ссылка на библиотеку

Библиотека работает как на Atmega168/328 (на 168 атмеге - не весь набор опций, все может не поместиться), так и на esp8266/esp32

3 лайка

В код не вникал, но оформлено очень профессионально!

2 лайка

да, Владимир что то разошелся, респект!

1 лайк

Респект! Попробую.
ЗЫ Блин, пару недель назад написал все это для “пристроить” AТMEGA8 и дисплеи TM1637 с двоеточием. Датчик освещенности TEMT600 использовал, а не 5528.
Да и микрух 1302 и м41т82 тоже как грязи, куда их еще?

В Atmega8 не влезет

Упс… Ну еще есть 16-е в dip. 64 и 128 как-то жалко тратить на часы.

Есть еще

Эти в минимальной комплектации в 8 атмегу помещаются, возможно, с датчиком освещенности. Но не более.
И без загрузчика

Будильники и календари не нужны по сути, только время. На выходных попробую на атмегу8 прошить. Шью без загрузчика.

Что-то ты загнул
Часы на DS3231 + семисегментник ТМ1637 и плюс еще вот такие модули:
Screenshot from 2024-04-08 16-05-45

и то в атмегу88 входят :slight_smile:
(включая фонт в прогмем :slight_smile:

Простые часы на DS3231 + семисегментник ТМ1637 должны в 4к влезать :slight_smile:

Ну да, наворотил ))

Посмотрел внимательнее - размер понятен.
Во-первых свой таск-менеджер с эвентами. Во-вторых, “все-общая” библиотека на все RTC… плата за универсальность.
Я-то специфичную DS3231 юзал, она маленькая.

Я не ставил целью минимальный код - нужна была как раз универсальность. Чтобы все часы, какие есть или будут, прошивались одним кодом, с отличием только в настройках.

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

А так-то да, можно и в 4кБ попытаться вместить, только зачем? ))

У меня с RTC завязано только получение и установка даты/времени и получение температуры. Никаких заморочек

А где-то в доках про этот интерфейс можно почитать?

У мня такие в Attiny85 работают + там еще Dallas и 1 кнопка

Можно ))

Дык, по ресурсам от 8 атмеги не больно-то отличается ))

извиняюсь, ошибся, у меня такой модуль ТМ1638 с кнопками и светодиодами
Screenshot from 2024-04-08 16-30-49
Рекомендую, на нем очень удобный интерфейс установки времени и даты делается

дваиточия нет

у меня этот дисплей как интерфейс к часам из #9 - а то на блинкерах трудно быстро перелистывать цифры, когда время ставишь :slight_smile:

На таких модулях можено без двоеточия, через дефис ))

17-09-35

часы - минуты - секунды