completed clock class
This commit is contained in:
		@ -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();
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user