lab 7
Dependencies: SDFileSystem mbed
EE3420_time.h@0:f6d3b930f382, 2016-12-10 (annotated)
- Committer:
- jedh
- Date:
- Sat Dec 10 21:08:30 2016 +0000
- Revision:
- 0:f6d3b930f382
jgk
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jedh | 0:f6d3b930f382 | 1 | #ifndef EE3420_TIME_H |
jedh | 0:f6d3b930f382 | 2 | #define EE3420_TIME_H |
jedh | 0:f6d3b930f382 | 3 | |
jedh | 0:f6d3b930f382 | 4 | #include "mbed.h" |
jedh | 0:f6d3b930f382 | 5 | |
jedh | 0:f6d3b930f382 | 6 | |
jedh | 0:f6d3b930f382 | 7 | /*support for internal RTC of Freedom KL46Z uses the time_t and tm data types */ |
jedh | 0:f6d3b930f382 | 8 | #include <time.h> |
jedh | 0:f6d3b930f382 | 9 | time_t EE3420_time; |
jedh | 0:f6d3b930f382 | 10 | struct tm * EE3420_timeinfo; |
jedh | 0:f6d3b930f382 | 11 | /* |
jedh | 0:f6d3b930f382 | 12 | tm_sec int seconds after the minute 0-61* |
jedh | 0:f6d3b930f382 | 13 | tm_min int minutes after the hour 0-59 |
jedh | 0:f6d3b930f382 | 14 | tm_hour int hours since midnight 0-23 |
jedh | 0:f6d3b930f382 | 15 | tm_mday int day of the month 1-31 |
jedh | 0:f6d3b930f382 | 16 | tm_mon int months since January 0-11 |
jedh | 0:f6d3b930f382 | 17 | tm_year int years since 1900 |
jedh | 0:f6d3b930f382 | 18 | tm_wday int days since Sunday 0-6 |
jedh | 0:f6d3b930f382 | 19 | tm_yday int days since January 1 0-365 |
jedh | 0:f6d3b930f382 | 20 | tm_isdst int Daylight Saving Time flag |
jedh | 0:f6d3b930f382 | 21 | */ |
jedh | 0:f6d3b930f382 | 22 | |
jedh | 0:f6d3b930f382 | 23 | |
jedh | 0:f6d3b930f382 | 24 | /* support for DS1307 uses DS1307_data type */ |
jedh | 0:f6d3b930f382 | 25 | |
jedh | 0:f6d3b930f382 | 26 | #include "ds1307.h" |
jedh | 0:f6d3b930f382 | 27 | |
jedh | 0:f6d3b930f382 | 28 | DS1307 EE3420_DS1307(PTE0,PTE1); // start DS1307 class and give it pins for connections of the DS1307 device |
jedh | 0:f6d3b930f382 | 29 | |
jedh | 0:f6d3b930f382 | 30 | typedef struct ds1307_data |
jedh | 0:f6d3b930f382 | 31 | { |
jedh | 0:f6d3b930f382 | 32 | int sec; |
jedh | 0:f6d3b930f382 | 33 | int min; |
jedh | 0:f6d3b930f382 | 34 | int hours; |
jedh | 0:f6d3b930f382 | 35 | int day; |
jedh | 0:f6d3b930f382 | 36 | int date; |
jedh | 0:f6d3b930f382 | 37 | int month; |
jedh | 0:f6d3b930f382 | 38 | int year; |
jedh | 0:f6d3b930f382 | 39 | } DS1307_DATA; |
jedh | 0:f6d3b930f382 | 40 | |
jedh | 0:f6d3b930f382 | 41 | DS1307_DATA EE3420_DS1307_data; |
jedh | 0:f6d3b930f382 | 42 | |
jedh | 0:f6d3b930f382 | 43 | char * EE3420_weekday_names[7] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; |
jedh | 0:f6d3b930f382 | 44 | char * EE3420_month_names[12] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; |
jedh | 0:f6d3b930f382 | 45 | |
jedh | 0:f6d3b930f382 | 46 | void show_clock_24(DS1307_DATA *tdata) |
jedh | 0:f6d3b930f382 | 47 | { |
jedh | 0:f6d3b930f382 | 48 | pc.printf("%02i:%02i:%02i, %s, %s %i, %i\r\n",tdata->hours,tdata->min,tdata->sec,EE3420_weekday_names[(tdata->day)-1],EE3420_month_names[(tdata->month)-1],tdata->date,(tdata->year)+2000 ); |
jedh | 0:f6d3b930f382 | 49 | |
jedh | 0:f6d3b930f382 | 50 | } |
jedh | 0:f6d3b930f382 | 51 | |
jedh | 0:f6d3b930f382 | 52 | void format_time_string_24(DS1307_DATA *tdata, char *time_str) |
jedh | 0:f6d3b930f382 | 53 | { |
jedh | 0:f6d3b930f382 | 54 | sprintf(time_str,"%02i:%02i:%02i, %s, %s %i, %i\r\n",tdata->hours,tdata->min,tdata->sec,EE3420_weekday_names[(tdata->day)-1],EE3420_month_names[(tdata->month)-1],tdata->date,(tdata->year)+2000 ); |
jedh | 0:f6d3b930f382 | 55 | } |
jedh | 0:f6d3b930f382 | 56 | |
jedh | 0:f6d3b930f382 | 57 | void show_clock_12(DS1307_DATA *tdata) |
jedh | 0:f6d3b930f382 | 58 | { |
jedh | 0:f6d3b930f382 | 59 | char ap='a'; |
jedh | 0:f6d3b930f382 | 60 | int hr=0; |
jedh | 0:f6d3b930f382 | 61 | |
jedh | 0:f6d3b930f382 | 62 | if (tdata->hours >= 12) {ap='p';} else {ap='a';} |
jedh | 0:f6d3b930f382 | 63 | hr=(tdata->hours)%12; |
jedh | 0:f6d3b930f382 | 64 | if (hr==0) {hr=12;} |
jedh | 0:f6d3b930f382 | 65 | pc.printf("%02i:%02i:%02i %c.m., %s, %s %i, %i\r\n",hr,tdata->min,tdata->sec,ap,EE3420_weekday_names[(tdata->day)-1],EE3420_month_names[(tdata->month)-1],tdata->date,(tdata->year)+2000 ); |
jedh | 0:f6d3b930f382 | 66 | } |
jedh | 0:f6d3b930f382 | 67 | |
jedh | 0:f6d3b930f382 | 68 | void format_time_string_12(DS1307_DATA *tdata, char *time_str) |
jedh | 0:f6d3b930f382 | 69 | { |
jedh | 0:f6d3b930f382 | 70 | char ap='a'; |
jedh | 0:f6d3b930f382 | 71 | int hr=0; |
jedh | 0:f6d3b930f382 | 72 | |
jedh | 0:f6d3b930f382 | 73 | if (tdata->hours >= 12) {ap='p';} else {ap='a';} |
jedh | 0:f6d3b930f382 | 74 | hr=(tdata->hours)%12; |
jedh | 0:f6d3b930f382 | 75 | if (hr==0) {hr=12;} |
jedh | 0:f6d3b930f382 | 76 | sprintf(time_str,"%02i:%02i:%02i %c.m., %s, %s %i, %i\r\n",hr,tdata->min,tdata->sec,ap,EE3420_weekday_names[(tdata->day)-1],EE3420_month_names[(tdata->month)-1],tdata->date,(tdata->year)+2000 ); |
jedh | 0:f6d3b930f382 | 77 | } |
jedh | 0:f6d3b930f382 | 78 | |
jedh | 0:f6d3b930f382 | 79 | |
jedh | 0:f6d3b930f382 | 80 | |
jedh | 0:f6d3b930f382 | 81 | void prompt_for_time(DS1307_DATA *tdata) |
jedh | 0:f6d3b930f382 | 82 | { |
jedh | 0:f6d3b930f382 | 83 | |
jedh | 0:f6d3b930f382 | 84 | pc.printf("\r\nEnter the time you want to set as prompted.\r\n"); |
jedh | 0:f6d3b930f382 | 85 | |
jedh | 0:f6d3b930f382 | 86 | tdata->year=100; |
jedh | 0:f6d3b930f382 | 87 | while( (tdata->year < 0) || (tdata->year > 99)) |
jedh | 0:f6d3b930f382 | 88 | { |
jedh | 0:f6d3b930f382 | 89 | pc.printf("Enter the year as a number 0-99 to represent the year 2000-2099: "); |
jedh | 0:f6d3b930f382 | 90 | pc.scanf("%i",&tdata->year); |
jedh | 0:f6d3b930f382 | 91 | pc.printf("\r\n"); |
jedh | 0:f6d3b930f382 | 92 | } |
jedh | 0:f6d3b930f382 | 93 | |
jedh | 0:f6d3b930f382 | 94 | tdata->month=100; |
jedh | 0:f6d3b930f382 | 95 | while( (tdata->month < 1) || (tdata->month > 12)) |
jedh | 0:f6d3b930f382 | 96 | { |
jedh | 0:f6d3b930f382 | 97 | pc.printf("Enter the month as a number 1-12 for January - December: "); |
jedh | 0:f6d3b930f382 | 98 | pc.scanf("%i",&tdata->month); |
jedh | 0:f6d3b930f382 | 99 | pc.printf("\r\n"); |
jedh | 0:f6d3b930f382 | 100 | } |
jedh | 0:f6d3b930f382 | 101 | |
jedh | 0:f6d3b930f382 | 102 | tdata->date=100; |
jedh | 0:f6d3b930f382 | 103 | while( (tdata->date < 1) || (tdata->date > 31)) |
jedh | 0:f6d3b930f382 | 104 | { |
jedh | 0:f6d3b930f382 | 105 | pc.printf("Enter the day of the month as a number 1-31 to represent the day of the month: "); |
jedh | 0:f6d3b930f382 | 106 | pc.scanf("%i",&tdata->date); |
jedh | 0:f6d3b930f382 | 107 | pc.printf("\r\n"); |
jedh | 0:f6d3b930f382 | 108 | if((tdata->month==2) && (tdata->date > 29)) |
jedh | 0:f6d3b930f382 | 109 | { |
jedh | 0:f6d3b930f382 | 110 | tdata->date=33; |
jedh | 0:f6d3b930f382 | 111 | pc.printf("February has 29 days at most.\r\n"); |
jedh | 0:f6d3b930f382 | 112 | } |
jedh | 0:f6d3b930f382 | 113 | if((tdata->month==2) && (tdata->date == 29) && ((tdata->year%4) !=0) && (tdata->year !=0)) |
jedh | 0:f6d3b930f382 | 114 | { |
jedh | 0:f6d3b930f382 | 115 | tdata->date=33; |
jedh | 0:f6d3b930f382 | 116 | pc.printf("February has 28 days at most in non-leap years.\r\n"); |
jedh | 0:f6d3b930f382 | 117 | } |
jedh | 0:f6d3b930f382 | 118 | } |
jedh | 0:f6d3b930f382 | 119 | |
jedh | 0:f6d3b930f382 | 120 | tdata->day=100; |
jedh | 0:f6d3b930f382 | 121 | while( (tdata->day < 1) || (tdata->day > 7)) |
jedh | 0:f6d3b930f382 | 122 | { |
jedh | 0:f6d3b930f382 | 123 | pc.printf("Enter the day of the week as a number 1-7 for Sunday - Saturday: "); |
jedh | 0:f6d3b930f382 | 124 | pc.scanf("%i",&tdata->day); |
jedh | 0:f6d3b930f382 | 125 | pc.printf("\r\n"); |
jedh | 0:f6d3b930f382 | 126 | } |
jedh | 0:f6d3b930f382 | 127 | |
jedh | 0:f6d3b930f382 | 128 | int ampm=2; |
jedh | 0:f6d3b930f382 | 129 | tdata->hours=100; |
jedh | 0:f6d3b930f382 | 130 | while((tdata->hours < 0) || (tdata->hours > 23)) |
jedh | 0:f6d3b930f382 | 131 | { |
jedh | 0:f6d3b930f382 | 132 | pc.printf("Enter the hour as 0-23: "); |
jedh | 0:f6d3b930f382 | 133 | pc.scanf("%i",&tdata->hours); |
jedh | 0:f6d3b930f382 | 134 | pc.printf("\r\n"); |
jedh | 0:f6d3b930f382 | 135 | if((tdata->hours >=1 ) && (tdata->hours <= 12) ) |
jedh | 0:f6d3b930f382 | 136 | { |
jedh | 0:f6d3b930f382 | 137 | ampm=2; |
jedh | 0:f6d3b930f382 | 138 | while((ampm<0) || (ampm > 1)) |
jedh | 0:f6d3b930f382 | 139 | { |
jedh | 0:f6d3b930f382 | 140 | pc.printf("Enter 0 for a.m. and 1 for p.m.: "); |
jedh | 0:f6d3b930f382 | 141 | pc.scanf("%i",&m); |
jedh | 0:f6d3b930f382 | 142 | pc.printf("\r\n"); |
jedh | 0:f6d3b930f382 | 143 | } |
jedh | 0:f6d3b930f382 | 144 | tdata->hours = (tdata->hours + (ampm*12)) % 24 ; |
jedh | 0:f6d3b930f382 | 145 | } |
jedh | 0:f6d3b930f382 | 146 | } |
jedh | 0:f6d3b930f382 | 147 | |
jedh | 0:f6d3b930f382 | 148 | tdata->min=100; |
jedh | 0:f6d3b930f382 | 149 | while( (tdata->min < 0) || (tdata->min > 59)) |
jedh | 0:f6d3b930f382 | 150 | { |
jedh | 0:f6d3b930f382 | 151 | pc.printf("Enter the minute as 0-59: "); |
jedh | 0:f6d3b930f382 | 152 | pc.scanf("%i",&tdata->min); |
jedh | 0:f6d3b930f382 | 153 | pc.printf("\r\n"); |
jedh | 0:f6d3b930f382 | 154 | } |
jedh | 0:f6d3b930f382 | 155 | |
jedh | 0:f6d3b930f382 | 156 | tdata->sec=100; |
jedh | 0:f6d3b930f382 | 157 | while( (tdata->sec < 0) || (tdata->sec > 59)) |
jedh | 0:f6d3b930f382 | 158 | { |
jedh | 0:f6d3b930f382 | 159 | pc.printf("Enter the second as 0-59: "); |
jedh | 0:f6d3b930f382 | 160 | pc.scanf("%i",&tdata->sec); |
jedh | 0:f6d3b930f382 | 161 | pc.printf("\r\n"); |
jedh | 0:f6d3b930f382 | 162 | } |
jedh | 0:f6d3b930f382 | 163 | |
jedh | 0:f6d3b930f382 | 164 | } |
jedh | 0:f6d3b930f382 | 165 | |
jedh | 0:f6d3b930f382 | 166 | void set_DS1307_time(DS1307_DATA *tdata) |
jedh | 0:f6d3b930f382 | 167 | { |
jedh | 0:f6d3b930f382 | 168 | |
jedh | 0:f6d3b930f382 | 169 | if(0!=EE3420_DS1307.twentyfour_hour()) |
jedh | 0:f6d3b930f382 | 170 | { |
jedh | 0:f6d3b930f382 | 171 | pc.printf("Failed to set 24-hour mode on DS1307.\r\n"); |
jedh | 0:f6d3b930f382 | 172 | exit(-1); |
jedh | 0:f6d3b930f382 | 173 | } |
jedh | 0:f6d3b930f382 | 174 | |
jedh | 0:f6d3b930f382 | 175 | if(0!=EE3420_DS1307.settime( tdata->sec, tdata->min, tdata->hours, tdata->day, tdata->date, tdata->month, tdata->year)) |
jedh | 0:f6d3b930f382 | 176 | { |
jedh | 0:f6d3b930f382 | 177 | pc.printf("Failed to set time on DS1307.\r\n"); |
jedh | 0:f6d3b930f382 | 178 | exit(-1); |
jedh | 0:f6d3b930f382 | 179 | } |
jedh | 0:f6d3b930f382 | 180 | |
jedh | 0:f6d3b930f382 | 181 | } |
jedh | 0:f6d3b930f382 | 182 | |
jedh | 0:f6d3b930f382 | 183 | void get_DS1307_time(DS1307_DATA *tdata) |
jedh | 0:f6d3b930f382 | 184 | { |
jedh | 0:f6d3b930f382 | 185 | if(0!=EE3420_DS1307.gettime( &tdata->sec, &tdata->min, &tdata->hours, &tdata->day, &tdata->date, &tdata->month, &tdata->year)) |
jedh | 0:f6d3b930f382 | 186 | { |
jedh | 0:f6d3b930f382 | 187 | pc.printf("Unable to read DS1307 time\r\n"); |
jedh | 0:f6d3b930f382 | 188 | exit(-1); |
jedh | 0:f6d3b930f382 | 189 | } |
jedh | 0:f6d3b930f382 | 190 | } |
jedh | 0:f6d3b930f382 | 191 | |
jedh | 0:f6d3b930f382 | 192 | void set_KL46Z_RTC_from_DS1307() |
jedh | 0:f6d3b930f382 | 193 | { |
jedh | 0:f6d3b930f382 | 194 | get_DS1307_time(&EE3420_DS1307_data); |
jedh | 0:f6d3b930f382 | 195 | time(&EE3420_time); |
jedh | 0:f6d3b930f382 | 196 | EE3420_timeinfo = localtime ( &EE3420_time ); |
jedh | 0:f6d3b930f382 | 197 | EE3420_timeinfo->tm_sec=EE3420_DS1307_data.sec; |
jedh | 0:f6d3b930f382 | 198 | EE3420_timeinfo->tm_min=EE3420_DS1307_data.min; |
jedh | 0:f6d3b930f382 | 199 | EE3420_timeinfo->tm_hour=EE3420_DS1307_data.hours; |
jedh | 0:f6d3b930f382 | 200 | EE3420_timeinfo->tm_mday=EE3420_DS1307_data.date; |
jedh | 0:f6d3b930f382 | 201 | EE3420_timeinfo->tm_mon=(EE3420_DS1307_data.month)-1; |
jedh | 0:f6d3b930f382 | 202 | EE3420_timeinfo->tm_year=(EE3420_DS1307_data.year)+100; |
jedh | 0:f6d3b930f382 | 203 | EE3420_timeinfo->tm_wday=(EE3420_DS1307_data.day)-1; |
jedh | 0:f6d3b930f382 | 204 | //timeinfo->tm_isdst=-1; |
jedh | 0:f6d3b930f382 | 205 | EE3420_time=mktime(EE3420_timeinfo); |
jedh | 0:f6d3b930f382 | 206 | set_time(EE3420_time); |
jedh | 0:f6d3b930f382 | 207 | |
jedh | 0:f6d3b930f382 | 208 | } |
jedh | 0:f6d3b930f382 | 209 | |
jedh | 0:f6d3b930f382 | 210 | |
jedh | 0:f6d3b930f382 | 211 | #endif /* EE3420_TIME_H */ |
jedh | 0:f6d3b930f382 | 212 | |
jedh | 0:f6d3b930f382 | 213 | |
jedh | 0:f6d3b930f382 | 214 | |
jedh | 0:f6d3b930f382 | 215 | |
jedh | 0:f6d3b930f382 | 216 | |
jedh | 0:f6d3b930f382 | 217 |