completed clock class
This commit is contained in:
parent
e5d96c0e84
commit
e192e78d47
|
@ -7,9 +7,11 @@
|
||||||
|
|
||||||
#include "openChargeMicro.h"
|
#include "openChargeMicro.h"
|
||||||
|
|
||||||
uint32_t systemTime;
|
uint32_t systemTime; // 0 to 4294967295 sec
|
||||||
|
|
||||||
|
/* Only call once */
|
||||||
clock::clock() {
|
clock::clock() {
|
||||||
|
//TODO Singleton
|
||||||
systemTime = 0;
|
systemTime = 0;
|
||||||
clock_init();
|
clock_init();
|
||||||
serialSend("init clock\r\n");
|
serialSend("init clock\r\n");
|
||||||
|
@ -21,28 +23,47 @@ clock::~clock() {
|
||||||
|
|
||||||
void clock::clock_init() {
|
void clock::clock_init() {
|
||||||
OCR1A = 0x3D08; // --> 1 sec
|
OCR1A = 0x3D08; // --> 1 sec
|
||||||
|
|
||||||
TCCR1B |= (1 << WGM12);
|
TCCR1B |= (1 << WGM12);
|
||||||
// Mode 4, CTC on OCR1A
|
// Mode 4, CTC on OCR1A
|
||||||
|
|
||||||
TIMSK1 |= (1 << OCIE1A);
|
TIMSK1 |= (1 << OCIE1A);
|
||||||
//Set interrupt on compare match
|
//Set interrupt on compare match
|
||||||
|
|
||||||
TCCR1B |= (1 << CS12) | (1 << CS10);
|
TCCR1B |= (1 << CS12) | (1 << CS10);
|
||||||
// set prescaler to 1024 and start the timer
|
// set prescaler to 1024 and start the timer
|
||||||
|
sei(); //enable interrupts
|
||||||
sei();
|
|
||||||
}
|
}
|
||||||
|
/* get seconds since boot*/
|
||||||
uint32_t clock::getTime() {
|
uint32_t clock::getTime() {
|
||||||
|
|
||||||
return systemTime;
|
return systemTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* get time struct since time stamp */
|
||||||
struct time_t clock::getTime(struct time_t pTime) {
|
struct time_t clock::getTime(struct time_t pTime) {
|
||||||
|
|
||||||
struct time_t ret;
|
struct time_t ret;
|
||||||
|
|
||||||
ret.seconds = getTime() - pTime.seconds;
|
ret.seconds = (getTime() - pTime.seconds);
|
||||||
|
ret.diffSecond = ret.seconds;
|
||||||
|
ret.diffMinute = 0;
|
||||||
|
ret.diffHour = 0;
|
||||||
|
|
||||||
|
while (ret.diffSecond > 59) {
|
||||||
|
ret.diffSecond = ret.diffSecond - 60;
|
||||||
|
ret.diffMinute++;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (ret.diffMinute > 59) {
|
||||||
|
ret.diffMinute = ret.diffMinute - 60;
|
||||||
|
ret.diffHour++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* get time struct as time stamp */
|
||||||
|
struct time_t clock::getTimeStamp() {
|
||||||
|
struct time_t ret;
|
||||||
|
|
||||||
|
ret.seconds = getTime();
|
||||||
ret.diffSecond = ret.seconds;
|
ret.diffSecond = ret.seconds;
|
||||||
ret.diffMinute = 0;
|
ret.diffMinute = 0;
|
||||||
ret.diffHour = 0;
|
ret.diffHour = 0;
|
||||||
|
@ -62,7 +83,7 @@ struct time_t clock::getTime(struct time_t pTime) {
|
||||||
|
|
||||||
ISR (TIMER1_COMPA_vect) {
|
ISR (TIMER1_COMPA_vect) {
|
||||||
// action to be done every 1 sec
|
// action to be done every 1 sec
|
||||||
systemTime++;
|
systemTime++; //increase system time
|
||||||
}
|
}
|
||||||
|
|
||||||
ISR(__vector_default) {
|
ISR(__vector_default) {
|
||||||
|
|
|
@ -25,6 +25,7 @@ public:
|
||||||
~clock();
|
~clock();
|
||||||
uint32_t getTime(); //time in sec since boot
|
uint32_t getTime(); //time in sec since boot
|
||||||
struct time_t getTime(struct time_t pTime); //time in sec since time stamp
|
struct time_t getTime(struct time_t pTime); //time in sec since time stamp
|
||||||
|
struct time_t getTimeStamp(); // returns a timestamp
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -11,20 +11,40 @@ int main(void) {
|
||||||
ioController io;
|
ioController io;
|
||||||
|
|
||||||
io.deactivateChargers();
|
io.deactivateChargers();
|
||||||
|
|
||||||
//_delay_ms(1000); //Startup delay
|
|
||||||
|
|
||||||
io.setActiveLED(true);
|
io.setActiveLED(true);
|
||||||
io.activateChargers();
|
io.activateChargers();
|
||||||
|
|
||||||
|
char charVal[10];
|
||||||
|
|
||||||
|
time_t ts01 = clk.getTimeStamp();
|
||||||
|
|
||||||
|
dtostrf(ts01.seconds, 4, 0, charVal);
|
||||||
|
serialSend(charVal);
|
||||||
|
serialSend(" s (stamp)\r\n");
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
char charVal[10];
|
|
||||||
dtostrf(clk.getTime(), 4, 2, charVal);
|
if (((int) clk.getTime() % 10) == 0) {
|
||||||
serialSend("Time - ");
|
|
||||||
serialSend(charVal);
|
time_t ts02 = clk.getTime(ts01);
|
||||||
serialSend(" sec\r\n");
|
|
||||||
|
dtostrf(ts02.diffHour, 4, 0, charVal);
|
||||||
|
serialSend(charVal);
|
||||||
|
serialSend(" hour\r\n");
|
||||||
|
|
||||||
|
dtostrf(ts02.diffMinute, 4, 0, charVal);
|
||||||
|
serialSend(charVal);
|
||||||
|
serialSend(" minute\r\n");
|
||||||
|
|
||||||
|
dtostrf(ts02.diffSecond, 4, 0, charVal);
|
||||||
|
serialSend(charVal);
|
||||||
|
serialSend(" sec\r\n");
|
||||||
|
|
||||||
|
dtostrf(ts02.seconds, 4, 0, charVal);
|
||||||
|
serialSend(charVal);
|
||||||
|
serialSend(" sec (since beginning of stamp)\r\n");
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//void test();
|
//void test();
|
||||||
|
|
Loading…
Reference in New Issue