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

Dependencies:   mbed Clock

main.cpp

Committer:
hudakz
Date:
2015-11-30
Revision:
3:0a77d653f8a6
Parent:
2:0fcd1b86588b
Child:
4:abbab29cf5c1

File content as of revision 3:0a77d653f8a6:

/**
 * Demonstrates how to use the Clock library
 * 
 * Note: It's a software implemented Real Time Clock. 
 *       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 1 January, 1970)

// Create some alarms
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 print some info ..
            //
            pc.printf("==================================================\r\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\r\n", time);
            pc.printf("Time as a basic string = %s\r\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\r\n", buffer);
            
            //
            // Create your own format:
            //
            pc.printf("Date:  %.4d-%.2d-%.2d\r\n", rtc.year(), rtc.mon(), rtc.mday());
            pc.printf("Time:  %.2d:%.2d:%.2d\r\n", rtc.hour(), rtc.min(), rtc.sec());
            
            //
            // Perform periodical tasks:
            //
            if(rtc.sec() % 10 == 0) {
                pc.printf("\r\n  Called once per 10 seconds\r\n\r\n");
            }
            
            if(rtc.sec() == 0) {
                pc.printf("\r\n  Called once per minute.\r\n\r\n");
                
                if(rtc.min() % 5 == 0)
                    pc.printf("\r\n  Called once per 5 minutes\r\n");
        
                if(rtc.min() == 0) {
                    pc.printf("\r\n  Called once per hour\r\n");
                    
                    if(rtc.hour() % 3 == 0)
                        pc.printf("\r\n  Called once per 3 hours\r\n");
        
                    if(rtc.hour() == 0) {
                        pc.printf("\r\n  Called at midnight\r\n");
                        
                        if(rtc.wday() == 3)
                            pc.printf("\r\n  Called on Wednesday at midnight\r\n");
                    }
                }
            }
        
            //
            // Trigger alarms:
            //
            if(rtc.time() == alarm1) {
                pc.printf("\r\n  Alarm1 triggered!\r\n\r\n");
            }
        
            if(rtc.time() == alarm2) {
                pc.printf("\r\n  Alarm2 triggered!\r\n\r\n");
            }
        }
    }
}