From e192e78d47cedd7521de449dfcbcaf199cb3e117 Mon Sep 17 00:00:00 2001 From: localhorst Date: Thu, 22 Nov 2018 14:17:39 +0100 Subject: [PATCH] completed clock class --- Software/src/clock.cpp | 39 ++++++++++++++++++++++++++++++--------- Software/src/clock.h | 1 + Software/src/main.cpp | 36 ++++++++++++++++++++++++++++-------- 3 files changed, 59 insertions(+), 17 deletions(-) diff --git a/Software/src/clock.cpp b/Software/src/clock.cpp index c8d243b..c763753 100644 --- a/Software/src/clock.cpp +++ b/Software/src/clock.cpp @@ -7,9 +7,11 @@ #include "openChargeMicro.h" -uint32_t systemTime; +uint32_t systemTime; // 0 to 4294967295 sec +/* Only call once */ clock::clock() { + //TODO Singleton systemTime = 0; clock_init(); serialSend("init clock\r\n"); @@ -21,28 +23,47 @@ clock::~clock() { void clock::clock_init() { OCR1A = 0x3D08; // --> 1 sec - TCCR1B |= (1 << WGM12); // Mode 4, CTC on OCR1A - TIMSK1 |= (1 << OCIE1A); //Set interrupt on compare match - TCCR1B |= (1 << CS12) | (1 << CS10); // set prescaler to 1024 and start the timer - - sei(); + sei(); //enable interrupts } +/* get seconds since boot*/ uint32_t clock::getTime() { - return systemTime; } +/* get time struct since time stamp */ struct time_t clock::getTime(struct time_t pTime) { 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.diffMinute = 0; ret.diffHour = 0; @@ -62,7 +83,7 @@ struct time_t clock::getTime(struct time_t pTime) { ISR (TIMER1_COMPA_vect) { // action to be done every 1 sec - systemTime++; + systemTime++; //increase system time } ISR(__vector_default) { diff --git a/Software/src/clock.h b/Software/src/clock.h index 18b3c63..dd3a9a0 100644 --- a/Software/src/clock.h +++ b/Software/src/clock.h @@ -25,6 +25,7 @@ public: ~clock(); 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 getTimeStamp(); // returns a timestamp }; diff --git a/Software/src/main.cpp b/Software/src/main.cpp index 0d6a309..6ba6b46 100644 --- a/Software/src/main.cpp +++ b/Software/src/main.cpp @@ -11,20 +11,40 @@ int main(void) { ioController io; io.deactivateChargers(); - - //_delay_ms(1000); //Startup delay - io.setActiveLED(true); 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) { - char charVal[10]; - dtostrf(clk.getTime(), 4, 2, charVal); - serialSend("Time - "); - serialSend(charVal); - serialSend(" sec\r\n"); + + if (((int) clk.getTime() % 10) == 0) { + + time_t ts02 = clk.getTime(ts01); + + 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();