lab 7

Dependencies:   SDFileSystem mbed

Committer:
jedh
Date:
Sat Dec 10 21:08:30 2016 +0000
Revision:
0:f6d3b930f382
jgk

Who changed what in which revision?

UserRevisionLine numberNew 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",&ampm);
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