Arduino-RTC
Real-Time Clock (RTC) library for Arduino
RTC.h
Go to the documentation of this file.
1 
19 #ifndef HARDWARE_AVR_RTC_H
20 #define HARDWARE_AVR_RTC_H
21 
25 class RTC {
26 public:
30  RTC() :
31  m_millis(0),
32  m_time(0)
33  {}
34 
39  bool tick()
40  {
41  uint16_t now = millis();
42  if (now - m_millis < 1000) return (false);
43  uint8_t sreg = SREG;
44  __asm__ __volatile__("cli" ::: "memory");
45  m_time += 1;
46  m_millis = now;
47  SREG = sreg;
48  __asm__ __volatile__("" ::: "memory");
49  return (true);
50  }
51 
56  {
57  uint8_t sreg = SREG;
58  __asm__ __volatile__("cli" ::: "memory");
59  time_t res = m_time;
60  SREG = sreg;
61  __asm__ __volatile__("" ::: "memory");
62  return (res);
63  }
64 
68  void set_time(time_t time)
69  {
70  uint8_t sreg = SREG;
71  __asm__ __volatile__("cli" ::: "memory");
72  m_time = time;
73  SREG = sreg;
74  __asm__ __volatile__("" ::: "memory");
75  }
76 
80  void get_time(struct tm& now)
81  {
82  time_t time = get_time();
83  gmtime_r(&time, &now);
84  }
85 
89  void set_time(struct tm& now)
90  {
91  extern long __utc_offset;
92  set_time(mktime(&now) + __utc_offset);
93  }
94 
95 protected:
97  volatile uint16_t m_millis;
98 
100  volatile time_t m_time;
101 };
102 
103 #endif
int32_t __utc_offset
Definition: set_zone.cpp:31
RTC()
Definition: RTC.h:30
volatile uint16_t m_millis
Definition: RTC.h:97
void get_time(struct tm &now)
Definition: RTC.h:80
time_t get_time()
Definition: RTC.h:55
time_t mktime(struct tm *timeptr)
Definition: mktime.cpp:35
bool tick()
Definition: RTC.h:39
struct tm * gmtime_r(const time_t *timer, struct tm *timeptr)
Definition: gmtime_r.cpp:33
void set_time(struct tm &now)
Definition: RTC.h:89
uint32_t time_t
Definition: time.h:30
void set_time(time_t time)
Definition: RTC.h:68
Definition: time.h:36
volatile time_t m_time
Definition: RTC.h:100
Definition: RTC.h:25