Библиотека позволяет легко и быстро создавать часы с использованием различных модулей часов реального времени (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