Display RTC on LCD. User is also able to update RTC from console.

Dependencies:   TextLCD mbed

Committer:
iwaita2ya
Date:
Sun Jul 03 18:23:11 2016 +0000
Revision:
1:1b17dcd80a7d
Parent:
0:bad75bd13618
1st commit. Base function has been implemented.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
iwaita2ya 1:1b17dcd80a7d 1 // Includes ---------------------------------------------------------------------------------------
bcostm 0:bad75bd13618 2 #include "mbed.h"
iwaita2ya 1:1b17dcd80a7d 3 #include "TextLCD.h"
iwaita2ya 1:1b17dcd80a7d 4
iwaita2ya 1:1b17dcd80a7d 5 // Objects ----------------------------------------------------------------------------------------
iwaita2ya 1:1b17dcd80a7d 6 DigitalOut myled(LED1);
iwaita2ya 1:1b17dcd80a7d 7 Serial pc(USBTX, USBRX); // tx, rx
iwaita2ya 1:1b17dcd80a7d 8 TextLCD lcd(p24, p26, p27, p28, p29, p30); // rs, e, d4-d7, 16char, 2 lines
iwaita2ya 1:1b17dcd80a7d 9 Ticker ticker;
iwaita2ya 1:1b17dcd80a7d 10 time_t currentTime;
bcostm 0:bad75bd13618 11
iwaita2ya 1:1b17dcd80a7d 12 const int UPDATE_FREQ = 1; // sec
iwaita2ya 1:1b17dcd80a7d 13 char lcdBuffer[32]; // buffer for LCD (32=2x16)
bcostm 0:bad75bd13618 14
iwaita2ya 1:1b17dcd80a7d 15 // Function prototypes ---------------------------------------------------------------------------
iwaita2ya 1:1b17dcd80a7d 16 void displayOnLcd();
iwaita2ya 1:1b17dcd80a7d 17 void updateRealTimeClock(char *buffer);
iwaita2ya 1:1b17dcd80a7d 18 void getLineFromSerial(char *keyBuffer, int bufferLength);
iwaita2ya 1:1b17dcd80a7d 19 void displayMessageOnConsole();
iwaita2ya 1:1b17dcd80a7d 20
iwaita2ya 1:1b17dcd80a7d 21 // Main -------------------------------------------------------------------------------------
bcostm 0:bad75bd13618 22 int main() {
bcostm 0:bad75bd13618 23
iwaita2ya 1:1b17dcd80a7d 24 char lineBuffer[32];
iwaita2ya 1:1b17dcd80a7d 25 char *pointer;
iwaita2ya 1:1b17dcd80a7d 26 pointer = lineBuffer;
iwaita2ya 1:1b17dcd80a7d 27
iwaita2ya 1:1b17dcd80a7d 28 // update time for every UPDATE_FREQ sec
iwaita2ya 1:1b17dcd80a7d 29 ticker.attach(&displayOnLcd, UPDATE_FREQ);
bcostm 0:bad75bd13618 30
iwaita2ya 1:1b17dcd80a7d 31 //
iwaita2ya 1:1b17dcd80a7d 32 for(;;) {
iwaita2ya 1:1b17dcd80a7d 33 // show initial message on console
iwaita2ya 1:1b17dcd80a7d 34 displayMessageOnConsole();
bcostm 0:bad75bd13618 35
iwaita2ya 1:1b17dcd80a7d 36 // get input from console
iwaita2ya 1:1b17dcd80a7d 37 getLineFromSerial(pointer, sizeof(lineBuffer));
iwaita2ya 1:1b17dcd80a7d 38
iwaita2ya 1:1b17dcd80a7d 39 // update RTC based on input value
iwaita2ya 1:1b17dcd80a7d 40 updateRealTimeClock(pointer);
bcostm 0:bad75bd13618 41 }
bcostm 0:bad75bd13618 42 }
iwaita2ya 1:1b17dcd80a7d 43
iwaita2ya 1:1b17dcd80a7d 44 // Functions -------------------------------------------------------------------------------------
iwaita2ya 1:1b17dcd80a7d 45 // Display Current Time on LCD
iwaita2ya 1:1b17dcd80a7d 46 void displayOnLcd() {
iwaita2ya 1:1b17dcd80a7d 47 myled = !myled;
iwaita2ya 1:1b17dcd80a7d 48
iwaita2ya 1:1b17dcd80a7d 49 currentTime = time(NULL);
iwaita2ya 1:1b17dcd80a7d 50 strftime(lcdBuffer, 32, "%Y/%m/%d %H:%M:%S", localtime(&currentTime));
iwaita2ya 1:1b17dcd80a7d 51
iwaita2ya 1:1b17dcd80a7d 52 lcd.cls();
iwaita2ya 1:1b17dcd80a7d 53 lcd.locate(0,0);
iwaita2ya 1:1b17dcd80a7d 54 lcd.printf("RTC:%s", lcdBuffer);
iwaita2ya 1:1b17dcd80a7d 55
iwaita2ya 1:1b17dcd80a7d 56 myled = !myled;
iwaita2ya 1:1b17dcd80a7d 57 };
iwaita2ya 1:1b17dcd80a7d 58
iwaita2ya 1:1b17dcd80a7d 59 // Update RTC
iwaita2ya 1:1b17dcd80a7d 60 void updateRealTimeClock(char *buffer) {
iwaita2ya 1:1b17dcd80a7d 61 char *tp;
iwaita2ya 1:1b17dcd80a7d 62 char *timeArray[6];
iwaita2ya 1:1b17dcd80a7d 63 int arrayIndex;
iwaita2ya 1:1b17dcd80a7d 64 struct tm struct_time;
iwaita2ya 1:1b17dcd80a7d 65
iwaita2ya 1:1b17dcd80a7d 66 // extract number from string
iwaita2ya 1:1b17dcd80a7d 67 arrayIndex = 0;
iwaita2ya 1:1b17dcd80a7d 68 tp = strtok( buffer, " /:-" );
iwaita2ya 1:1b17dcd80a7d 69 timeArray[arrayIndex++] = tp;
iwaita2ya 1:1b17dcd80a7d 70 printf("%d ", atoi(tp));
iwaita2ya 1:1b17dcd80a7d 71 while ( tp != NULL && arrayIndex < 6 ) {
iwaita2ya 1:1b17dcd80a7d 72 tp = strtok( NULL," /:-" );
iwaita2ya 1:1b17dcd80a7d 73 timeArray[arrayIndex++] = tp;
iwaita2ya 1:1b17dcd80a7d 74 if ( tp != NULL ) {
iwaita2ya 1:1b17dcd80a7d 75 printf("%d ", atoi(tp));
iwaita2ya 1:1b17dcd80a7d 76 }
iwaita2ya 1:1b17dcd80a7d 77 }
iwaita2ya 1:1b17dcd80a7d 78 printf("\r\n");
iwaita2ya 1:1b17dcd80a7d 79
iwaita2ya 1:1b17dcd80a7d 80 // store number into time struct
iwaita2ya 1:1b17dcd80a7d 81 struct_time.tm_year = atoi(timeArray[0]) - 1900;
iwaita2ya 1:1b17dcd80a7d 82 struct_time.tm_mon = atoi(timeArray[1]) - 1;
iwaita2ya 1:1b17dcd80a7d 83 struct_time.tm_mday = atoi(timeArray[2]);
iwaita2ya 1:1b17dcd80a7d 84 struct_time.tm_hour = atoi(timeArray[3]);
iwaita2ya 1:1b17dcd80a7d 85 struct_time.tm_min = atoi(timeArray[4]);
iwaita2ya 1:1b17dcd80a7d 86 struct_time.tm_sec = atoi(timeArray[5]);
iwaita2ya 1:1b17dcd80a7d 87
iwaita2ya 1:1b17dcd80a7d 88 currentTime = mktime(&struct_time);
iwaita2ya 1:1b17dcd80a7d 89 set_time(currentTime);
iwaita2ya 1:1b17dcd80a7d 90 }
iwaita2ya 1:1b17dcd80a7d 91
iwaita2ya 1:1b17dcd80a7d 92 // Read & display input data from console
iwaita2ya 1:1b17dcd80a7d 93 void getLineFromSerial(char *keyBuffer, int bufferLength)
iwaita2ya 1:1b17dcd80a7d 94 {
iwaita2ya 1:1b17dcd80a7d 95 char c;
iwaita2ya 1:1b17dcd80a7d 96 int index = 0;
iwaita2ya 1:1b17dcd80a7d 97
iwaita2ya 1:1b17dcd80a7d 98 for (;;) {
iwaita2ya 1:1b17dcd80a7d 99 // break if keyBuffer is full
iwaita2ya 1:1b17dcd80a7d 100 if (index >= bufferLength) {
iwaita2ya 1:1b17dcd80a7d 101 break;
iwaita2ya 1:1b17dcd80a7d 102 }
iwaita2ya 1:1b17dcd80a7d 103
iwaita2ya 1:1b17dcd80a7d 104 // read input
iwaita2ya 1:1b17dcd80a7d 105 c = pc.getc();
iwaita2ya 1:1b17dcd80a7d 106 pc.putc(c);
iwaita2ya 1:1b17dcd80a7d 107
iwaita2ya 1:1b17dcd80a7d 108 // break if end
iwaita2ya 1:1b17dcd80a7d 109 if (c == '\r') {
iwaita2ya 1:1b17dcd80a7d 110 keyBuffer[index++] = c;
iwaita2ya 1:1b17dcd80a7d 111 printf("\n");
iwaita2ya 1:1b17dcd80a7d 112 break;
iwaita2ya 1:1b17dcd80a7d 113 }
iwaita2ya 1:1b17dcd80a7d 114
iwaita2ya 1:1b17dcd80a7d 115 // store in keyBuffer
iwaita2ya 1:1b17dcd80a7d 116 keyBuffer[index++] = c;
iwaita2ya 1:1b17dcd80a7d 117 }
iwaita2ya 1:1b17dcd80a7d 118 }
iwaita2ya 1:1b17dcd80a7d 119
iwaita2ya 1:1b17dcd80a7d 120 // display message and ask user to input time
iwaita2ya 1:1b17dcd80a7d 121 void displayMessageOnConsole() {
iwaita2ya 1:1b17dcd80a7d 122 currentTime = time(NULL);
iwaita2ya 1:1b17dcd80a7d 123 strftime(lcdBuffer, 32, "%Y/%m/%d %H:%M:%S", localtime(&currentTime));
iwaita2ya 1:1b17dcd80a7d 124
iwaita2ya 1:1b17dcd80a7d 125 printf("Current Time:%s\r\n", lcdBuffer);
iwaita2ya 1:1b17dcd80a7d 126 printf("Enter new Time (YYYY/mm/dd HH:MM:SS)\r\n");
iwaita2ya 1:1b17dcd80a7d 127 }
iwaita2ya 1:1b17dcd80a7d 128