Simple example to set RTC interactively
Dependencies: mbed
main.cpp@0:d04730d28a80, 2016-01-07 (annotated)
- Committer:
- icserny
- Date:
- Thu Jan 07 14:11:20 2016 +0000
- Revision:
- 0:d04730d28a80
First version
Who changed what in which revision?
User | Revision | Line number | New 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 | } |