Time adjustment and display. Adjustment via Com line and Display on LCD.

Dependencies:   mbed TextLCD CheckRTC

Committer:
kenjiArai
Date:
Sat Mar 27 12:31:34 2010 +0000
Revision:
0:b3d6027d4ef2
Child:
1:af3fc8a8eb57

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:b3d6027d4ef2 1 //
kenjiArai 0:b3d6027d4ef2 2 // RTC Test Program
kenjiArai 0:b3d6027d4ef2 3 // Kenji Arai / JH1PJL
kenjiArai 0:b3d6027d4ef2 4 // March 27th,2010 Started
kenjiArai 0:b3d6027d4ef2 5 // March 27th,2010
kenjiArai 0:b3d6027d4ef2 6 //
kenjiArai 0:b3d6027d4ef2 7 #include "mbed.h"
kenjiArai 0:b3d6027d4ef2 8 #include "TextLCD.h"
kenjiArai 0:b3d6027d4ef2 9
kenjiArai 0:b3d6027d4ef2 10 //#define STYLE1
kenjiArai 0:b3d6027d4ef2 11 #define STYLE2
kenjiArai 0:b3d6027d4ef2 12
kenjiArai 0:b3d6027d4ef2 13 Serial pc(USBTX, USBRX);
kenjiArai 0:b3d6027d4ef2 14 DigitalOut myled1(LED1); // Assign LED1 output port
kenjiArai 0:b3d6027d4ef2 15 TextLCD lcd(p22, p28, p27, p26, p25, p24, p23, 40, 2); // rs,rw,e,d0,d1,d2,d3,40char's x 2 lines
kenjiArai 0:b3d6027d4ef2 16
kenjiArai 0:b3d6027d4ef2 17 int hex( char c )
kenjiArai 0:b3d6027d4ef2 18 {
kenjiArai 0:b3d6027d4ef2 19 if( c<= '/' ) return( 0 );
kenjiArai 0:b3d6027d4ef2 20 if( ( c -= '0' ) <= 9 || 10 <= ( c -= 'A' - '0' - 10 ) && c <= 15 ){
kenjiArai 0:b3d6027d4ef2 21 return( (int)c );
kenjiArai 0:b3d6027d4ef2 22 }
kenjiArai 0:b3d6027d4ef2 23 return( 0 );
kenjiArai 0:b3d6027d4ef2 24 }
kenjiArai 0:b3d6027d4ef2 25
kenjiArai 0:b3d6027d4ef2 26 int conv( void )
kenjiArai 0:b3d6027d4ef2 27 {
kenjiArai 0:b3d6027d4ef2 28 char c;
kenjiArai 0:b3d6027d4ef2 29 int d;
kenjiArai 0:b3d6027d4ef2 30
kenjiArai 0:b3d6027d4ef2 31 c = pc.getc();
kenjiArai 0:b3d6027d4ef2 32 pc.putc(c);
kenjiArai 0:b3d6027d4ef2 33 d = hex(c);
kenjiArai 0:b3d6027d4ef2 34 c = pc.getc();
kenjiArai 0:b3d6027d4ef2 35 pc.putc(c);
kenjiArai 0:b3d6027d4ef2 36 d = d * 10 + hex(c);
kenjiArai 0:b3d6027d4ef2 37 return d;
kenjiArai 0:b3d6027d4ef2 38 }
kenjiArai 0:b3d6027d4ef2 39
kenjiArai 0:b3d6027d4ef2 40 int main() {
kenjiArai 0:b3d6027d4ef2 41 char c;
kenjiArai 0:b3d6027d4ef2 42 char buf[40];
kenjiArai 0:b3d6027d4ef2 43 time_t seconds;
kenjiArai 0:b3d6027d4ef2 44 struct tm t;
kenjiArai 0:b3d6027d4ef2 45
kenjiArai 0:b3d6027d4ef2 46 lcd.cls();
kenjiArai 0:b3d6027d4ef2 47 lcd.locate(0, 0);
kenjiArai 0:b3d6027d4ef2 48 lcd.locate(0, 0); // 1st line top
kenjiArai 0:b3d6027d4ef2 49 // 1234567890123456789012345678901234567890
kenjiArai 0:b3d6027d4ef2 50 lcd.printf(" Waiting for time adjustment via com ");
kenjiArai 0:b3d6027d4ef2 51 printf("\r\n");
kenjiArai 0:b3d6027d4ef2 52 while (1){
kenjiArai 0:b3d6027d4ef2 53 while (!pc.readable()){
kenjiArai 0:b3d6027d4ef2 54 seconds = time(NULL);
kenjiArai 0:b3d6027d4ef2 55 printf("Current time is");
kenjiArai 0:b3d6027d4ef2 56 strftime(buf,40, "%I:%M:%S %p (%Y/%m/%d) ", localtime(&seconds));
kenjiArai 0:b3d6027d4ef2 57 printf(" = %s Is this okay? [Enter Y/y or N/n]\r", buf);
kenjiArai 0:b3d6027d4ef2 58 }
kenjiArai 0:b3d6027d4ef2 59 c = getchar();
kenjiArai 0:b3d6027d4ef2 60 if (c == 'N' || c == 'n'){
kenjiArai 0:b3d6027d4ef2 61 printf("\r\nPlese enter Year 20YY (only 2 digits)\r\n]");
kenjiArai 0:b3d6027d4ef2 62 t.tm_year = 100 + conv();
kenjiArai 0:b3d6027d4ef2 63 printf("\r\nPlese enter Month MM (only 2 digits)\r\n]");
kenjiArai 0:b3d6027d4ef2 64 t.tm_mon = conv();
kenjiArai 0:b3d6027d4ef2 65 printf("\r\nPlese enter Day DD (only 2 digits)\r\n]");
kenjiArai 0:b3d6027d4ef2 66 t.tm_mday = conv();
kenjiArai 0:b3d6027d4ef2 67 printf("\r\nPlese enter Hour HH (only 2 digits)\r\n]");
kenjiArai 0:b3d6027d4ef2 68 t.tm_hour = conv();
kenjiArai 0:b3d6027d4ef2 69 printf("\r\nPlese enter Miniut MM (only 2 digits)\r\n]");
kenjiArai 0:b3d6027d4ef2 70 t.tm_min = conv();
kenjiArai 0:b3d6027d4ef2 71 printf("\r\nPlese enter Second SS (only 2 digits)\r\n]");
kenjiArai 0:b3d6027d4ef2 72 t.tm_sec = conv();
kenjiArai 0:b3d6027d4ef2 73 printf("\r\n");
kenjiArai 0:b3d6027d4ef2 74 seconds = mktime(&t);
kenjiArai 0:b3d6027d4ef2 75 set_time(seconds);
kenjiArai 0:b3d6027d4ef2 76 } else {
kenjiArai 0:b3d6027d4ef2 77 break;
kenjiArai 0:b3d6027d4ef2 78 }
kenjiArai 0:b3d6027d4ef2 79 }
kenjiArai 0:b3d6027d4ef2 80 printf("\r\n Current Time -> Plese see LCD \r\n");
kenjiArai 0:b3d6027d4ef2 81 for(;;){
kenjiArai 0:b3d6027d4ef2 82 while ( seconds == time(NULL)) ;
kenjiArai 0:b3d6027d4ef2 83 seconds = time(NULL);
kenjiArai 0:b3d6027d4ef2 84 myled1 = !myled1;
kenjiArai 0:b3d6027d4ef2 85 lcd.cls();
kenjiArai 0:b3d6027d4ef2 86 lcd.locate(0, 0); // 1st line top
kenjiArai 0:b3d6027d4ef2 87 lcd.printf("It is %d sec since Jan.1,1970\n", seconds);
kenjiArai 0:b3d6027d4ef2 88 lcd.locate(0, 1); // 2nd line top
kenjiArai 0:b3d6027d4ef2 89 #ifdef STYLE1
kenjiArai 0:b3d6027d4ef2 90 // 27 Mar 2010 13:24:00
kenjiArai 0:b3d6027d4ef2 91 strftime(buf,40, "%x %X ", localtime(&seconds));
kenjiArai 0:b3d6027d4ef2 92 #endif
kenjiArai 0:b3d6027d4ef2 93 #ifdef STYLE2
kenjiArai 0:b3d6027d4ef2 94 // 13:24:00 PM (2010/03/27)
kenjiArai 0:b3d6027d4ef2 95 strftime(buf,40, "%I:%M:%S %p (%Y/%m/%d)", localtime(&seconds));
kenjiArai 0:b3d6027d4ef2 96 #endif
kenjiArai 0:b3d6027d4ef2 97 lcd.printf("Time = %s", buf);
kenjiArai 0:b3d6027d4ef2 98 //printf("Time = %s\r", buf);
kenjiArai 0:b3d6027d4ef2 99 }
kenjiArai 0:b3d6027d4ef2 100 }