run this here
Dependencies: Hexi_KW40Z Hexi_OLED_SSD1351
timeHelp.h@4:1ae9f76749b9, 2018-06-14 (annotated)
- Committer:
- trhackett
- Date:
- Thu Jun 14 19:39:23 2018 +0000
- Revision:
- 4:1ae9f76749b9
- Parent:
- 3:f34bbdea0786
current time mbed post comp arch
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
trhackett | 3:f34bbdea0786 | 1 | #ifndef TIMEHELP_H |
trhackett | 3:f34bbdea0786 | 2 | #define TIMEHELP_H |
trhackett | 3:f34bbdea0786 | 3 | |
trhackett | 3:f34bbdea0786 | 4 | #include <stdlib.h> |
trhackett | 3:f34bbdea0786 | 5 | #include <string> |
trhackett | 3:f34bbdea0786 | 6 | |
trhackett | 3:f34bbdea0786 | 7 | // return true is seconds is even, false if not |
trhackett | 4:1ae9f76749b9 | 8 | // currTime is in the form HH:MM:SS.s |
trhackett | 3:f34bbdea0786 | 9 | bool secondsAreEven(char currTime[]) { |
trhackett | 3:f34bbdea0786 | 10 | char seconds[3]; |
trhackett | 3:f34bbdea0786 | 11 | seconds[0] = currTime[6]; |
trhackett | 3:f34bbdea0786 | 12 | seconds[1] = currTime[7]; |
trhackett | 3:f34bbdea0786 | 13 | seconds[2] = 0; |
trhackett | 3:f34bbdea0786 | 14 | |
trhackett | 3:f34bbdea0786 | 15 | int secondsInt = atoi(seconds); |
trhackett | 3:f34bbdea0786 | 16 | |
trhackett | 3:f34bbdea0786 | 17 | return (secondsInt % 2) == 0; |
trhackett | 3:f34bbdea0786 | 18 | } |
trhackett | 3:f34bbdea0786 | 19 | |
trhackett | 4:1ae9f76749b9 | 20 | // given a starting time (starttime) in the form HH:MM:SS.s |
trhackett | 4:1ae9f76749b9 | 21 | // and a number of seconds (secsToAdd), add the seconds to that |
trhackett | 4:1ae9f76749b9 | 22 | // time and put the resulting string into resultTime ... both |
trhackett | 4:1ae9f76749b9 | 23 | // startTime and resultTime must be character arrays of length 10 |
trhackett | 3:f34bbdea0786 | 24 | void addSecondsToCurrentTime(char startTime[], char resultTime[], float secsToAdd) { |
trhackett | 3:f34bbdea0786 | 25 | |
trhackett | 3:f34bbdea0786 | 26 | int decsToAdd=0,newSecsToAdd=0,minutesToAdd=0,hoursToAdd=0; |
trhackett | 3:f34bbdea0786 | 27 | |
trhackett | 3:f34bbdea0786 | 28 | // if there are enough seconds to add, that an hour |
trhackett | 3:f34bbdea0786 | 29 | // if being added, then do that and subtract what you added |
trhackett | 3:f34bbdea0786 | 30 | if ((int)secsToAdd / 3600 > 0) { |
trhackett | 3:f34bbdea0786 | 31 | hoursToAdd = (int)(secsToAdd / 3600); |
trhackett | 3:f34bbdea0786 | 32 | secsToAdd -= hoursToAdd * 3600; |
trhackett | 3:f34bbdea0786 | 33 | } |
trhackett | 3:f34bbdea0786 | 34 | |
trhackett | 3:f34bbdea0786 | 35 | // there may be minutes to add if there are enough seconds |
trhackett | 3:f34bbdea0786 | 36 | if ((int)secsToAdd / 60 > 0) { |
trhackett | 3:f34bbdea0786 | 37 | minutesToAdd = (int)(secsToAdd / 60); |
trhackett | 3:f34bbdea0786 | 38 | secsToAdd -= minutesToAdd * 60; |
trhackett | 3:f34bbdea0786 | 39 | } |
trhackett | 3:f34bbdea0786 | 40 | |
trhackett | 3:f34bbdea0786 | 41 | if ((int)secsToAdd > 0) { |
trhackett | 3:f34bbdea0786 | 42 | newSecsToAdd = (int)secsToAdd; |
trhackett | 3:f34bbdea0786 | 43 | secsToAdd -= newSecsToAdd; |
trhackett | 3:f34bbdea0786 | 44 | } |
trhackett | 3:f34bbdea0786 | 45 | |
trhackett | 3:f34bbdea0786 | 46 | decsToAdd = (int)(secsToAdd * 10); |
trhackett | 3:f34bbdea0786 | 47 | |
trhackett | 3:f34bbdea0786 | 48 | // now we have to add them to currTime one at a time |
trhackett | 3:f34bbdea0786 | 49 | // becausse if any of the currTime slots become more |
trhackett | 3:f34bbdea0786 | 50 | // than 10/60/60 then we have to add them to the next |
trhackett | 3:f34bbdea0786 | 51 | // highest interval |
trhackett | 3:f34bbdea0786 | 52 | |
trhackett | 3:f34bbdea0786 | 53 | // decimal |
trhackett | 3:f34bbdea0786 | 54 | char prevDecimal[2]; |
trhackett | 3:f34bbdea0786 | 55 | prevDecimal[1] = 0; |
trhackett | 3:f34bbdea0786 | 56 | prevDecimal[0] = startTime[9]; |
trhackett | 3:f34bbdea0786 | 57 | int newDecimal = atoi(prevDecimal) + decsToAdd; |
trhackett | 3:f34bbdea0786 | 58 | |
trhackett | 3:f34bbdea0786 | 59 | if (newDecimal >= 10) { |
trhackett | 3:f34bbdea0786 | 60 | newSecsToAdd++; |
trhackett | 3:f34bbdea0786 | 61 | newDecimal = newDecimal % 10; |
trhackett | 3:f34bbdea0786 | 62 | } |
trhackett | 3:f34bbdea0786 | 63 | |
trhackett | 3:f34bbdea0786 | 64 | // seconds |
trhackett | 3:f34bbdea0786 | 65 | char prevSeconds[3]; |
trhackett | 3:f34bbdea0786 | 66 | prevSeconds[0] = startTime[6]; |
trhackett | 3:f34bbdea0786 | 67 | prevSeconds[1] = startTime[7]; |
trhackett | 3:f34bbdea0786 | 68 | prevSeconds[2] = 0; |
trhackett | 3:f34bbdea0786 | 69 | int newSeconds = atoi(prevSeconds) + newSecsToAdd; |
trhackett | 3:f34bbdea0786 | 70 | |
trhackett | 3:f34bbdea0786 | 71 | if (newSeconds >= 60) { |
trhackett | 3:f34bbdea0786 | 72 | minutesToAdd++; |
trhackett | 3:f34bbdea0786 | 73 | newSeconds = newSeconds % 60; |
trhackett | 3:f34bbdea0786 | 74 | } |
trhackett | 3:f34bbdea0786 | 75 | |
trhackett | 3:f34bbdea0786 | 76 | // minutes |
trhackett | 3:f34bbdea0786 | 77 | char prevMinutes[3]; |
trhackett | 3:f34bbdea0786 | 78 | prevMinutes[0] = startTime[3]; |
trhackett | 3:f34bbdea0786 | 79 | prevMinutes[1] = startTime[4]; |
trhackett | 3:f34bbdea0786 | 80 | prevMinutes[2] = 0; |
trhackett | 3:f34bbdea0786 | 81 | int newMinutes = atoi(prevMinutes) + minutesToAdd; |
trhackett | 3:f34bbdea0786 | 82 | |
trhackett | 3:f34bbdea0786 | 83 | if (newMinutes >= 60) { |
trhackett | 3:f34bbdea0786 | 84 | hoursToAdd++; |
trhackett | 3:f34bbdea0786 | 85 | newMinutes = newMinutes % 60; |
trhackett | 3:f34bbdea0786 | 86 | } |
trhackett | 3:f34bbdea0786 | 87 | |
trhackett | 3:f34bbdea0786 | 88 | // hours |
trhackett | 3:f34bbdea0786 | 89 | char prevHours[3]; |
trhackett | 3:f34bbdea0786 | 90 | prevHours[2] = 0; |
trhackett | 3:f34bbdea0786 | 91 | prevHours[0] = startTime[0]; |
trhackett | 3:f34bbdea0786 | 92 | prevHours[1] = startTime[1]; |
trhackett | 3:f34bbdea0786 | 93 | int newHours = atoi(prevHours) + hoursToAdd; |
trhackett | 3:f34bbdea0786 | 94 | newHours = newHours % 12; |
trhackett | 3:f34bbdea0786 | 95 | |
trhackett | 3:f34bbdea0786 | 96 | // no 00 o'clock, only 1 through 12 |
trhackett | 3:f34bbdea0786 | 97 | if (newHours == 0) { |
trhackett | 3:f34bbdea0786 | 98 | newHours = 12; |
trhackett | 3:f34bbdea0786 | 99 | } |
trhackett | 3:f34bbdea0786 | 100 | |
trhackett | 3:f34bbdea0786 | 101 | // now we have newDecimal, newSeconds, newMinutes, and newHours |
trhackett | 3:f34bbdea0786 | 102 | // so we need to build up the string again |
trhackett | 3:f34bbdea0786 | 103 | sprintf(resultTime, "%02d:%02d:%02d.%d",newHours,newMinutes,newSeconds,newDecimal); |
trhackett | 3:f34bbdea0786 | 104 | } |
trhackett | 3:f34bbdea0786 | 105 | |
trhackett | 3:f34bbdea0786 | 106 | // given the current time in the form HH:MM:SS.S |
trhackett | 4:1ae9f76749b9 | 107 | // give me back the number of seconds from 00:00:00.0 |
trhackett | 4:1ae9f76749b9 | 108 | // at that time |
trhackett | 3:f34bbdea0786 | 109 | float currTimeSecs(char currentTime[]) { |
trhackett | 3:f34bbdea0786 | 110 | // hours |
trhackett | 3:f34bbdea0786 | 111 | char hours[3]; |
trhackett | 3:f34bbdea0786 | 112 | hours[2] = 0; |
trhackett | 3:f34bbdea0786 | 113 | hours[0] = currentTime[0]; |
trhackett | 3:f34bbdea0786 | 114 | hours[1] = currentTime[1]; |
trhackett | 3:f34bbdea0786 | 115 | |
trhackett | 3:f34bbdea0786 | 116 | // minutes |
trhackett | 3:f34bbdea0786 | 117 | char minutes[3]; |
trhackett | 3:f34bbdea0786 | 118 | minutes[0] = currentTime[3]; |
trhackett | 3:f34bbdea0786 | 119 | minutes[1] = currentTime[4]; |
trhackett | 3:f34bbdea0786 | 120 | minutes[2] = 0; |
trhackett | 3:f34bbdea0786 | 121 | |
trhackett | 3:f34bbdea0786 | 122 | // seconds |
trhackett | 3:f34bbdea0786 | 123 | char seconds[3]; |
trhackett | 3:f34bbdea0786 | 124 | seconds[0] = currentTime[6]; |
trhackett | 3:f34bbdea0786 | 125 | seconds[1] = currentTime[7]; |
trhackett | 3:f34bbdea0786 | 126 | seconds[2] = 0; |
trhackett | 3:f34bbdea0786 | 127 | |
trhackett | 3:f34bbdea0786 | 128 | // decimal |
trhackett | 3:f34bbdea0786 | 129 | char decimal[2]; |
trhackett | 3:f34bbdea0786 | 130 | decimal[1] = 0; |
trhackett | 3:f34bbdea0786 | 131 | decimal[0] = currentTime[9]; |
trhackett | 3:f34bbdea0786 | 132 | |
trhackett | 3:f34bbdea0786 | 133 | return (atoi(hours)%12)*360.0 + (atoi(minutes)%60)*60.0 + (atoi(seconds)%60)*1.0 + (atoi(decimal)%10)*.1; |
trhackett | 3:f34bbdea0786 | 134 | } |
trhackett | 3:f34bbdea0786 | 135 | |
trhackett | 3:f34bbdea0786 | 136 | #endif |