-
Notifications
You must be signed in to change notification settings - Fork 0
/
DateTime.cpp
107 lines (87 loc) · 2.12 KB
/
DateTime.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include "DateTime.h"
#include <Wire.h>
#include <ErriezDS3231.h>
#include <SPI.h>
// Create RTC object
ErriezDS3231 rtc;
#define DATE_STRING_SHORT 3
// month names in flash
const char monthNames_P[] PROGMEM = "JanFebMarAprMayJunJulAugSepOctNovDec";
// Day of the week names in flash
const char dayNames_P[] PROGMEM= "SunMonTueWedThuFriSat";
int _hour;
int _min;
int _sec;
int _mday;
int _mon;
int _year;
int _wday;
DateTime::DateTime() {
}
void DateTime::init() {
// Initialize I2C for RTC
Wire.begin();
Wire.setClock(100000);
delay(200);
// Initialize RTC
while (!rtc.begin()) {
Serial.println(F("RTC not found"));
delay(3000);
}
// Set square wave out pin
rtc.setSquareWave(SquareWaveDisable);
}
bool DateTime::readDateTime() {
// Read date/time
if (!rtc.getDateTime(&_hour, &_min, &_sec, &_mday, &_mon, &_year, &_wday)) {
return false;
}
return true;
}
char* DateTime::getDayString(char *day) {
// Print day week
strncpy_P(day, &(dayNames_P[_wday * DATE_STRING_SHORT]), DATE_STRING_SHORT);
day[DATE_STRING_SHORT] = '\0';
return day;
}
char* DateTime::getDayString(char *day, int wDay) {
// Print day week
strncpy_P(day, &(dayNames_P[wDay * DATE_STRING_SHORT]), DATE_STRING_SHORT);
day[DATE_STRING_SHORT] = '\0';
return day;
}
char* DateTime::getTimeString(char *_time) {
char hourString [4];
char minString [4];
if(_hour < 10){
sprintf (hourString, "0%i:", _hour) ;
}else{
sprintf (hourString, "%i:", _hour) ;
}
if(_min < 10){
sprintf (minString, "0%i", _min) ;
}else{
sprintf (minString, "%i", _min) ;
}
strcpy(_time, &hourString[0]);
strcat(_time, &minString[0]);
return _time;
}
int DateTime::getHour() {
return _hour;
}
int DateTime::getMin() {
return _min;
}
int DateTime::getWeekDay() {
return _wday;
}
void DateTime::setHour(uint8_t hour) {
rtc.setTime(hour, _min, _sec);
}
void DateTime::setMin(uint8_t min) {
rtc.setTime(_hour, min, _sec);
}
void DateTime::setDay(uint8_t day) {
rtc.setDateTime(_hour, _min, _sec, _mday, _mon, _year, day);
}