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

Dependencies:   mbed Clock

Committer:
hudakz
Date:
Sat Oct 24 11:20:09 2015 +0000
Revision:
1:0e2956eaae94
Parent:
0:81acb52fed21
Child:
2:0fcd1b86588b
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 1:0e2956eaae94 4 * Note: It's a software implemented Real Time Clock. No external hardware (like DS1307 or DS3231 or etc.) is needed.
hudakz 0:81acb52fed21 5 *
hudakz 0:81acb52fed21 6 */
hudakz 0:81acb52fed21 7
hudakz 0:81acb52fed21 8 #include "mbed.h"
hudakz 0:81acb52fed21 9 #include "Clock.h"
hudakz 0:81acb52fed21 10
hudakz 0:81acb52fed21 11 Serial serial(USBTX, USBRX);
hudakz 0:81acb52fed21 12
hudakz 0:81acb52fed21 13
hudakz 1:0e2956eaae94 14 Clock rtc; // Create an instance of Clock class (set to 00:00:00 January 1, 1970)
hudakz 0:81acb52fed21 15
hudakz 0:81acb52fed21 16 // Create some alarm times
hudakz 1:0e2956eaae94 17 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 1:0e2956eaae94 18 time_t alarm2 = Clock::asTime(2015, 3, 24, 11, 37, 30); // year, month (1 stands for Jan etc.), day of month, hour, minute, second
hudakz 0:81acb52fed21 19
hudakz 1:0e2956eaae94 20 volatile bool ticked = false; // tick flag
hudakz 0:81acb52fed21 21
hudakz 0:81acb52fed21 22 /**
hudakz 0:81acb52fed21 23 * @brief Clock tick event handler (called once a second)
hudakz 1:0e2956eaae94 24 * @note Keep it as short as possible.
hudakz 0:81acb52fed21 25 * @param
hudakz 0:81acb52fed21 26 * @retval
hudakz 0:81acb52fed21 27 */
hudakz 1:0e2956eaae94 28 void onClockTick(void) {
hudakz 1:0e2956eaae94 29 ticked = true;
hudakz 0:81acb52fed21 30 }
hudakz 0:81acb52fed21 31
hudakz 1:0e2956eaae94 32
hudakz 0:81acb52fed21 33 int main() {
hudakz 1:0e2956eaae94 34 rtc.attach(onClockTick); // attach a handler function to the rtc's tick event
hudakz 0:81acb52fed21 35
hudakz 0:81acb52fed21 36 //
hudakz 1:0e2956eaae94 37 // Set rtc for instance to 2015, March, 24th, 11 hours, 35 minutes, 45 seconds
hudakz 0:81acb52fed21 38 //
hudakz 0:81acb52fed21 39 rtc.set(2015, 3, 24, 11, 35, 45); // year, month (1 stands for Jan etc.), day of month, hour, minute, second
hudakz 0:81acb52fed21 40
hudakz 0:81acb52fed21 41 while (true) {
hudakz 1:0e2956eaae94 42 if(ticked == true) {
hudakz 1:0e2956eaae94 43 ticked = false; // clear the flag for next use
hudakz 1:0e2956eaae94 44
hudakz 1:0e2956eaae94 45 //
hudakz 1:0e2956eaae94 46 // Draw (update) clock hands on a graphical display
hudakz 1:0e2956eaae94 47 // or show some time related information ..
hudakz 1:0e2956eaae94 48 //
hudakz 1:0e2956eaae94 49 serial.printf("==================================================\r\n");
hudakz 1:0e2956eaae94 50 //time_t time = time(NULL); // you can call C library time function if you like
hudakz 1:0e2956eaae94 51 time_t time = rtc.time(); // or Clock function
hudakz 1:0e2956eaae94 52 serial.printf("Time as seconds since January 1, 1970 = %d\r\n", time);
hudakz 1:0e2956eaae94 53 serial.printf("Time as a basic string = %s\r\n", ctime(&time));
hudakz 1:0e2956eaae94 54
hudakz 1:0e2956eaae94 55 //
hudakz 1:0e2956eaae94 56 // Use custom format:
hudakz 1:0e2956eaae94 57 //
hudakz 1:0e2956eaae94 58 char buffer[32];
hudakz 1:0e2956eaae94 59 strftime(buffer, 32, "%I:%M %p", localtime(&time));
hudakz 1:0e2956eaae94 60 serial.printf("Time as a custom formatted string = %s\r\n", buffer);
hudakz 1:0e2956eaae94 61
hudakz 1:0e2956eaae94 62 //
hudakz 1:0e2956eaae94 63 // Design your own format:
hudakz 1:0e2956eaae94 64 //
hudakz 1:0e2956eaae94 65 serial.printf("Date: %.4d-%.2d-%.2d\r\n", rtc.year(), rtc.mon(), rtc.mday());
hudakz 1:0e2956eaae94 66 serial.printf("Time: %.2d:%.2d:%.2d\r\n", rtc.hour(), rtc.min(), rtc.sec());
hudakz 1:0e2956eaae94 67
hudakz 1:0e2956eaae94 68 //
hudakz 1:0e2956eaae94 69 // Perform periodical tasks:
hudakz 1:0e2956eaae94 70 //
hudakz 1:0e2956eaae94 71 if(rtc.sec() % 10 == 0) {
hudakz 1:0e2956eaae94 72 serial.printf("\r\n Called each 10 seconds\r\n\r\n");
hudakz 1:0e2956eaae94 73 }
hudakz 1:0e2956eaae94 74
hudakz 1:0e2956eaae94 75 if(rtc.sec() == 0) {
hudakz 1:0e2956eaae94 76 serial.printf("\r\n Called each minute.\r\n\r\n");
hudakz 1:0e2956eaae94 77
hudakz 1:0e2956eaae94 78 if(rtc.min() % 5 == 0)
hudakz 1:0e2956eaae94 79 serial.printf("\r\n Called each 5 minutes\r\n");
hudakz 1:0e2956eaae94 80
hudakz 1:0e2956eaae94 81 if(rtc.min() == 0)
hudakz 1:0e2956eaae94 82 serial.printf("\r\n Called each hour\r\n");
hudakz 1:0e2956eaae94 83
hudakz 1:0e2956eaae94 84 if(rtc.hour() == 0)
hudakz 1:0e2956eaae94 85 serial.printf("\r\n Called at midnight\r\n");
hudakz 1:0e2956eaae94 86 }
hudakz 1:0e2956eaae94 87
hudakz 1:0e2956eaae94 88 //
hudakz 1:0e2956eaae94 89 // Trigger alarms:
hudakz 1:0e2956eaae94 90 //
hudakz 1:0e2956eaae94 91 if(rtc.time() == alarm1) {
hudakz 1:0e2956eaae94 92 serial.printf("\r\n Alarm1 triggered!\r\n\r\n");
hudakz 1:0e2956eaae94 93 }
hudakz 1:0e2956eaae94 94
hudakz 1:0e2956eaae94 95 if(rtc.time() == alarm2) {
hudakz 1:0e2956eaae94 96 serial.printf("\r\n Alarm2 triggered!\r\n\r\n");
hudakz 1:0e2956eaae94 97 }
hudakz 0:81acb52fed21 98 }
hudakz 0:81acb52fed21 99 }
hudakz 0:81acb52fed21 100 }