Rev 21 | Details | Compare with Previous | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line | 
|---|---|---|---|
| 21 | jlesech | 1 | // Code by JeeLabs http://news.jeelabs.org/code/ | 
        
| 2 | // Released to the public domain! Enjoy! | 
        ||
| 3 | |||
| 4 | // Simple general-purpose date/time class (no TZ / DST / leap second handling!) | 
        ||
| 5 | class DateTime {  | 
        ||
| 6 | public:  | 
        ||
| 7 | DateTime (uint32_t t =0);  | 
        ||
| 8 | DateTime (uint16_t year, uint8_t month, uint8_t day,  | 
        ||
| 9 | uint8_t hour =0, uint8_t min =0, uint8_t sec =0);  | 
        ||
| 10 | DateTime (const char* date, const char* time);  | 
        ||
| 11 | uint16_t year() const { return 2000 + yOff; }  | 
        ||
| 12 | uint8_t month() const { return m; }  | 
        ||
| 13 | uint8_t day() const { return d; }  | 
        ||
| 14 | uint8_t hour() const { return hh; }  | 
        ||
| 15 | uint8_t minute() const { return mm; }  | 
        ||
| 16 | uint8_t second() const { return ss; }  | 
        ||
| 17 | uint8_t dayOfWeek() const;  | 
        ||
| 23 | jlesech | 18 | |
| 19 | void setYear(uint16_t year) { yOff = year - 2000; }  | 
        ||
| 20 | void setMonth(uint8_t month) { m = month; }  | 
        ||
| 21 | void setDay(uint8_t day) { d = day; }  | 
        ||
| 22 | void setHour(uint8_t hour) { hh = hour; }  | 
        ||
| 23 | void setMinute(uint8_t minute) { mm = minute; }  | 
        ||
| 24 | void setSecond(uint8_t second) { ss = second; }  | 
        ||
| 21 | jlesech | 25 | |
| 26 |     // 32-bit times as seconds since 1/1/2000 | 
        ||
| 27 | long secondstime() const;  | 
        ||
| 28 |     // 32-bit times as seconds since 1/1/1970 | 
        ||
| 29 | uint32_t unixtime(void) const;  | 
        ||
| 30 | |||
| 31 | protected:  | 
        ||
| 32 | uint8_t yOff, m, d, hh, mm, ss;  | 
        ||
| 33 | };  | 
        ||
| 34 | |||
| 35 | // RTC based on the DS1307 chip connected via I2C and the Wire library | 
        ||
| 36 | class RTC_DS1307 {  | 
        ||
| 37 | public:  | 
        ||
| 38 | static uint8_t begin(void);  | 
        ||
| 39 | static void adjust(const DateTime& dt);  | 
        ||
| 40 | uint8_t isrunning(void);  | 
        ||
| 41 | static DateTime now();  | 
        ||
| 42 | };  | 
        ||
| 43 | |||
| 44 | // RTC using the internal millis() clock, has to be initialized before use | 
        ||
| 45 | // NOTE: this clock won't be correct once the millis() timer rolls over (>49d?) | 
        ||
| 46 | class RTC_Millis {  | 
        ||
| 47 | public:  | 
        ||
| 48 | static void begin(const DateTime& dt) { adjust(dt); }  | 
        ||
| 49 | static void adjust(const DateTime& dt);  | 
        ||
| 50 | static DateTime now();  | 
        ||
| 51 | |||
| 52 | protected:  | 
        ||
| 53 | static long offset;  | 
        ||
| 54 | };  |