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

Dependencies:   mbed Clock

Committer:
hudakz
Date:
Mon Nov 30 11:36:44 2015 +0000
Revision:
3:0a77d653f8a6
Parent:
2:0fcd1b86588b
Child:
4:abbab29cf5c1
Updated.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hudakz 0:81acb52fed21 1 /**
hudakz 0:81acb52fed21 2 * Demonstrates how to use the Clock library
hudakz 0:81acb52fed21 3 *
hudakz 2:0fcd1b86588b 4 * Note: It's a software implemented Real Time Clock.
hudakz 2:0fcd1b86588b 5 * No external hardware (like DS1307 or DS3231 or etc.) is needed.
hudakz 0:81acb52fed21 6 *
hudakz 0:81acb52fed21 7 */
hudakz 0:81acb52fed21 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 2:0fcd1b86588b 15 Clock rtc; // Create an instance of Clock class (set to 00:00:00 1 January, 1970)
hudakz 0:81acb52fed21 16
hudakz 2:0fcd1b86588b 17 // Create some alarms
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 2:0fcd1b86588b 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 0:81acb52fed21 24 * @brief Clock tick 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 3:0a77d653f8a6 35 * @note
hudakz 3:0a77d653f8a6 36 * @param
hudakz 3:0a77d653f8a6 37 * @retval
hudakz 3:0a77d653f8a6 38 */
hudakz 0:81acb52fed21 39 int main() {
hudakz 2:0fcd1b86588b 40 rtc.attach(&onClockTick); // attach a handler function to the rtc's tick event
hudakz 0:81acb52fed21 41
hudakz 0:81acb52fed21 42 //
hudakz 1:0e2956eaae94 43 // Set rtc for instance to 2015, March, 24th, 11 hours, 35 minutes, 45 seconds
hudakz 0:81acb52fed21 44 //
hudakz 2:0fcd1b86588b 45 rtc.set(2015, 3, 24, 11, 35, 45);
hudakz 0:81acb52fed21 46
hudakz 0:81acb52fed21 47 while (true) {
hudakz 1:0e2956eaae94 48 if(ticked == true) {
hudakz 1:0e2956eaae94 49 ticked = false; // clear the flag for next use
hudakz 1:0e2956eaae94 50
hudakz 2:0fcd1b86588b 51 // In your application you can
hudakz 3:0a77d653f8a6 52 // draw clock hands on a graphical display
hudakz 3:0a77d653f8a6 53 // or update digital display or etc.
hudakz 2:0fcd1b86588b 54 // ...
hudakz 2:0fcd1b86588b 55 // In this demo we just print some info ..
hudakz 1:0e2956eaae94 56 //
hudakz 2:0fcd1b86588b 57 pc.printf("==================================================\r\n");
hudakz 1:0e2956eaae94 58 //time_t time = time(NULL); // you can call C library time function if you like
hudakz 1:0e2956eaae94 59 time_t time = rtc.time(); // or Clock function
hudakz 2:0fcd1b86588b 60 pc.printf("Time as seconds since January 1, 1970 = %d\r\n", time);
hudakz 2:0fcd1b86588b 61 pc.printf("Time as a basic string = %s\r\n", ctime(&time));
hudakz 1:0e2956eaae94 62
hudakz 1:0e2956eaae94 63 //
hudakz 1:0e2956eaae94 64 // Use custom format:
hudakz 1:0e2956eaae94 65 //
hudakz 1:0e2956eaae94 66 char buffer[32];
hudakz 1:0e2956eaae94 67 strftime(buffer, 32, "%I:%M %p", localtime(&time));
hudakz 2:0fcd1b86588b 68 pc.printf("Time as a custom formatted string = %s\r\n", buffer);
hudakz 1:0e2956eaae94 69
hudakz 1:0e2956eaae94 70 //
hudakz 3:0a77d653f8a6 71 // Create your own format:
hudakz 1:0e2956eaae94 72 //
hudakz 2:0fcd1b86588b 73 pc.printf("Date: %.4d-%.2d-%.2d\r\n", rtc.year(), rtc.mon(), rtc.mday());
hudakz 2:0fcd1b86588b 74 pc.printf("Time: %.2d:%.2d:%.2d\r\n", rtc.hour(), rtc.min(), rtc.sec());
hudakz 1:0e2956eaae94 75
hudakz 1:0e2956eaae94 76 //
hudakz 1:0e2956eaae94 77 // Perform periodical tasks:
hudakz 1:0e2956eaae94 78 //
hudakz 1:0e2956eaae94 79 if(rtc.sec() % 10 == 0) {
hudakz 3:0a77d653f8a6 80 pc.printf("\r\n Called once per 10 seconds\r\n\r\n");
hudakz 1:0e2956eaae94 81 }
hudakz 1:0e2956eaae94 82
hudakz 1:0e2956eaae94 83 if(rtc.sec() == 0) {
hudakz 3:0a77d653f8a6 84 pc.printf("\r\n Called once per minute.\r\n\r\n");
hudakz 1:0e2956eaae94 85
hudakz 1:0e2956eaae94 86 if(rtc.min() % 5 == 0)
hudakz 3:0a77d653f8a6 87 pc.printf("\r\n Called once per 5 minutes\r\n");
hudakz 3:0a77d653f8a6 88
hudakz 3:0a77d653f8a6 89 if(rtc.min() == 0) {
hudakz 3:0a77d653f8a6 90 pc.printf("\r\n Called once per hour\r\n");
hudakz 3:0a77d653f8a6 91
hudakz 3:0a77d653f8a6 92 if(rtc.hour() % 3 == 0)
hudakz 3:0a77d653f8a6 93 pc.printf("\r\n Called once per 3 hours\r\n");
hudakz 1:0e2956eaae94 94
hudakz 3:0a77d653f8a6 95 if(rtc.hour() == 0) {
hudakz 3:0a77d653f8a6 96 pc.printf("\r\n Called at midnight\r\n");
hudakz 3:0a77d653f8a6 97
hudakz 3:0a77d653f8a6 98 if(rtc.wday() == 3)
hudakz 3:0a77d653f8a6 99 pc.printf("\r\n Called on Wednesday at midnight\r\n");
hudakz 3:0a77d653f8a6 100 }
hudakz 3:0a77d653f8a6 101 }
hudakz 1:0e2956eaae94 102 }
hudakz 1:0e2956eaae94 103
hudakz 1:0e2956eaae94 104 //
hudakz 1:0e2956eaae94 105 // Trigger alarms:
hudakz 1:0e2956eaae94 106 //
hudakz 1:0e2956eaae94 107 if(rtc.time() == alarm1) {
hudakz 2:0fcd1b86588b 108 pc.printf("\r\n Alarm1 triggered!\r\n\r\n");
hudakz 1:0e2956eaae94 109 }
hudakz 1:0e2956eaae94 110
hudakz 1:0e2956eaae94 111 if(rtc.time() == alarm2) {
hudakz 2:0fcd1b86588b 112 pc.printf("\r\n Alarm2 triggered!\r\n\r\n");
hudakz 1:0e2956eaae94 113 }
hudakz 0:81acb52fed21 114 }
hudakz 0:81acb52fed21 115 }
hudakz 0:81acb52fed21 116 }
hudakz 3:0a77d653f8a6 117