Demo for the Clock library (real time clock driven by a Ticker).

Dependencies:   mbed Clock

Committer:
hudakz
Date:
Tue Jan 15 14:47:50 2019 +0000
Revision:
5:dee2286a6b76
Parent:
4:abbab29cf5c1
updated

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hudakz 0:81acb52fed21 1 /**
hudakz 4:abbab29cf5c1 2 * Demo for the Clock library <https://developer.mbed.org/users/hudakz/code/Clock/>
hudakz 5:dee2286a6b76 3 *
hudakz 5:dee2286a6b76 4 * Note: Software implemented Real Time Clock driven by a Ticker.
hudakz 2:0fcd1b86588b 5 * No external hardware (like DS1307 or DS3231 or etc.) is needed.
hudakz 5:dee2286a6b76 6 *
hudakz 0:81acb52fed21 7 */
hudakz 5:dee2286a6b76 8
hudakz 0:81acb52fed21 9 #include "mbed.h"
hudakz 0:81acb52fed21 10 #include "Clock.h"
hudakz 0:81acb52fed21 11
hudakz 2:0fcd1b86588b 12 Serial pc(USBTX, USBRX);
hudakz 0:81acb52fed21 13
hudakz 0:81acb52fed21 14
hudakz 4:abbab29cf5c1 15 Clock rtc; // Create an instance of Clock class (set to 00:00:00 January 1, 1970)
hudakz 0:81acb52fed21 16
hudakz 4:abbab29cf5c1 17 // Create alarms as needed
hudakz 1:0e2956eaae94 18 time_t alarm1 = Clock::asTime(2015, 3, 24, 11, 36, 15); // year, month (1 stands for Jan etc.), day of month, hour, minute, second
hudakz 5:dee2286a6b76 19 time_t alarm2 = Clock::asTime(2015, 3, 24, 11, 37, 30);
hudakz 0:81acb52fed21 20
hudakz 1:0e2956eaae94 21 volatile bool ticked = false; // tick flag
hudakz 0:81acb52fed21 22
hudakz 0:81acb52fed21 23 /**
hudakz 5:dee2286a6b76 24 * @brief Clock tick ISR - event handler (called once a second)
hudakz 1:0e2956eaae94 25 * @note Keep it as short as possible.
hudakz 0:81acb52fed21 26 * @param
hudakz 0:81acb52fed21 27 * @retval
hudakz 0:81acb52fed21 28 */
hudakz 1:0e2956eaae94 29 void onClockTick(void) {
hudakz 1:0e2956eaae94 30 ticked = true;
hudakz 0:81acb52fed21 31 }
hudakz 0:81acb52fed21 32
hudakz 3:0a77d653f8a6 33 /**
hudakz 3:0a77d653f8a6 34 * @brief Main
hudakz 5:dee2286a6b76 35 * @note
hudakz 3:0a77d653f8a6 36 * @param
hudakz 3:0a77d653f8a6 37 * @retval
hudakz 3:0a77d653f8a6 38 */
hudakz 0:81acb52fed21 39 int main() {
hudakz 5:dee2286a6b76 40 time_t rawtime;
hudakz 5:dee2286a6b76 41 struct tm* p_tm;
hudakz 0:81acb52fed21 42
hudakz 5:dee2286a6b76 43 rtc.attach(onClockTick); // attach a handler function to the rtc's tick event
hudakz 5:dee2286a6b76 44
hudakz 0:81acb52fed21 45 //
hudakz 1:0e2956eaae94 46 // Set rtc for instance to 2015, March, 24th, 11 hours, 35 minutes, 45 seconds
hudakz 0:81acb52fed21 47 //
hudakz 2:0fcd1b86588b 48 rtc.set(2015, 3, 24, 11, 35, 45);
hudakz 5:dee2286a6b76 49 //rawtime = time(NULL); // if you like to call C library time function
hudakz 5:dee2286a6b76 50 rawtime = rtc.time(); // if you like to call Clock function
hudakz 5:dee2286a6b76 51
hudakz 5:dee2286a6b76 52 p_tm = gmtime(&rawtime);
hudakz 5:dee2286a6b76 53 printf("Current time around the World:\r\n");
hudakz 5:dee2286a6b76 54 printf("Phoenix, AZ (U.S.) : %d:%d\r\n", (p_tm->tm_hour -7) % 24, p_tm->tm_min);
hudakz 5:dee2286a6b76 55 printf("Reykjavik (Iceland) : %d:%d\r\n", (p_tm->tm_hour + 0) % 24, p_tm->tm_min);
hudakz 5:dee2286a6b76 56 printf("Beijing (China) : %d:%d\r\n", (p_tm->tm_hour + 8) % 24, p_tm->tm_min);
hudakz 5:dee2286a6b76 57
hudakz 5:dee2286a6b76 58
hudakz 0:81acb52fed21 59
hudakz 0:81acb52fed21 60 while (true) {
hudakz 1:0e2956eaae94 61 if(ticked == true) {
hudakz 5:dee2286a6b76 62 ticked = false; // clear the flag for next use in ISR
hudakz 5:dee2286a6b76 63
hudakz 5:dee2286a6b76 64 // You draw clock hands on a graphical display
hudakz 5:dee2286a6b76 65 // or update/refresh digital display or etc.
hudakz 2:0fcd1b86588b 66 // ...
hudakz 5:dee2286a6b76 67 // In this demo we just display some info on the PC's serial terminal ..
hudakz 1:0e2956eaae94 68 //
hudakz 5:dee2286a6b76 69 pc.printf("==================================================\r\n");
hudakz 5:dee2286a6b76 70 //rawtime = time(NULL); // if you like you can call C library time function
hudakz 5:dee2286a6b76 71 rawtime = rtc.time(); // or Clock's function
hudakz 5:dee2286a6b76 72 pc.printf("Time as seconds since January 1, 1970 = %d\r\n", rawtime);
hudakz 5:dee2286a6b76 73 pc.printf("Time as a basic string = %s", ctime(&rawtime));
hudakz 5:dee2286a6b76 74
hudakz 1:0e2956eaae94 75 //
hudakz 1:0e2956eaae94 76 // Use custom format:
hudakz 1:0e2956eaae94 77 //
hudakz 1:0e2956eaae94 78 char buffer[32];
hudakz 5:dee2286a6b76 79 strftime(buffer, 32, "%I:%M %p", localtime(&rawtime));
hudakz 5:dee2286a6b76 80 pc.printf("Time as a custom formatted string = %s\r\n", buffer);
hudakz 5:dee2286a6b76 81
hudakz 1:0e2956eaae94 82 //
hudakz 3:0a77d653f8a6 83 // Create your own format:
hudakz 1:0e2956eaae94 84 //
hudakz 5:dee2286a6b76 85 pc.printf("Date: %.4d-%.2d-%.2d\r\n", rtc.year(), rtc.mon(), rtc.mday());
hudakz 5:dee2286a6b76 86 pc.printf("Time: %.2d:%.2d:%.2d\r\n", rtc.hour(), rtc.min(), rtc.sec());
hudakz 1:0e2956eaae94 87
hudakz 5:dee2286a6b76 88 pc.printf("------------------------------------\r\n");
hudakz 5:dee2286a6b76 89
hudakz 1:0e2956eaae94 90 //
hudakz 1:0e2956eaae94 91 // Perform periodical tasks:
hudakz 1:0e2956eaae94 92 //
hudakz 1:0e2956eaae94 93 if(rtc.sec() % 10 == 0) {
hudakz 5:dee2286a6b76 94 pc.printf("Called once a 10 seconds\r\n");
hudakz 1:0e2956eaae94 95 }
hudakz 5:dee2286a6b76 96
hudakz 1:0e2956eaae94 97 if(rtc.sec() == 0) {
hudakz 5:dee2286a6b76 98 pc.printf("Called once a minute.\r\n");
hudakz 5:dee2286a6b76 99
hudakz 1:0e2956eaae94 100 if(rtc.min() % 5 == 0)
hudakz 5:dee2286a6b76 101 pc.printf("Called once a 5 minutes\r\n");
hudakz 5:dee2286a6b76 102
hudakz 3:0a77d653f8a6 103 if(rtc.min() == 0) {
hudakz 5:dee2286a6b76 104 pc.printf("Called once an hour\r\n");
hudakz 5:dee2286a6b76 105
hudakz 3:0a77d653f8a6 106 if(rtc.hour() % 3 == 0)
hudakz 5:dee2286a6b76 107 pc.printf("Called once a 3 hours\r\n");
hudakz 5:dee2286a6b76 108
hudakz 3:0a77d653f8a6 109 if(rtc.hour() == 0) {
hudakz 5:dee2286a6b76 110 pc.printf("Called at midnight\r\n");
hudakz 5:dee2286a6b76 111
hudakz 3:0a77d653f8a6 112 if(rtc.wday() == 3)
hudakz 5:dee2286a6b76 113 pc.printf("Called on Wednesday at midnight\r\n");
hudakz 3:0a77d653f8a6 114 }
hudakz 3:0a77d653f8a6 115 }
hudakz 1:0e2956eaae94 116 }
hudakz 5:dee2286a6b76 117
hudakz 1:0e2956eaae94 118 //
hudakz 4:abbab29cf5c1 119 // Trigger the alarms:
hudakz 1:0e2956eaae94 120 //
hudakz 1:0e2956eaae94 121 if(rtc.time() == alarm1) {
hudakz 5:dee2286a6b76 122 pc.printf("Alarm1 triggered!\r\n");
hudakz 1:0e2956eaae94 123 }
hudakz 5:dee2286a6b76 124
hudakz 1:0e2956eaae94 125 if(rtc.time() == alarm2) {
hudakz 5:dee2286a6b76 126 pc.printf("Alarm2 triggered!\r\n");
hudakz 1:0e2956eaae94 127 }
hudakz 5:dee2286a6b76 128
hudakz 5:dee2286a6b76 129 pc.printf("------------------------------------\r\n");
hudakz 0:81acb52fed21 130 }
hudakz 0:81acb52fed21 131 }
hudakz 5:dee2286a6b76 132 }