Ejemplo RTC DS3231

Dependencies:   mbed ds3231

Committer:
giovanicardona
Date:
Mon Jan 27 03:36:50 2020 +0000
Revision:
7:e049867a7716
Parent:
6:2641d53a460a
Ejemplo RTC DS3231

Who changed what in which revision?

UserRevisionLine numberNew contents of line
j3 0:6be499dd402a 1 #include "ds3231.h"
j3 0:6be499dd402a 2
giovanicardona 7:e049867a7716 3 //--------------------------Puertos---------------------------------//
giovanicardona 7:e049867a7716 4 Ds3231 rtc(PTE0, PTE1); //rtc object Ds3231::Ds3231(PinName sda, PinName scl) : I2C(sda, scl)
j3 1:7db4a1cc7abb 5
giovanicardona 7:e049867a7716 6 //----------------------Funciones--------------------------------//
j3 2:76cd47a603b5 7 void get_user_input(char* message, uint8_t min, uint8_t max, uint32_t* member);
j3 2:76cd47a603b5 8 void get_user_input(char* message, uint8_t min, uint8_t max, bool* member);
giovanicardona 7:e049867a7716 9 void set_RTC(void);
j3 0:6be499dd402a 10
j3 0:6be499dd402a 11 int main(void)
j3 0:6be499dd402a 12 {
giovanicardona 7:e049867a7716 13 //DS3231 rtc variables - default, use bit masks in ds3231.h for desired operation
j3 6:2641d53a460a 14 ds3231_cntl_stat_t rtc_control_status = {0,0};
j3 1:7db4a1cc7abb 15 rtc.set_cntl_stat_reg(rtc_control_status);
j3 1:7db4a1cc7abb 16
giovanicardona 7:e049867a7716 17 //******************************//
giovanicardona 7:e049867a7716 18 ds3231_time_t time;
giovanicardona 7:e049867a7716 19 ds3231_calendar_t calendar;
giovanicardona 7:e049867a7716 20
giovanicardona 7:e049867a7716 21 set_RTC(); //Configuración del RTC
j3 1:7db4a1cc7abb 22
giovanicardona 7:e049867a7716 23 while(1)
j3 2:76cd47a603b5 24 {
giovanicardona 7:e049867a7716 25 rtc.get_time(&time);
giovanicardona 7:e049867a7716 26 printf("Time %02d:%02d:%02d - RTC\n", time.hours, time.minutes, time.seconds);
j3 2:76cd47a603b5 27
giovanicardona 7:e049867a7716 28 rtc.get_calendar(&calendar);
giovanicardona 7:e049867a7716 29 printf("Calendar %02d/%02d/%02d\n",calendar.date, calendar.month, calendar.year);
giovanicardona 7:e049867a7716 30 printf("\n");
j3 2:76cd47a603b5 31
j3 2:76cd47a603b5 32 wait(1.0);
j3 2:76cd47a603b5 33 }//loop
j3 1:7db4a1cc7abb 34 }
j3 1:7db4a1cc7abb 35
j3 1:7db4a1cc7abb 36
j3 1:7db4a1cc7abb 37 /**********************************************************************
j3 1:7db4a1cc7abb 38 * Function: get_user_input()
j3 1:7db4a1cc7abb 39 * Parameters: message - user prompt
j3 1:7db4a1cc7abb 40 * min - minimum value of input
j3 1:7db4a1cc7abb 41 * max - maximum value of input
j3 1:7db4a1cc7abb 42 * member - pointer to struct member
j3 1:7db4a1cc7abb 43 * Returns: none
j3 1:7db4a1cc7abb 44 *
j3 1:7db4a1cc7abb 45 * Description: get time/date input from user
j3 1:7db4a1cc7abb 46 *
j3 1:7db4a1cc7abb 47 **********************************************************************/
j3 2:76cd47a603b5 48 void get_user_input(char* message, uint8_t min, uint8_t max, uint32_t* member)
j3 1:7db4a1cc7abb 49 {
j3 2:76cd47a603b5 50 uint32_t temp;
j3 1:7db4a1cc7abb 51
j3 1:7db4a1cc7abb 52 do
j3 0:6be499dd402a 53 {
j3 2:76cd47a603b5 54 printf("\n%s", message);
j3 2:76cd47a603b5 55
j3 2:76cd47a603b5 56 //for some reason mbed doesn't like a pointer to a member in scanf
j3 2:76cd47a603b5 57 //term.scanf("%d", member); works with gcc on RPi
j3 2:76cd47a603b5 58 scanf("%d", &temp);
j3 2:76cd47a603b5 59
j3 2:76cd47a603b5 60 *member = temp;
j3 1:7db4a1cc7abb 61
j3 1:7db4a1cc7abb 62 if((*(member)< min) || (*(member) > max))
j3 1:7db4a1cc7abb 63 {
j3 2:76cd47a603b5 64 printf("\nERROR-RTI");
j3 1:7db4a1cc7abb 65 }
j3 0:6be499dd402a 66 }
j3 1:7db4a1cc7abb 67 while((*(member) < min) || (*(member) > max));
j3 2:76cd47a603b5 68 }
j3 1:7db4a1cc7abb 69
j3 2:76cd47a603b5 70
j3 2:76cd47a603b5 71 void get_user_input(char* message, uint8_t min, uint8_t max, bool* member)
j3 2:76cd47a603b5 72 {
j3 5:ab9d82256e26 73 uint32_t temp;
j3 2:76cd47a603b5 74
j3 2:76cd47a603b5 75 do
j3 2:76cd47a603b5 76 {
j3 2:76cd47a603b5 77 printf("\n%s", message);
j3 2:76cd47a603b5 78
j3 2:76cd47a603b5 79 //for some reason mbed doesn't like a pointer to a member in scanf
j3 2:76cd47a603b5 80 //term.scanf("%d", member); works with gcc on RPi
j3 2:76cd47a603b5 81 scanf("%d", &temp);
j3 2:76cd47a603b5 82
j3 2:76cd47a603b5 83 *member = temp;
j3 2:76cd47a603b5 84
j3 2:76cd47a603b5 85 if((*(member)< min) || (*(member) > max))
j3 2:76cd47a603b5 86 {
j3 2:76cd47a603b5 87 printf("\nERROR-RTI");
j3 2:76cd47a603b5 88 }
j3 2:76cd47a603b5 89 }
j3 2:76cd47a603b5 90 while((*(member) < min) || (*(member) > max));
j3 0:6be499dd402a 91 }
j3 1:7db4a1cc7abb 92
giovanicardona 7:e049867a7716 93 /**********************************************************************/
giovanicardona 7:e049867a7716 94 void set_RTC(void){
giovanicardona 7:e049867a7716 95
giovanicardona 7:e049867a7716 96 //Cambio de la configuración del RTC DS3231
giovanicardona 7:e049867a7716 97 ds3231_time_t rtc_time;
giovanicardona 7:e049867a7716 98 ds3231_calendar_t rtc_calendar;
giovanicardona 7:e049867a7716 99
giovanicardona 7:e049867a7716 100 //get day from user
giovanicardona 7:e049867a7716 101 get_user_input("\nPlease enter day of week, 1 for Sunday (1-7): ", 1,
giovanicardona 7:e049867a7716 102 7, &rtc_calendar.day);
giovanicardona 7:e049867a7716 103
giovanicardona 7:e049867a7716 104 //get day of month from user
giovanicardona 7:e049867a7716 105 get_user_input("\nPlease enter day of month (1-31): ", 1, 31,
giovanicardona 7:e049867a7716 106 &rtc_calendar.date);
giovanicardona 7:e049867a7716 107
giovanicardona 7:e049867a7716 108 //get month from user
giovanicardona 7:e049867a7716 109 get_user_input("\nPlease enter the month, 1 for January (1-12): ", 1,
giovanicardona 7:e049867a7716 110 12, &rtc_calendar.month);
giovanicardona 7:e049867a7716 111
giovanicardona 7:e049867a7716 112 //get year from user
giovanicardona 7:e049867a7716 113 get_user_input("\nPlease enter the year (0-99): ",0, 99,
giovanicardona 7:e049867a7716 114 &rtc_calendar.year);
giovanicardona 7:e049867a7716 115
giovanicardona 7:e049867a7716 116 //Get time mode
giovanicardona 7:e049867a7716 117 get_user_input("\nWhat time mode? 1 for 12hr 0 for 24hr: ", 0, 1,
giovanicardona 7:e049867a7716 118 &rtc_time.mode);
giovanicardona 7:e049867a7716 119
giovanicardona 7:e049867a7716 120 if(rtc_time.mode)
giovanicardona 7:e049867a7716 121 {
giovanicardona 7:e049867a7716 122 //Get AM/PM status
giovanicardona 7:e049867a7716 123 get_user_input("\nIs it AM or PM? 0 for AM 1 for PM: ", 0, 1,
giovanicardona 7:e049867a7716 124 &rtc_time.am_pm);
giovanicardona 7:e049867a7716 125 //Get hour from user
giovanicardona 7:e049867a7716 126 get_user_input("\nPlease enter the hour (1-12): ", 1, 12,
giovanicardona 7:e049867a7716 127 &rtc_time.hours);
giovanicardona 7:e049867a7716 128 }
giovanicardona 7:e049867a7716 129 else
giovanicardona 7:e049867a7716 130 {
giovanicardona 7:e049867a7716 131 //Get hour from user
giovanicardona 7:e049867a7716 132 get_user_input("\nPlease enter the hour (0-23): ", 0, 23,
giovanicardona 7:e049867a7716 133 &rtc_time.hours);
giovanicardona 7:e049867a7716 134 }
giovanicardona 7:e049867a7716 135
giovanicardona 7:e049867a7716 136 //Get minutes from user
giovanicardona 7:e049867a7716 137 get_user_input("\nPlease enter the minute (0-59): ", 0, 59,
giovanicardona 7:e049867a7716 138 &rtc_time.minutes);
giovanicardona 7:e049867a7716 139
giovanicardona 7:e049867a7716 140
giovanicardona 7:e049867a7716 141 //Get seconds from user
giovanicardona 7:e049867a7716 142 get_user_input("\nPlease enter the second (0-59): ", 0, 59,
giovanicardona 7:e049867a7716 143 &rtc_time.seconds);
giovanicardona 7:e049867a7716 144
giovanicardona 7:e049867a7716 145
giovanicardona 7:e049867a7716 146
giovanicardona 7:e049867a7716 147 //Set the time, uses inverted logic for return value
giovanicardona 7:e049867a7716 148 if(rtc.set_time(rtc_time))
giovanicardona 7:e049867a7716 149 {
giovanicardona 7:e049867a7716 150 printf("\nrtc.set_time failed!!\n");
giovanicardona 7:e049867a7716 151 exit(0);
giovanicardona 7:e049867a7716 152 }
giovanicardona 7:e049867a7716 153
giovanicardona 7:e049867a7716 154 //Set the calendar, uses inverted logic for return value
giovanicardona 7:e049867a7716 155 if(rtc.set_calendar(rtc_calendar))
giovanicardona 7:e049867a7716 156 {
giovanicardona 7:e049867a7716 157 printf("\nrtc.set_calendar failed!!\n");
giovanicardona 7:e049867a7716 158 exit(0);
giovanicardona 7:e049867a7716 159 }
giovanicardona 7:e049867a7716 160
giovanicardona 7:e049867a7716 161 }
giovanicardona 7:e049867a7716 162
giovanicardona 7:e049867a7716 163
j3 0:6be499dd402a 164