SEDO subject project

Dependencies:   ds3231 mbed-rtos mbed DHT

Committer:
ValenSalLop
Date:
Wed Apr 26 17:17:42 2017 +0000
Revision:
4:9f3200e6941f
Parent:
3:158f844200a9
Child:
5:19ccff89f555
RTC code refactored;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ValenSalLop 0:de99871168ac 1 #include "mbed.h"
ValenSalLop 0:de99871168ac 2 #include "rtos.h"
ValenSalLop 0:de99871168ac 3 #include "ds3231.h"
ValenSalLop 0:de99871168ac 4
ValenSalLop 0:de99871168ac 5 #define ESC 0x1B
ValenSalLop 4:9f3200e6941f 6
ValenSalLop 3:158f844200a9 7 #define I2C_SDA D14
ValenSalLop 3:158f844200a9 8 #define I2C_SCL D15
ValenSalLop 4:9f3200e6941f 9 #define DHT_PIN D2
ValenSalLop 4:9f3200e6941f 10 #define LCD_PIN1 D8
ValenSalLop 4:9f3200e6941f 11 #define LCD_PIN2 D13
ValenSalLop 4:9f3200e6941f 12 #define LCD_PIN3 D9
ValenSalLop 4:9f3200e6941f 13 #define LCD_PIN4 D4
ValenSalLop 4:9f3200e6941f 14 #define LCD_PIN5 D5
ValenSalLop 4:9f3200e6941f 15 #define LCD_PIN6 D6
ValenSalLop 4:9f3200e6941f 16 #define LCD_PIN7 D7
ValenSalLop 4:9f3200e6941f 17 #define M_DIR_PIN D12
ValenSalLop 4:9f3200e6941f 18 #define M_SPE_PIN D11
ValenSalLop 0:de99871168ac 19
ValenSalLop 0:de99871168ac 20 void get_user_input(char* message, uint8_t min, uint8_t max, uint32_t* member);
ValenSalLop 0:de99871168ac 21 void get_user_input(char* message, uint8_t min, uint8_t max, bool* member);
ValenSalLop 4:9f3200e6941f 22 void setupRTC(Ds3231 rtc, time_t* epoch_time, ds3231_cntl_stat_t rtc_control_status, ds3231_time_t rtc_time, ds3231_calendar_t rtc_calendar);
ValenSalLop 0:de99871168ac 23
ValenSalLop 0:de99871168ac 24 int main(void)
ValenSalLop 0:de99871168ac 25 {
ValenSalLop 0:de99871168ac 26 //rtc object
ValenSalLop 0:de99871168ac 27 Ds3231 rtc(D14, D15);
ValenSalLop 0:de99871168ac 28
ValenSalLop 0:de99871168ac 29 time_t epoch_time;
Nikasha 1:678088dfd174 30 time_t prueba;
ValenSalLop 0:de99871168ac 31 //DS3231 rtc variables
ValenSalLop 0:de99871168ac 32
ValenSalLop 0:de99871168ac 33 //default, use bit masks in ds3231.h for desired operation
ValenSalLop 0:de99871168ac 34 ds3231_cntl_stat_t rtc_control_status = {0,0};
ValenSalLop 0:de99871168ac 35 ds3231_time_t rtc_time;
ValenSalLop 0:de99871168ac 36 ds3231_calendar_t rtc_calendar;
ValenSalLop 0:de99871168ac 37
ValenSalLop 4:9f3200e6941f 38 setupRTC(rtc, &epoch_time, rtc_control_status, rtc_time, rtc_calendar);
ValenSalLop 4:9f3200e6941f 39
ValenSalLop 4:9f3200e6941f 40 char buffer[32];
ValenSalLop 4:9f3200e6941f 41 for(;;)
ValenSalLop 4:9f3200e6941f 42 {
ValenSalLop 4:9f3200e6941f 43 printf("%c[2J", ESC); //clear screen
ValenSalLop 4:9f3200e6941f 44 printf("%c[H", ESC); //move cursor to Home
ValenSalLop 4:9f3200e6941f 45
ValenSalLop 4:9f3200e6941f 46 //new epoch time fx
ValenSalLop 4:9f3200e6941f 47 epoch_time = rtc.get_epoch();
ValenSalLop 4:9f3200e6941f 48
ValenSalLop 4:9f3200e6941f 49 printf("\nTime as seconds since January 1, 1970 = %d\n", epoch_time);
ValenSalLop 4:9f3200e6941f 50
ValenSalLop 4:9f3200e6941f 51 printf("\nTime as a basic string = %s", ctime(&epoch_time));
ValenSalLop 4:9f3200e6941f 52
ValenSalLop 4:9f3200e6941f 53 strftime(buffer, 32, "%I:%M %p\n", localtime(&epoch_time));
ValenSalLop 4:9f3200e6941f 54 printf("\nTime as a custom formatted string = %s", buffer);
ValenSalLop 4:9f3200e6941f 55
ValenSalLop 4:9f3200e6941f 56 wait(1.0);
ValenSalLop 4:9f3200e6941f 57 }//loop
ValenSalLop 4:9f3200e6941f 58 }
ValenSalLop 4:9f3200e6941f 59
ValenSalLop 4:9f3200e6941f 60
ValenSalLop 4:9f3200e6941f 61 void setupRTC(Ds3231 rtc, time_t* epoch_time, ds3231_cntl_stat_t rtc_control_status, ds3231_time_t rtc_time, ds3231_calendar_t rtc_calendar){
ValenSalLop 4:9f3200e6941f 62
ValenSalLop 0:de99871168ac 63 rtc.set_cntl_stat_reg(rtc_control_status);
ValenSalLop 0:de99871168ac 64
ValenSalLop 0:de99871168ac 65 //get day from user
ValenSalLop 0:de99871168ac 66 get_user_input("\nPlease enter day of week, 1 for Sunday (1-7): ", 1,
ValenSalLop 0:de99871168ac 67 7, &rtc_calendar.day);
ValenSalLop 0:de99871168ac 68
ValenSalLop 0:de99871168ac 69 //get day of month from user
ValenSalLop 0:de99871168ac 70 get_user_input("\nPlease enter day of month (1-31): ", 1, 31,
ValenSalLop 0:de99871168ac 71 &rtc_calendar.date);
ValenSalLop 0:de99871168ac 72
ValenSalLop 0:de99871168ac 73 //get month from user
ValenSalLop 0:de99871168ac 74 get_user_input("\nPlease enter the month, 1 for January (1-12): ", 1,
ValenSalLop 0:de99871168ac 75 12, &rtc_calendar.month);
ValenSalLop 0:de99871168ac 76
ValenSalLop 0:de99871168ac 77 //get year from user
ValenSalLop 0:de99871168ac 78 get_user_input("\nPlease enter the year (0-99): ",0, 99,
ValenSalLop 0:de99871168ac 79 &rtc_calendar.year);
ValenSalLop 0:de99871168ac 80
ValenSalLop 0:de99871168ac 81 //Get time mode
ValenSalLop 0:de99871168ac 82 get_user_input("\nWhat time mode? 1 for 12hr 0 for 24hr: ", 0, 1,
ValenSalLop 0:de99871168ac 83 &rtc_time.mode);
ValenSalLop 0:de99871168ac 84
ValenSalLop 0:de99871168ac 85 if(rtc_time.mode)
ValenSalLop 0:de99871168ac 86 {
ValenSalLop 0:de99871168ac 87 //Get AM/PM status
ValenSalLop 0:de99871168ac 88 get_user_input("\nIs it AM or PM? 0 for AM 1 for PM: ", 0, 1,
ValenSalLop 0:de99871168ac 89 &rtc_time.am_pm);
ValenSalLop 0:de99871168ac 90 //Get hour from user
ValenSalLop 0:de99871168ac 91 get_user_input("\nPlease enter the hour (1-12): ", 1, 12,
ValenSalLop 0:de99871168ac 92 &rtc_time.hours);
ValenSalLop 0:de99871168ac 93 }
ValenSalLop 0:de99871168ac 94 else
ValenSalLop 0:de99871168ac 95 {
ValenSalLop 0:de99871168ac 96 //Get hour from user
ValenSalLop 0:de99871168ac 97 get_user_input("\nPlease enter the hour (0-23): ", 0, 23,
ValenSalLop 0:de99871168ac 98 &rtc_time.hours);
ValenSalLop 0:de99871168ac 99 }
ValenSalLop 0:de99871168ac 100
ValenSalLop 0:de99871168ac 101 //Get minutes from user
ValenSalLop 0:de99871168ac 102 get_user_input("\nPlease enter the minute (0-59): ", 0, 59,
ValenSalLop 0:de99871168ac 103 &rtc_time.minutes);
ValenSalLop 0:de99871168ac 104
ValenSalLop 0:de99871168ac 105
ValenSalLop 0:de99871168ac 106 //Get seconds from user
ValenSalLop 0:de99871168ac 107 get_user_input("\nPlease enter the second (0-59): ", 0, 59,
ValenSalLop 0:de99871168ac 108 &rtc_time.seconds);
ValenSalLop 0:de99871168ac 109
ValenSalLop 0:de99871168ac 110
ValenSalLop 0:de99871168ac 111
ValenSalLop 0:de99871168ac 112 //Set the time, uses inverted logic for return value
ValenSalLop 0:de99871168ac 113 if(rtc.set_time(rtc_time))
ValenSalLop 0:de99871168ac 114 {
ValenSalLop 0:de99871168ac 115 printf("\nrtc.set_time failed!!\n");
ValenSalLop 0:de99871168ac 116 exit(0);
ValenSalLop 0:de99871168ac 117 }
ValenSalLop 0:de99871168ac 118
ValenSalLop 0:de99871168ac 119 //Set the calendar, uses inverted logic for return value
ValenSalLop 0:de99871168ac 120 if(rtc.set_calendar(rtc_calendar))
ValenSalLop 0:de99871168ac 121 {
ValenSalLop 0:de99871168ac 122 printf("\nrtc.set_calendar failed!!\n");
ValenSalLop 0:de99871168ac 123 exit(0);
ValenSalLop 0:de99871168ac 124 }
ValenSalLop 0:de99871168ac 125
ValenSalLop 0:de99871168ac 126
ValenSalLop 0:de99871168ac 127 }
ValenSalLop 0:de99871168ac 128
ValenSalLop 0:de99871168ac 129 /**********************************************************************
ValenSalLop 0:de99871168ac 130 * Function: get_user_input()
ValenSalLop 0:de99871168ac 131 * Parameters: message - user prompt
ValenSalLop 0:de99871168ac 132 * min - minimum value of input
ValenSalLop 0:de99871168ac 133 * max - maximum value of input
ValenSalLop 0:de99871168ac 134 * member - pointer to struct member
ValenSalLop 0:de99871168ac 135 * Returns: none
ValenSalLop 0:de99871168ac 136 *
ValenSalLop 0:de99871168ac 137 * Description: get time/date input from user
ValenSalLop 0:de99871168ac 138 *
ValenSalLop 0:de99871168ac 139 **********************************************************************/
ValenSalLop 0:de99871168ac 140 void get_user_input(char* message, uint8_t min, uint8_t max, uint32_t* member)
ValenSalLop 0:de99871168ac 141 {
ValenSalLop 0:de99871168ac 142 uint32_t temp;
ValenSalLop 0:de99871168ac 143
ValenSalLop 0:de99871168ac 144 do
ValenSalLop 0:de99871168ac 145 {
ValenSalLop 0:de99871168ac 146 printf("\n%s", message);
ValenSalLop 0:de99871168ac 147
ValenSalLop 0:de99871168ac 148 //for some reason mbed doesn't like a pointer to a member in scanf
ValenSalLop 0:de99871168ac 149 //term.scanf("%d", member); works with gcc on RPi
ValenSalLop 0:de99871168ac 150 scanf("%d", &temp);
ValenSalLop 0:de99871168ac 151
ValenSalLop 0:de99871168ac 152 *member = temp;
ValenSalLop 0:de99871168ac 153
ValenSalLop 0:de99871168ac 154 if((*(member)< min) || (*(member) > max))
ValenSalLop 0:de99871168ac 155 {
ValenSalLop 0:de99871168ac 156 printf("\nERROR-RTI");
ValenSalLop 0:de99871168ac 157 }
ValenSalLop 0:de99871168ac 158 }
ValenSalLop 0:de99871168ac 159 while((*(member) < min) || (*(member) > max));
ValenSalLop 0:de99871168ac 160 }
ValenSalLop 0:de99871168ac 161
ValenSalLop 0:de99871168ac 162
ValenSalLop 0:de99871168ac 163 void get_user_input(char* message, uint8_t min, uint8_t max, bool* member)
ValenSalLop 0:de99871168ac 164 {
ValenSalLop 0:de99871168ac 165 uint32_t temp;
ValenSalLop 0:de99871168ac 166
ValenSalLop 0:de99871168ac 167 do
ValenSalLop 0:de99871168ac 168 {
ValenSalLop 0:de99871168ac 169 printf("\n%s", message);
ValenSalLop 0:de99871168ac 170
ValenSalLop 0:de99871168ac 171 //for some reason mbed doesn't like a pointer to a member in scanf
ValenSalLop 0:de99871168ac 172 //term.scanf("%d", member); works with gcc on RPi
ValenSalLop 0:de99871168ac 173 scanf("%d", &temp);
ValenSalLop 0:de99871168ac 174
ValenSalLop 0:de99871168ac 175 *member = temp;
ValenSalLop 0:de99871168ac 176
ValenSalLop 0:de99871168ac 177 if((*(member)< min) || (*(member) > max))
ValenSalLop 0:de99871168ac 178 {
ValenSalLop 0:de99871168ac 179 printf("\nERROR-RTI");
ValenSalLop 0:de99871168ac 180 }
ValenSalLop 0:de99871168ac 181 }
ValenSalLop 0:de99871168ac 182 while((*(member) < min) || (*(member) > max));
ValenSalLop 0:de99871168ac 183 }
ValenSalLop 0:de99871168ac 184
ValenSalLop 0:de99871168ac 185