uRTCLib
https://github.com/Naguissa/uRTCLib
uRTCLib.h
Go to the documentation of this file.
1 
26 #ifndef URTCLIB
27 
30  #define URTCLIB
31  #include "Arduino.h"
32  #include "Wire.h"
33 
39  #define URTCLIB_ADDRESS 0x68
40 
44  #define URTCLIB_MODEL_DS1307 1
45 
48  #define URTCLIB_MODEL_DS3231 2
49 
52  #define URTCLIB_MODEL_DS3232 3
53 
54 
55  /************ ALARM SELECTION: ***********/
56  //Note: Not valid for DS1307!
57 
61  #define URTCLIB_ALARM_TYPE_1_NONE 0b00100000
62 
66  #define URTCLIB_ALARM_TYPE_1_ALL_S 0b00010111
67 
71  #define URTCLIB_ALARM_TYPE_1_FIXED_S 0b00010110
72 
76  #define URTCLIB_ALARM_TYPE_1_FIXED_MS 0b00010100
77 
81  #define URTCLIB_ALARM_TYPE_1_FIXED_HMS 0b00010000
82 
86  #define URTCLIB_ALARM_TYPE_1_FIXED_DHMS 0b00000000
87 
91  #define URTCLIB_ALARM_TYPE_1_FIXED_DOWHMS 0b00001000
92 
96  #define URTCLIB_ALARM_TYPE_2_NONE 0b10100000
97 
101  #define URTCLIB_ALARM_TYPE_2_ALL_M 0b10001011
102 
106  #define URTCLIB_ALARM_TYPE_2_FIXED_M 0b10001010
107 
111  #define URTCLIB_ALARM_TYPE_2_FIXED_HM 0b10001000
112 
116  #define URTCLIB_ALARM_TYPE_2_FIXED_DHM 0b10000000
117 
121  #define URTCLIB_ALARM_TYPE_2_FIXED_DOWHM 0b10000100
122 
123 
127  #define URTCLIB_ALARM_1 URTCLIB_ALARM_TYPE_1_NONE
128 
132  #define URTCLIB_ALARM_2 URTCLIB_ALARM_TYPE_2_NONE
133 
134 
135  /************ SQWG SELECTION: ***********/
136 
142  #define URTCLIB_SQWG_OFF_0 0b11111111
143 
147  #define URTCLIB_SQWG_OFF_1 0b11111110
148 
152  #define URTCLIB_SQWG_1H 0b00000000
153 
159  #define URTCLIB_SQWG_1024H 0b00001000
160 
164  #define URTCLIB_SQWG_4096H 0b00010000
165 
169  #define URTCLIB_SQWG_8192H 0b00011000
170 
176  #define URTCLIB_SQWG_32768H 0b00000011
177 
178 
179  /************ TEMPERATURE ***********/
185  #define URTCLIB_TEMP_ERROR 32767
186 
187 
188  /************ MISC ***********/
189 
190 
194  #define uRTCLIB_decToBcd(val) ((uint8_t) ((val / 10 * 16) + (val % 10)))
195 
199  #define uRTCLIB_bcdToDec(val) ((uint8_t) ((val / 16 * 10) + (val % 16)))
200 
201  // ESP8266 yield function (ESP32 has no need for that)
202  #if ARDUINO_ARCH_ESP8266
203  #define uRTCLIB_YIELD yield();
204  #else
205 
210  #define uRTCLIB_YIELD
211  #endif
212 
213  class uRTCLib {
214  public:
215  /******* Constructors *******/
216  uRTCLib();
217  uRTCLib(const int);
218  uRTCLib(const int, const uint8_t);
219 
220  /******* RTC functions ********/
221  void refresh();
222  uint8_t second();
223  uint8_t minute();
224  uint8_t hour();
225  uint8_t day();
226  uint8_t month();
227  uint8_t year();
228  uint8_t dayOfWeek();
229  int16_t temp();
230  void set(const uint8_t, const uint8_t, const uint8_t, const uint8_t, const uint8_t, const uint8_t, const uint8_t);
231  void set_rtc_address(const int);
232  void set_model(const uint8_t);
233  uint8_t model();
234 
235  /******* Lost power ********/
236  bool lostPower();
237  void lostPowerClear();
238 
239  /******** Alarms ************/
240  bool alarmSet(const uint8_t, const uint8_t, const uint8_t, const uint8_t, const uint8_t); // Seconds will be ignored on Alarm 2
241  bool alarmDisable(const uint8_t);
242  bool alarmClearFlag(const uint8_t);
243  uint8_t alarmMode(const uint8_t);
244  uint8_t alarmSecond(const uint8_t);
245  uint8_t alarmMinute(const uint8_t);
246  uint8_t alarmHour(const uint8_t);
247  uint8_t alarmDayDow(const uint8_t);
248 
249  /*********** SQWG ************/
250  uint8_t sqwgMode();
251  bool sqwgSetMode(const uint8_t);
252 
253 
254  /************ RAM *************/
255  // Only DS1307 and DS3232.
256  // DS1307: Addresses 08h to 3Fh so we offset 08h positions and limit to 38h as maximum address
257  // DS3232: Addresses 14h to FFh so we offset 14h positions and limit to EBh as maximum address
258  byte ramRead(const uint8_t);
259  bool ramWrite(const uint8_t, byte);
260 
261  private:
262  // Address
263  int _rtc_address = URTCLIB_ADDRESS;
264  // RTC rad data
265  uint8_t _second = 0;
266  uint8_t _minute = 0;
267  uint8_t _hour = 0;
268  uint8_t _day = 0;
269  uint8_t _month = 0;
270  uint8_t _year = 0;
271  uint8_t _dayOfWeek = 0;
272  int16_t _temp = 9999;
273 
274  // Model, for alarms and RAM
275  uint8_t _model = URTCLIB_MODEL_DS3232;
276 
277  // Alarms:
278  uint8_t _a1_mode = URTCLIB_ALARM_TYPE_1_NONE;
279  uint8_t _a1_second = 0;
280  uint8_t _a1_minute = 0;
281  uint8_t _a1_hour = 0;
282  uint8_t _a1_day_dow = 0;
283 
284  uint8_t _a2_mode = URTCLIB_ALARM_TYPE_2_NONE;
285  uint8_t _a2_minute = 0;
286  uint8_t _a2_hour = 0;
287  uint8_t _a2_day_dow = 0;
288 
289  // SQWG
290  uint8_t _sqwg_mode = URTCLIB_SQWG_OFF_1;
291 
292  };
293 
294 #endif
295 
296 
bool ramWrite(const uint8_t, byte)
Writes a byte to RTC RAM.
Definition: uRTCLib.cpp:1136
bool alarmDisable(const uint8_t)
Disables an alarm.
Definition: uRTCLib.cpp:651
byte ramRead(const uint8_t)
Reads a byte from RTC RAM.
Definition: uRTCLib.cpp:1098
void lostPowerClear()
Clears lost power VBAT staus.
Definition: uRTCLib.cpp:266
uint8_t alarmMinute(const uint8_t)
Returns actual alarm minute.
Definition: uRTCLib.cpp:843
uint8_t year()
Returns actual year.
Definition: uRTCLib.cpp:364
#define URTCLIB_ALARM_TYPE_2_NONE
Alarm 2 - Disabled.
Definition: uRTCLib.h:96
bool lostPower()
Returns lost power VBAT staus.
Definition: uRTCLib.cpp:237
uRTCLib()
Constructor.
Definition: uRTCLib.cpp:34
uint8_t day()
Returns actual day.
Definition: uRTCLib.cpp:346
bool sqwgSetMode(const uint8_t)
Changes SQWG mode, including turning it off.
Definition: uRTCLib.cpp:948
#define URTCLIB_SQWG_OFF_1
SQWG OFF, keeps output hight.
Definition: uRTCLib.h:147
#define URTCLIB_MODEL_DS3232
Model definition, DS3232.
Definition: uRTCLib.h:52
#define URTCLIB_ALARM_TYPE_1_NONE
Alarm 1 - Disabled.
Definition: uRTCLib.h:61
uint8_t alarmDayDow(const uint8_t)
Returns actual alarm day or DOW.
Definition: uRTCLib.cpp:908
void set_rtc_address(const int)
Sets RTC i2 addres.
Definition: uRTCLib.cpp:383
uint8_t model()
Gets RTC Model.
Definition: uRTCLib.cpp:408
bool alarmClearFlag(const uint8_t)
Clears an alarm flag.
Definition: uRTCLib.cpp:706
#define URTCLIB_ADDRESS
Default RTC I2C address.
Definition: uRTCLib.h:39
uint8_t hour()
Returns actual hour.
Definition: uRTCLib.cpp:337
DS1307, DS3231 and DS3232 RTCs basic library.
Definition: uRTCLib.h:213
uint8_t sqwgMode()
Gets current SQWG mode.
Definition: uRTCLib.cpp:1083
uint8_t alarmMode(const uint8_t)
Returns actual alarm mode.
Definition: uRTCLib.cpp:779
uint8_t minute()
Returns actual minute.
Definition: uRTCLib.cpp:327
void refresh()
Refresh data from HW RTC.
Definition: uRTCLib.cpp:62
uint8_t second()
Returns actual second.
Definition: uRTCLib.cpp:318
uint8_t alarmSecond(const uint8_t)
Returns actual alarm second.
Definition: uRTCLib.cpp:811
int16_t temp()
Returns actual temperature.
Definition: uRTCLib.cpp:306
void set_model(const uint8_t)
Sets RTC Model.
Definition: uRTCLib.cpp:396
uint8_t dayOfWeek()
Returns actual Day Of Week.
Definition: uRTCLib.cpp:373
uint8_t month()
Returns actual month.
Definition: uRTCLib.cpp:355
uint8_t alarmHour(const uint8_t)
Returns actual alarm hour.
Definition: uRTCLib.cpp:876
bool alarmSet(const uint8_t, const uint8_t, const uint8_t, const uint8_t, const uint8_t)
Sets any alarm.
Definition: uRTCLib.cpp:484