SEDO subject project
Dependencies: ds3231 mbed-rtos mbed DHT
Diff: main.cpp
- Revision:
- 5:19ccff89f555
- Parent:
- 4:9f3200e6941f
- Child:
- 6:dff022cf4d99
diff -r 9f3200e6941f -r 19ccff89f555 main.cpp --- a/main.cpp Wed Apr 26 17:17:42 2017 +0000 +++ b/main.cpp Wed Apr 26 18:19:39 2017 +0000 @@ -1,6 +1,7 @@ #include "mbed.h" #include "rtos.h" #include "ds3231.h" +#include "DHT.h" #define ESC 0x1B @@ -14,124 +15,150 @@ #define LCD_PIN5 D5 #define LCD_PIN6 D6 #define LCD_PIN7 D7 -#define M_DIR_PIN D12 -#define M_SPE_PIN D11 +#define M_DIR_PIN D4 +#define M_SPE_PIN D5 void get_user_input(char* message, uint8_t min, uint8_t max, uint32_t* member); void get_user_input(char* message, uint8_t min, uint8_t max, bool* member); 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); + +Ds3231 rtc(D14, D15); + +PwmOut m_speed(M_SPE_PIN); +DigitalOut m_direction(M_DIR_PIN); + + +DHT sensor(D2, DHT22); + int main(void) { - //rtc object - Ds3231 rtc(D14, D15); - + //rtc variables time_t epoch_time; time_t prueba; - //DS3231 rtc variables - //default, use bit masks in ds3231.h for desired operation - ds3231_cntl_stat_t rtc_control_status = {0,0}; + ds3231_cntl_stat_t rtc_control_status = {0,0}; ds3231_time_t rtc_time; ds3231_calendar_t rtc_calendar; - - setupRTC(rtc, &epoch_time, rtc_control_status, rtc_time, rtc_calendar); - + + //setupRTC(rtc, &epoch_time, rtc_control_status, rtc_time, rtc_calendar); + char buffer[32]; - for(;;) - { + for(;;) { printf("%c[2J", ESC); //clear screen printf("%c[H", ESC); //move cursor to Home - + //new epoch time fx epoch_time = rtc.get_epoch(); - + printf("\nTime as seconds since January 1, 1970 = %d\n", epoch_time); - + printf("\nTime as a basic string = %s", ctime(&epoch_time)); - + strftime(buffer, 32, "%I:%M %p\n", localtime(&epoch_time)); printf("\nTime as a custom formatted string = %s", buffer); - - wait(1.0); - }//loop + + while(m_speed < 1.0) { + m_speed = m_speed + 0.01; + wait(0.1); + if(m_speed >= 1.0) { + } + } + m_speed = 0; + m_direction = !m_direction; + + + int error = 0; + float h = 0.0f, c = 0.0f, f = 0.0f, k = 0.0f, dp = 0.0f, dpf = 0.0f; + + error = sensor.readData(); + if (0 == error) { + c = sensor.ReadTemperature(CELCIUS); + f = sensor.ReadTemperature(FARENHEIT); + k = sensor.ReadTemperature(KELVIN); + h = sensor.ReadHumidity(); + dp = sensor.CalcdewPoint(c, h); + dpf = sensor.CalcdewPointFast(c, h); + printf("Temperature in Kelvin: %4.2f, Celcius: %4.2f, Farenheit %4.2f\n", k, c, f); + printf("Humidity is %4.2f, Dewpoint: %4.2f, Dewpoint fast: %4.2f\n", h, dp, dpf); + } else { + printf("Error: %d\n", error); + } + wait(5.0); + }//loop } -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){ - +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) +{ + rtc.set_cntl_stat_reg(rtc_control_status); - + //get day from user get_user_input("\nPlease enter day of week, 1 for Sunday (1-7): ", 1, - 7, &rtc_calendar.day); + 7, &rtc_calendar.day); //get day of month from user - get_user_input("\nPlease enter day of month (1-31): ", 1, 31, - &rtc_calendar.date); + get_user_input("\nPlease enter day of month (1-31): ", 1, 31, + &rtc_calendar.date); //get month from user - get_user_input("\nPlease enter the month, 1 for January (1-12): ", 1, - 12, &rtc_calendar.month); + get_user_input("\nPlease enter the month, 1 for January (1-12): ", 1, + 12, &rtc_calendar.month); //get year from user - get_user_input("\nPlease enter the year (0-99): ",0, 99, - &rtc_calendar.year); - + get_user_input("\nPlease enter the year (0-99): ",0, 99, + &rtc_calendar.year); + //Get time mode - get_user_input("\nWhat time mode? 1 for 12hr 0 for 24hr: ", 0, 1, - &rtc_time.mode); - - if(rtc_time.mode) - { + get_user_input("\nWhat time mode? 1 for 12hr 0 for 24hr: ", 0, 1, + &rtc_time.mode); + + if(rtc_time.mode) { //Get AM/PM status - get_user_input("\nIs it AM or PM? 0 for AM 1 for PM: ", 0, 1, - &rtc_time.am_pm); + get_user_input("\nIs it AM or PM? 0 for AM 1 for PM: ", 0, 1, + &rtc_time.am_pm); //Get hour from user - get_user_input("\nPlease enter the hour (1-12): ", 1, 12, + get_user_input("\nPlease enter the hour (1-12): ", 1, 12, + &rtc_time.hours); + } else { + //Get hour from user + get_user_input("\nPlease enter the hour (0-23): ", 0, 23, &rtc_time.hours); } - else - { - //Get hour from user - get_user_input("\nPlease enter the hour (0-23): ", 0, 23, - &rtc_time.hours); - } - + //Get minutes from user - get_user_input("\nPlease enter the minute (0-59): ", 0, 59, + get_user_input("\nPlease enter the minute (0-59): ", 0, 59, &rtc_time.minutes); - - + + //Get seconds from user - get_user_input("\nPlease enter the second (0-59): ", 0, 59, + get_user_input("\nPlease enter the second (0-59): ", 0, 59, &rtc_time.seconds); - - - + + + //Set the time, uses inverted logic for return value - if(rtc.set_time(rtc_time)) - { + if(rtc.set_time(rtc_time)) { printf("\nrtc.set_time failed!!\n"); exit(0); } - + //Set the calendar, uses inverted logic for return value - if(rtc.set_calendar(rtc_calendar)) - { + if(rtc.set_calendar(rtc_calendar)) { printf("\nrtc.set_calendar failed!!\n"); exit(0); } - - + + } /********************************************************************** -* Function: get_user_input() +* Function: get_user_input() * Parameters: message - user prompt * min - minimum value of input * max - maximum value of input -* member - pointer to struct member +* member - pointer to struct member * Returns: none * * Description: get time/date input from user @@ -141,22 +168,19 @@ { uint32_t temp; - do - { + do { printf("\n%s", message); - + //for some reason mbed doesn't like a pointer to a member in scanf //term.scanf("%d", member); works with gcc on RPi scanf("%d", &temp); - + *member = temp; - - if((*(member)< min) || (*(member) > max)) - { + + if((*(member)< min) || (*(member) > max)) { printf("\nERROR-RTI"); } - } - while((*(member) < min) || (*(member) > max)); + } while((*(member) < min) || (*(member) > max)); } @@ -164,22 +188,19 @@ { uint32_t temp; - do - { + do { printf("\n%s", message); - + //for some reason mbed doesn't like a pointer to a member in scanf //term.scanf("%d", member); works with gcc on RPi scanf("%d", &temp); - + *member = temp; - - if((*(member)< min) || (*(member) > max)) - { + + if((*(member)< min) || (*(member) > max)) { printf("\nERROR-RTI"); } - } - while((*(member) < min) || (*(member) > max)); + } while((*(member) < min) || (*(member) > max)); } - +