run this here
Dependencies: Hexi_KW40Z Hexi_OLED_SSD1351
timeHelp.h
- Committer:
- trhackett
- Date:
- 2018-06-14
- Revision:
- 4:1ae9f76749b9
- Parent:
- 3:f34bbdea0786
File content as of revision 4:1ae9f76749b9:
#ifndef TIMEHELP_H
#define TIMEHELP_H
#include <stdlib.h>
#include <string>
// return true is seconds is even, false if not
// currTime is in the form HH:MM:SS.s
bool secondsAreEven(char currTime[]) {
char seconds[3];
seconds[0] = currTime[6];
seconds[1] = currTime[7];
seconds[2] = 0;
int secondsInt = atoi(seconds);
return (secondsInt % 2) == 0;
}
// given a starting time (starttime) in the form HH:MM:SS.s
// and a number of seconds (secsToAdd), add the seconds to that
// time and put the resulting string into resultTime ... both
// startTime and resultTime must be character arrays of length 10
void addSecondsToCurrentTime(char startTime[], char resultTime[], float secsToAdd) {
int decsToAdd=0,newSecsToAdd=0,minutesToAdd=0,hoursToAdd=0;
// if there are enough seconds to add, that an hour
// if being added, then do that and subtract what you added
if ((int)secsToAdd / 3600 > 0) {
hoursToAdd = (int)(secsToAdd / 3600);
secsToAdd -= hoursToAdd * 3600;
}
// there may be minutes to add if there are enough seconds
if ((int)secsToAdd / 60 > 0) {
minutesToAdd = (int)(secsToAdd / 60);
secsToAdd -= minutesToAdd * 60;
}
if ((int)secsToAdd > 0) {
newSecsToAdd = (int)secsToAdd;
secsToAdd -= newSecsToAdd;
}
decsToAdd = (int)(secsToAdd * 10);
// now we have to add them to currTime one at a time
// becausse if any of the currTime slots become more
// than 10/60/60 then we have to add them to the next
// highest interval
// decimal
char prevDecimal[2];
prevDecimal[1] = 0;
prevDecimal[0] = startTime[9];
int newDecimal = atoi(prevDecimal) + decsToAdd;
if (newDecimal >= 10) {
newSecsToAdd++;
newDecimal = newDecimal % 10;
}
// seconds
char prevSeconds[3];
prevSeconds[0] = startTime[6];
prevSeconds[1] = startTime[7];
prevSeconds[2] = 0;
int newSeconds = atoi(prevSeconds) + newSecsToAdd;
if (newSeconds >= 60) {
minutesToAdd++;
newSeconds = newSeconds % 60;
}
// minutes
char prevMinutes[3];
prevMinutes[0] = startTime[3];
prevMinutes[1] = startTime[4];
prevMinutes[2] = 0;
int newMinutes = atoi(prevMinutes) + minutesToAdd;
if (newMinutes >= 60) {
hoursToAdd++;
newMinutes = newMinutes % 60;
}
// hours
char prevHours[3];
prevHours[2] = 0;
prevHours[0] = startTime[0];
prevHours[1] = startTime[1];
int newHours = atoi(prevHours) + hoursToAdd;
newHours = newHours % 12;
// no 00 o'clock, only 1 through 12
if (newHours == 0) {
newHours = 12;
}
// now we have newDecimal, newSeconds, newMinutes, and newHours
// so we need to build up the string again
sprintf(resultTime, "%02d:%02d:%02d.%d",newHours,newMinutes,newSeconds,newDecimal);
}
// given the current time in the form HH:MM:SS.S
// give me back the number of seconds from 00:00:00.0
// at that time
float currTimeSecs(char currentTime[]) {
// hours
char hours[3];
hours[2] = 0;
hours[0] = currentTime[0];
hours[1] = currentTime[1];
// minutes
char minutes[3];
minutes[0] = currentTime[3];
minutes[1] = currentTime[4];
minutes[2] = 0;
// seconds
char seconds[3];
seconds[0] = currentTime[6];
seconds[1] = currentTime[7];
seconds[2] = 0;
// decimal
char decimal[2];
decimal[1] = 0;
decimal[0] = currentTime[9];
return (atoi(hours)%12)*360.0 + (atoi(minutes)%60)*60.0 + (atoi(seconds)%60)*1.0 + (atoi(decimal)%10)*.1;
}
#endif