Zoltan Hudak
/
Clock_Hello
Demo for the Clock library (real time clock driven by a Ticker).
main.cpp
- Committer:
- hudakz
- Date:
- 2016-04-02
- Revision:
- 4:abbab29cf5c1
- Parent:
- 3:0a77d653f8a6
- Child:
- 5:dee2286a6b76
File content as of revision 4:abbab29cf5c1:
/** * Demo for the Clock library <https://developer.mbed.org/users/hudakz/code/Clock/> * * Note: Software implemented Real Time Clock driven by a Ticker. * No external hardware (like DS1307 or DS3231 or etc.) is needed. * */ #include "mbed.h" #include "Clock.h" Serial pc(USBTX, USBRX); Clock rtc; // Create an instance of Clock class (set to 00:00:00 January 1, 1970) // Create alarms as needed time_t alarm1 = Clock::asTime(2015, 3, 24, 11, 36, 15); // year, month (1 stands for Jan etc.), day of month, hour, minute, second time_t alarm2 = Clock::asTime(2015, 3, 24, 11, 37, 30); volatile bool ticked = false; // tick flag /** * @brief Clock tick event handler (called once a second) * @note Keep it as short as possible. * @param * @retval */ void onClockTick(void) { ticked = true; } /** * @brief Main * @note * @param * @retval */ int main() { rtc.attach(&onClockTick); // attach a handler function to the rtc's tick event // // Set rtc for instance to 2015, March, 24th, 11 hours, 35 minutes, 45 seconds // rtc.set(2015, 3, 24, 11, 35, 45); while (true) { if(ticked == true) { ticked = false; // clear the flag for next use // In your application you can // draw clock hands on a graphical display // or update digital display or etc. // ... // In this demo we just display some info on the connected PC's terminal .. // pc.printf("==================================================\n"); //time_t time = time(NULL); // you can call C library time function if you like time_t time = rtc.time(); // or Clock function pc.printf("Time as seconds since January 1, 1970 = %d\n", time); pc.printf("Time as a basic string = %s\n", ctime(&time)); // // Use custom format: // char buffer[32]; strftime(buffer, 32, "%I:%M %p", localtime(&time)); pc.printf("Time as a custom formatted string = %s\n", buffer); // // Create your own format: // pc.printf("Date: %.4d-%.2d-%.2d\n", rtc.year(), rtc.mon(), rtc.mday()); pc.printf("Time: %.2d:%.2d:%.2d\n", rtc.hour(), rtc.min(), rtc.sec()); // // Perform periodical tasks: // if(rtc.sec() % 10 == 0) { pc.printf("Called once per 10 seconds\n"); } if(rtc.sec() == 0) { pc.printf("Called once per minute.\n"); if(rtc.min() % 5 == 0) pc.printf("Called once per 5 minutes\n"); if(rtc.min() == 0) { pc.printf("\Called once per hour\n"); if(rtc.hour() % 3 == 0) pc.printf("Called once per 3 hours\n"); if(rtc.hour() == 0) { pc.printf("Called at midnight\n"); if(rtc.wday() == 3) pc.printf("Called on Wednesday at midnight\n"); } } } // // Trigger the alarms: // if(rtc.time() == alarm1) { pc.printf("Alarm1 triggered!\n"); } if(rtc.time() == alarm2) { pc.printf("Alarm2 triggered!\n"); } } } }