Fork of Demo program for ard2pmod library. Alarm features of RTC have not been tested, please try them out.

Dependencies:   Terminal ard2pmod mbed

Fork of ard2pmod_demo by Maxim Integrated

Revision:
1:37fd05629bd3
Parent:
0:f906040920d7
Child:
2:9b1e5efd9a09
--- a/main.cpp	Thu Nov 20 20:29:54 2014 +0000
+++ b/main.cpp	Wed Nov 26 20:18:26 2014 +0000
@@ -3,11 +3,16 @@
 
 #include "ard2pmod.h"
 
+void get_user_input(char* message, uint8_t min, uint8_t max, uint8_t* member);
+
+Serial term(USBTX, USBRX);
 
 int main(void)
 {
     /* available PMOD types
-       PMOD_TYPE_I2C,
+       PMOD_TYPE_I2C_A,
+       PMOD_TYPE_I2C_B,
+       PMOD_TYPE_I2C_AB,
        PMOD_TYPE_1_GPIO,
        PMOD_TYPE_2_SPI,
        PMOD_TYPE_3_UART,
@@ -15,12 +20,135 @@
        PMOD_TYPE_5_HBRIDGE,
        PMOD_TYPE_6_HBRIDGE
     */
+    Ard2Pmod ard2pmod(PMOD_TYPE_I2C_AB);
     
-    Ard2Pmod ard2pmod(PMOD_TYPE_1_GPIO);
+    //use to wiggle lines for PMOD_TYPE_1_GPIO
+    //BusOut pmod_A(D10, D11, D12, D13);
+    //BusOut pmod_B(D4, D5, D6, D7);
+    
+    //DS3231 rtc variables
+    
+    //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;
+    
+    ard2pmod.set_cntl_stat_reg(rtc_control_status);
+    
+    //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, 
+                   (uint8_t*) &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, 
+                       (uint8_t*) &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);
+    
+    
+    //Get seconds from user
+    get_user_input("\nPlease enter the second (0-59): ", 0, 59, 
+                   &rtc_time.seconds);
+    
+    
+    
+    //Set the time
+    ard2pmod.set_time(rtc_time);
+    
+    //Set the calendar
+    ard2pmod.set_calendar(rtc_calendar);
     
     for(;;)
     {
+        wait(1.0);
         
+        ard2pmod.get_time(&rtc_time);
+        ard2pmod.get_calendar(&rtc_calendar);
+        
+        term.printf("\n\nRTC Date and Time = %d/%d/%d ", 
+        rtc_calendar.month, rtc_calendar.date, rtc_calendar.year);
+        
+        if(rtc_time.mode)
+        {
+            if(rtc_time.am_pm)
+            {
+                term.printf(" %d:%d:%d PM",
+                rtc_time.hours, rtc_time.minutes, rtc_time.seconds);
+            }
+            else
+            {
+                term.printf(" %d:%d:%d AM",
+                rtc_time.hours, rtc_time.minutes, rtc_time.seconds);
+            }
+        }
+        else
+        {
+            term.printf(" %d:%d:%d",
+            rtc_time.hours, rtc_time.minutes, rtc_time.seconds);
+        }
+        
+    }//loop 
+}
+
+
+/**********************************************************************
+* Function: get_user_input() 
+* Parameters: message - user prompt
+*             min - minimum value of input
+*             max - maximum value of input
+*             member - pointer to struct member              
+* Returns: none
+*
+* Description: get time/date input from user
+*
+**********************************************************************/
+void get_user_input(char* message, uint8_t min, uint8_t max, uint8_t* member)
+{
+    uint8_t temp;
+
+    do
+    {
+        term.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
+        term.scanf("%d", &temp);
+        *member = temp;
+       
+        if((*(member)< min) || (*(member) > max))
+        {
+            term.printf("\nERROR-RTI");
+        }
     }
-}
-    
\ No newline at end of file
+    while((*(member) < min) || (*(member) > max));
+}
\ No newline at end of file