Skip to content

Commit

Permalink
upd2.5
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexGyver committed Jul 17, 2021
1 parent 6dc2175 commit 9180bd3
Show file tree
Hide file tree
Showing 10 changed files with 116 additions and 48 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ MicroDS3231 rtc(адрес); // указать свой адрес
<a id="usage"></a>
## Использование
```cpp
bool begin(); // инициализация, вернет true, если RTC найден
void setTime(uint8_t param); // установка времени == времени компиляции
void setTime(DateTime time); // установить из структуры DateTime
void setTime(int8_t seconds, int8_t minutes, int8_t hours, int8_t date, int8_t month, int16_t year); // установка времени
Expand Down Expand Up @@ -130,6 +131,7 @@ void printTime() {
- v2.2 - исправлены дни недели (пн-вс 1-7)
- v2.3 - небольшие исправления, оптимизация, изменён порядок вывода даты
- v2.4 - исправлена установка времени компиляции
- v2.5 - добавлен begin для проверки наличия модуля на линии

<a id="feedback"></a>
## Баги и обратная связь
Expand Down
17 changes: 14 additions & 3 deletions examples/DS3231_demo/DS3231_demo.ino
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,22 @@ MicroDS3231 rtc;
void setup() {
Serial.begin(9600);

if (rtc.lostPower()) { // при потере питания
rtc.setTime(COMPILE_TIME); // установить время компиляции
// проверка наличия модуля на линии i2c
if (!rtc.begin()) {
Serial.println("DS3231 not found");
for(;;);
}

// АВТОМАТИЧЕСКАЯ УСТАНОВКА ВРЕМЕНИ
if (rtc.lostPower()) { // при потере питания
//rtc.setTime(COMPILE_TIME); // установить время компиляции ("тяжёлый" способ!!!)

// визуально громоздкий, но более "лёгкий" с точки зрения памяти способ установить время компиляции
rtc.setTime(BUILD_SEC, BUILD_MIN, BUILD_HOUR, BUILD_DAY, BUILD_MONTH, BUILD_YEAR);
}

//rtc.setTime(SEC, MIN, HOUR, DAY, MONTH, YEAR); // устанвока времени вручную
//rtc.setTime(SEC, MIN, HOUR, DAY, MONTH, YEAR); // установка времени вручную, числами или переменными
//rtc.setHMSDMY(HOUR, MIN, SEC, DAY, MONTH, YEAR); // установка времени вручную, более привычный порядок
}

void loop() {
Expand Down
6 changes: 6 additions & 0 deletions examples/DateTime/DateTime.ino
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,12 @@ MicroDS3231 rtc;

void setup() {
Serial.begin(9600);

// проверка наличия модуля на линии i2c
if (!rtc.begin()) {
Serial.println("DS3231 not found");
for(;;);
}

// получаем все данные в структуру
DateTime now = rtc.getTime();
Expand Down
23 changes: 0 additions & 23 deletions examples/RTClib comparsion/testDS3231_RTClib/testDS3231_RTClib.ino

This file was deleted.

21 changes: 0 additions & 21 deletions examples/RTClib comparsion/testDS3231micro/testDS3231micro.ino

This file was deleted.

1 change: 1 addition & 0 deletions keywords.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ DateTime KEYWORD1
#######################################
# Methods and Functions (KEYWORD2)
#######################################
begin KEYWORD2
setTime KEYWORD2
setHMSDMY KEYWORD2
getTime KEYWORD2
Expand Down
2 changes: 1 addition & 1 deletion library.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name=microDS3231
version=2.4
version=2.5
author=AlexGyver <[email protected]>
maintainer=AlexGyver <[email protected]>
sentence=Light library for DS3231 RTC module
Expand Down
83 changes: 83 additions & 0 deletions src/buildTime.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
/*
Парсинг и получение даты и времени компиляции из __DATE__ и __TIME__
Документация:
GitHub: https://github.com/GyverLibs/buildTime
Константы времени компиляции:
BUILD_YEAR - год
BUILD_MONTH - месяц
BUILD_DAY - день
BUILD_HOUR - час
BUILD_MIN - минута
BUILD_SEC - секунда
Исходник http://qaru.site/questions/186859/how-to-use-date-and-time-predefined-macros-in-as-two-integers-then-stringify
AlexGyver, [email protected]
https://alexgyver.ru/
MIT License
Версии:
v1.0 - релиз
*/


#ifndef buildTime_h
#define buildTime_h
// Example of __DATE__ string: "Jul 27 2012"
// 01234567890

#define BUILD_YEAR_CH0 (__DATE__[7]-'0')
#define BUILD_YEAR_CH1 (__DATE__[8]-'0')
#define BUILD_YEAR_CH2 (__DATE__[9]-'0')
#define BUILD_YEAR_CH3 (__DATE__[10]-'0')
#define BUILD_YEAR (BUILD_YEAR_CH0*1000+BUILD_YEAR_CH1*100 + BUILD_YEAR_CH2*10+BUILD_YEAR_CH3)

#define BUILD_MONTH_IS_JAN (__DATE__[0] == 'J' && __DATE__[1] == 'a' && __DATE__[2] == 'n')
#define BUILD_MONTH_IS_FEB (__DATE__[0] == 'F')
#define BUILD_MONTH_IS_MAR (__DATE__[0] == 'M' && __DATE__[1] == 'a' && __DATE__[2] == 'r')
#define BUILD_MONTH_IS_APR (__DATE__[0] == 'A' && __DATE__[1] == 'p')
#define BUILD_MONTH_IS_MAY (__DATE__[0] == 'M' && __DATE__[1] == 'a' && __DATE__[2] == 'y')
#define BUILD_MONTH_IS_JUN (__DATE__[0] == 'J' && __DATE__[1] == 'u' && __DATE__[2] == 'n')
#define BUILD_MONTH_IS_JUL (__DATE__[0] == 'J' && __DATE__[1] == 'u' && __DATE__[2] == 'l')
#define BUILD_MONTH_IS_AUG (__DATE__[0] == 'A' && __DATE__[1] == 'u')
#define BUILD_MONTH_IS_SEP (__DATE__[0] == 'S')
#define BUILD_MONTH_IS_OCT (__DATE__[0] == 'O')
#define BUILD_MONTH_IS_NOV (__DATE__[0] == 'N')
#define BUILD_MONTH_IS_DEC (__DATE__[0] == 'D')

#define BUILD_MONTH \
( \
(BUILD_MONTH_IS_JAN) ? 1 : \
(BUILD_MONTH_IS_FEB) ? 2 : \
(BUILD_MONTH_IS_MAR) ? 3 : \
(BUILD_MONTH_IS_APR) ? 4 : \
(BUILD_MONTH_IS_MAY) ? 5 : \
(BUILD_MONTH_IS_JUN) ? 6 : \
(BUILD_MONTH_IS_JUL) ? 7 : \
(BUILD_MONTH_IS_AUG) ? 8 : \
(BUILD_MONTH_IS_SEP) ? 9 : \
(BUILD_MONTH_IS_OCT) ? 10 : \
(BUILD_MONTH_IS_NOV) ? 11 : \
(BUILD_MONTH_IS_DEC) ? 12 : \
/* error default */ '?' \
)

#define BUILD_DAY_CH0 (((__DATE__[4] >= '0') ? (__DATE__[4]) : '0')-'0')
#define BUILD_DAY_CH1 (__DATE__[5]-'0')
#define BUILD_DAY (BUILD_DAY_CH0*10+BUILD_DAY_CH1)

// Example of __TIME__ string: "21:06:19"
// 01234567

#define BUILD_HOUR_CH0 (__TIME__[0]-'0')
#define BUILD_HOUR_CH1 (__TIME__[1]-'0')
#define BUILD_HOUR (BUILD_HOUR_CH0*10+BUILD_HOUR_CH1)

#define BUILD_MIN_CH0 (__TIME__[3]-'0')
#define BUILD_MIN_CH1 (__TIME__[4]-'0')
#define BUILD_MIN (BUILD_MIN_CH0*10+BUILD_MIN_CH1)

#define BUILD_SEC_CH0 (__TIME__[6]-'0')
#define BUILD_SEC_CH1 (__TIME__[7]-'0')
#define BUILD_SEC (BUILD_SEC_CH0*10+BUILD_SEC_CH1)

#endif
6 changes: 6 additions & 0 deletions src/microDS3231.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,12 @@ MicroDS3231::MicroDS3231(uint8_t addr) : _addr(addr) {
Wire.begin();
}

bool MicroDS3231::begin(void){
Wire.begin(); // Инит шины
Wire.beginTransmission(_addr); // Зовем DS3231 по адресу
return (!Wire.endTransmission()); // если никто не откликнулся - возвращаем false
}

void MicroDS3231::setTime(int8_t seconds, int8_t minutes, int8_t hours, int8_t date, int8_t month, int16_t year) {
// защиты от дурака
month = constrain(month, 1, 12);
Expand Down
3 changes: 3 additions & 0 deletions src/microDS3231.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,14 @@
v2.2 - исправлены дни недели (пн-вс 1-7)
v2.3 - небольшие исправления, оптимизация, изменён порядок вывода даты
v2.4 - исправлена установка времени компиляции
v2.5 - добавлен begin для проверки наличия модуля на линии
*/

#ifndef microDS3231_h
#define microDS3231_h
//#include <microWire.h> // выбор между библиотеками Wire и microWire
#include <Wire.h>
#include "buildTime.h"

#include <Arduino.h>
#define COMPILE_TIME F(__TIMESTAMP__)
Expand All @@ -43,6 +45,7 @@ struct DateTime {
class MicroDS3231 {
public:
MicroDS3231(uint8_t addr = 0x68); // конструктор. Можно передать адрес
bool begin(void); // инициализация, вернет true, если RTC найден
void setTime(const __FlashStringHelper* stamp); // установка времени == времени компиляции
void setTime(DateTime time); // установить из структуры DateTime
void setTime(int8_t seconds, int8_t minutes, int8_t hours, int8_t date, int8_t month, int16_t year); // установка времени
Expand Down

0 comments on commit 9180bd3

Please sign in to comment.