/elec/propeller-clock

To get this branch, use:
bzr branch http://bzr.ed.am/elec/propeller-clock

« back to all changes in this revision

Viewing changes to src/time.cc

  • Committer: edam
  • Date: 2011-11-04 13:48:15 UTC
  • Revision ID: edam@waxworlds.org-20111104134815-kj7qdhqfbxaj1tng
finished writing up electronics notes

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#include "time.h"
2
 
#include <DS1307.h>
3
 
#include <Wire.h>
4
 
 
5
 
 
6
 
Time &Time::get_instance()
7
 
{
8
 
        static Time time;
9
 
        return time;
10
 
}
11
 
 
12
 
 
13
 
int Time::get_hours()
14
 
{
15
 
        return _hours;
16
 
}
17
 
 
18
 
 
19
 
int Time::get_minutes()
20
 
{
21
 
        return _minutes;
22
 
}
23
 
 
24
 
 
25
 
int Time::get_seconds()
26
 
{
27
 
        return _seconds;
28
 
}
29
 
 
30
 
 
31
 
void Time::update()
32
 
{
33
 
        // how many milliseonds have elapsed since we last checked?
34
 
        unsigned long millis = ::millis();
35
 
        unsigned long delta = millis - _last_millis + _carry;
36
 
 
37
 
        // update the previous time and carried-over milliseconds
38
 
        _last_millis = millis;
39
 
        _carry = delta % 1000;
40
 
 
41
 
        // add the seconds that have passed to the time
42
 
        _seconds += delta / 1000;
43
 
        while( _seconds >= 60 ) {
44
 
                _seconds -= 60;
45
 
                _minutes++;
46
 
                if( _minutes >= 60 ) {
47
 
                        _minutes -= 60;
48
 
                        _hours++;
49
 
                        if( _hours >= 24 )
50
 
                                _hours -= 24;
51
 
                }
52
 
        }
53
 
}
54
 
 
55
 
 
56
 
Time::Time()
57
 
        :
58
 
        _last_millis( millis() ),
59
 
        _carry( 0 )
60
 
{
61
 
        // get the time from the real-time clock
62
 
        int rtc_data[ 7 ];
63
 
        RTC.get( rtc_data, true );
64
 
        _hours = rtc_data[ DS1307_HR ];
65
 
        _minutes = rtc_data[ DS1307_MIN ];
66
 
        _seconds = rtc_data[ DS1307_SEC ];
67
 
}
68