Simple example to set RTC interactively

Dependencies:   mbed

Committer:
icserny
Date:
Thu Jan 07 14:11:20 2016 +0000
Revision:
0:d04730d28a80
First version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
icserny 0:d04730d28a80 1 #include "mbed.h"
icserny 0:d04730d28a80 2 Serial pc(USBTX,USBRX); //UART0 via OpenSDA
icserny 0:d04730d28a80 3 DigitalOut myled(LED1);
icserny 0:d04730d28a80 4 Ticker myticker;
icserny 0:d04730d28a80 5 time_t mytime;
icserny 0:d04730d28a80 6 volatile uint8_t myflag =0;
icserny 0:d04730d28a80 7
icserny 0:d04730d28a80 8 void processSerialCommand();
icserny 0:d04730d28a80 9
icserny 0:d04730d28a80 10 void setflag(void)
icserny 0:d04730d28a80 11 {
icserny 0:d04730d28a80 12 myflag = 1;
icserny 0:d04730d28a80 13 }
icserny 0:d04730d28a80 14
icserny 0:d04730d28a80 15 int main()
icserny 0:d04730d28a80 16 {
icserny 0:d04730d28a80 17
icserny 0:d04730d28a80 18 set_time(1451736661);
icserny 0:d04730d28a80 19 myticker.attach(&setflag,5);
icserny 0:d04730d28a80 20 while(1) {
icserny 0:d04730d28a80 21 if(pc.readable()) {
icserny 0:d04730d28a80 22 processSerialCommand();
icserny 0:d04730d28a80 23 }
icserny 0:d04730d28a80 24 if(myflag) {
icserny 0:d04730d28a80 25 mytime = time(NULL);
icserny 0:d04730d28a80 26 pc.printf("RTC time: %s\r\n",ctime(&mytime));
icserny 0:d04730d28a80 27 myflag = 0;
icserny 0:d04730d28a80 28 }
icserny 0:d04730d28a80 29 }
icserny 0:d04730d28a80 30 }
icserny 0:d04730d28a80 31
icserny 0:d04730d28a80 32 void processSerialCommand()
icserny 0:d04730d28a80 33 {
icserny 0:d04730d28a80 34 char c = pc.getc();
icserny 0:d04730d28a80 35 switch(c) {
icserny 0:d04730d28a80 36 case 'T':
icserny 0:d04730d28a80 37 // Command to set RTC time
icserny 0:d04730d28a80 38 // Command format: TYYMMDDHHMMSS
icserny 0:d04730d28a80 39 // Example: 2012 Oct 21 1:23pm is T121021132300
icserny 0:d04730d28a80 40 struct tm tme;
icserny 0:d04730d28a80 41 time_t newTime;
icserny 0:d04730d28a80 42
icserny 0:d04730d28a80 43 // Parse incomming 12 ASCII charaters into time_t
icserny 0:d04730d28a80 44 // no error checking for numeric values in YYMDDHHMMSS fields, so be careful!
icserny 0:d04730d28a80 45 c = pc.getc();
icserny 0:d04730d28a80 46 tme.tm_year = c - '0';
icserny 0:d04730d28a80 47 c = pc.getc();
icserny 0:d04730d28a80 48 tme.tm_year = 10*tme.tm_year;
icserny 0:d04730d28a80 49 tme.tm_year += c-'0';
icserny 0:d04730d28a80 50 tme.tm_year += 100; //Years are counted from 1900!
icserny 0:d04730d28a80 51 c = pc.getc();
icserny 0:d04730d28a80 52 tme.tm_mon = c - '0';
icserny 0:d04730d28a80 53 c = pc.getc();
icserny 0:d04730d28a80 54 tme.tm_mon = 10*tme.tm_mon;
icserny 0:d04730d28a80 55 tme.tm_mon += c-'0'-1; //corrected by -1 due to a stupid error
icserny 0:d04730d28a80 56 c = pc.getc();
icserny 0:d04730d28a80 57 tme.tm_mday = c - '0';
icserny 0:d04730d28a80 58 c = pc.getc();
icserny 0:d04730d28a80 59 tme.tm_mday = 10*tme.tm_mday;
icserny 0:d04730d28a80 60 tme.tm_mday += c-'0';
icserny 0:d04730d28a80 61 c = pc.getc();
icserny 0:d04730d28a80 62 tme.tm_hour = c - '0';
icserny 0:d04730d28a80 63 c = pc.getc();
icserny 0:d04730d28a80 64 tme.tm_hour = 10*tme.tm_hour;
icserny 0:d04730d28a80 65 tme.tm_hour += c-'0';
icserny 0:d04730d28a80 66 c = pc.getc();
icserny 0:d04730d28a80 67 tme.tm_min = c - '0';
icserny 0:d04730d28a80 68 c = pc.getc();
icserny 0:d04730d28a80 69 tme.tm_min = 10*tme.tm_min;
icserny 0:d04730d28a80 70 tme.tm_min += c-'0';
icserny 0:d04730d28a80 71 c = pc.getc();
icserny 0:d04730d28a80 72 tme.tm_sec = c - '0';
icserny 0:d04730d28a80 73 c = pc.getc();
icserny 0:d04730d28a80 74 tme.tm_sec = 10*tme.tm_sec;
icserny 0:d04730d28a80 75 tme.tm_sec += c-'0';
icserny 0:d04730d28a80 76 newTime = mktime(&tme);
icserny 0:d04730d28a80 77 set_time(newTime);
icserny 0:d04730d28a80 78 pc.printf("RTC set to: %s\r\n",ctime(&newTime));
icserny 0:d04730d28a80 79 }
icserny 0:d04730d28a80 80 while(pc.readable()) {
icserny 0:d04730d28a80 81 pc.getc(); // clear serial buffer
icserny 0:d04730d28a80 82 }
icserny 0:d04730d28a80 83 }