Outputs the original DS3231demo to a COM port rather than an debugger(?)

Dependencies:   ds3231 mbed

Fork of DS3231demo by Maxim Integrated

Files at this revision

API Documentation at this revision

Comitter:
j3
Date:
Fri Feb 06 05:14:26 2015 +0000
Parent:
1:7db4a1cc7abb
Child:
3:826946b4eead
Commit message:
Changed date time members to uint32_t to prevent roll over (unless user enters something bigger than 4x10^9++); ; fixed 24 hr mode reporting, & w/0x3F instead of 0x1F (12hr mode)

Changed in this revision

ds3231.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/ds3231.lib	Thu Nov 20 00:04:13 2014 +0000
+++ b/ds3231.lib	Fri Feb 06 05:14:26 2015 +0000
@@ -1,1 +1,1 @@
-http://developer.mbed.org/teams/Maxim-Integrated/code/ds3231/#4e6e761c60f2
+http://developer.mbed.org/teams/Maxim-Integrated/code/ds3231/#3b55ed3f71d3
--- 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