run this here

Dependencies:   Hexi_KW40Z Hexi_OLED_SSD1351

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?

UserRevisionLine numberNew 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