SEDO subject project

Dependencies:   ds3231 mbed-rtos mbed DHT

Committer:
ValenSalLop
Date:
Wed Apr 26 18:19:39 2017 +0000
Revision:
5:19ccff89f555
Parent:
4:9f3200e6941f
Child:
6:dff022cf4d99
Communication sensor & actuators

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