SEDO subject project

Dependencies:   ds3231 mbed-rtos mbed DHT

Committer:
ValenSalLop
Date:
Mon May 15 18:30:20 2017 +0000
Revision:
12:1d544cdab2cf
Parent:
9:5e9c4277151d
final;

Who changed what in which revision?

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