Ejemplo RTC DS3231

Dependencies:   mbed ds3231

Revision:
2:76cd47a603b5
Parent:
1:7db4a1cc7abb
Child:
3:826946b4eead
--- a/main.cpp	Thu Nov 20 00:04:13 2014 +0000
+++ b/main.cpp	Fri Feb 06 05:14:26 2015 +0000
@@ -1,27 +1,65 @@
 //Test Ds3231 class
 
+
 #include "ds3231.h"
 
-void get_user_input(char* message, uint8_t min, uint8_t max, uint8_t* member);
+#define ESC 0x1B
 
-Serial term(USBTX, USBRX);
+void get_user_input(char* message, uint8_t min, uint8_t max, uint32_t* member);
+void get_user_input(char* message, uint8_t min, uint8_t max, bool* member);
 
 int main(void)
 {
     //rtc object
     Ds3231 rtc(D14, D15); 
     
+    time_t epoch_time;
+    
     //DS3231 rtc variables
-    ds3231_cntl_stat_t rtc_control_status = {0,0};
-    ds3231_time_t rtc_time = {0,0,0,1,1};
-    ds3231_calendar_t rtc_calendar = {0,0,0,0};
+    
+    //default, use bit masks in ds3231.h for desired operation
+    ds3231_cntl_stat_t rtc_control_status = {0,0}; 
+    ds3231_time_t rtc_time;
+    ds3231_calendar_t rtc_calendar;
     
     rtc.set_cntl_stat_reg(rtc_control_status);
     
-    //Get hour from user
-    get_user_input("\nPlease enter the hour (0-12): ", 0, 12, 
-                   &rtc_time.hours);
+    //get day from user
+    get_user_input("\nPlease enter day of week, 1 for Sunday (1-7): ", 1,
+                    7, &rtc_calendar.day);
+
+    //get day of month from user
+    get_user_input("\nPlease enter day of month (1-31): ", 1, 31, 
+                    &rtc_calendar.date);
+
+    //get month from user
+    get_user_input("\nPlease enter the month, 1 for January (1-12): ", 1, 
+                    12, &rtc_calendar.month);
+
+    //get year from user
+    get_user_input("\nPlease enter the year (0-99): ",0, 99, 
+                    &rtc_calendar.year);
+      
+    //Get time mode
+    get_user_input("\nWhat time mode? 1 for 12hr 0 for 24hr: ", 0, 1, 
+                   &rtc_time.mode);  
     
+    if(rtc_time.mode)
+    {
+        //Get AM/PM status
+        get_user_input("\nIs it AM or PM? 0 for AM 1 for PM: ", 0, 1, 
+                       &rtc_time.am_pm);  
+        //Get hour from user
+        get_user_input("\nPlease enter the hour (1-12): ", 1, 12, 
+                       &rtc_time.hours);
+    }
+    else
+    {
+        //Get hour from user
+        get_user_input("\nPlease enter the hour (0-23): ", 0, 23, 
+                       &rtc_time.hours);
+    }
+     
     //Get minutes from user
     get_user_input("\nPlease enter the minute (0-59): ", 0, 59, 
                    &rtc_time.minutes);
@@ -31,29 +69,41 @@
     get_user_input("\nPlease enter the second (0-59): ", 0, 59, 
                    &rtc_time.seconds);
     
-    //get day from user
-    get_user_input("Please enter day of week, 1 for Sunday (1-7): ", 1,
-                    7, &rtc_calendar.day);
-
-    //get day of month from user
-    get_user_input("Please enter day of month (1-31): ", 1, 31, 
-                    &rtc_calendar.date);
-
-    //get month from user
-    get_user_input("Please enter the month, 1 for January (1-12): ", 1, 
-                    12, &rtc_calendar.month);
-
-    //get year from user
-    get_user_input("Please enter the year (0-99): ",0, 99, 
-                    &rtc_calendar.year);
+    
+    
+    //Set the time, uses inverted logic for return value
+    if(rtc.set_time(rtc_time))
+    {
+        printf("\nrtc.set_time failed!!\n");
+        exit(0);
+    }
+    
+    //Set the calendar, uses inverted logic for return value
+    if(rtc.set_calendar(rtc_calendar))
+    {
+        printf("\nrtc.set_calendar failed!!\n");
+        exit(0);
+    }
+    
+    char buffer[32];
     
-    //Set the time
-    rtc.set_time(rtc_time);
-    
-    //Set the calendar
-    rtc.set_calendar(rtc_calendar);
-    
-    return 0;       
+    for(;;)
+    {   
+        printf("%c[2J", ESC); //clear screen
+        printf("%c[H", ESC); //move cursor to Home
+        
+        //new epoch time fx
+        epoch_time = rtc.get_epoch();
+        
+        printf("\nTime as seconds since January 1, 1970 = %d\n", epoch_time);
+        
+        printf("\nTime as a basic string = %s", ctime(&epoch_time));
+ 
+        strftime(buffer, 32, "%I:%M %p\n", localtime(&epoch_time));
+        printf("\nTime as a custom formatted string = %s", buffer);
+        
+        wait(1.0);
+    }//loop 
 }
 
 
@@ -68,21 +118,49 @@
 * Description: get time/date input from user
 *
 **********************************************************************/
-void get_user_input(char* message, uint8_t min, uint8_t max, uint8_t* member)
+void get_user_input(char* message, uint8_t min, uint8_t max, uint32_t* member)
 {
+    uint32_t temp;
 
     do
     {
-        term.printf("\n%s", message);
-        term.scanf("%d", member);
+        printf("\n%s", message);
+        
+        //for some reason mbed doesn't like a pointer to a member in scanf
+        //term.scanf("%d", member); works with gcc on RPi
+        scanf("%d", &temp);
+        
+        *member = temp;
        
         if((*(member)< min) || (*(member) > max))
         {
-            term.printf("\nERROR-RTFI");
+            printf("\nERROR-RTI");
         }
     }
     while((*(member) < min) || (*(member) > max));
+}
 
+
+void get_user_input(char* message, uint8_t min, uint8_t max, bool* member)
+{
+    bool temp;
+
+    do
+    {
+        printf("\n%s", message);
+        
+        //for some reason mbed doesn't like a pointer to a member in scanf
+        //term.scanf("%d", member); works with gcc on RPi
+        scanf("%d", &temp);
+        
+        *member = temp;
+       
+        if((*(member)< min) || (*(member) > max))
+        {
+            printf("\nERROR-RTI");
+        }
+    }
+    while((*(member) < min) || (*(member) > max));
 }
 
     
\ No newline at end of file