SEDO subject project

Dependencies:   ds3231 mbed-rtos mbed DHT

Committer:
ValenSalLop
Date:
Wed Apr 26 18:24:48 2017 +0000
Revision:
6:dff022cf4d99
Parent:
5:19ccff89f555
Parent:
2:1d79c4e47430
Child:
7:8065e844e99a
Conflict resolved;

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