Meteo Station
Dependencies: ds3231 mbed-rtos mbed
Fork of meteo_station by
Diff: main.cpp
- Revision:
- 0:de99871168ac
- Child:
- 1:678088dfd174
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Apr 26 16:03:56 2017 +0000 @@ -0,0 +1,165 @@ +#include "mbed.h" +#include "rtos.h" +#include "ds3231.h" + +#define ESC 0x1B + +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); + +int main(void) +{ + //rtc object + Ds3231 rtc(D14, D15); + + time_t epoch_time; + + //DS3231 rtc variables + + //default, use bit masks in ds3231.h for desired operation + ds3231_cntl_stat_t rtc_control_status = {0,0}; + 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); + + //get day of month from user + 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 year from user + 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 AM/PM status + 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, + &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, + &rtc_time.minutes); + + + //Get seconds from user + 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)) + { + printf("\nrtc.set_time failed!!\n"); + exit(0); + } + + //Set the calendar, uses inverted logic for return value + if(rtc.set_calendar(rtc_calendar)) + { + printf("\nrtc.set_calendar failed!!\n"); + exit(0); + } + + char buffer[32]; + + 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 +} + + +/********************************************************************** +* Function: get_user_input() +* Parameters: message - user prompt +* min - minimum value of input +* max - maximum value of input +* member - pointer to struct member +* Returns: none +* +* Description: get time/date input from user +* +**********************************************************************/ +void get_user_input(char* message, uint8_t min, uint8_t max, uint32_t* member) +{ + uint32_t temp; + + 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)) + { + printf("\nERROR-RTI"); + } + } + while((*(member) < min) || (*(member) > max)); +} + + +void get_user_input(char* message, uint8_t min, uint8_t max, bool* member) +{ + uint32_t temp; + + 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)) + { + printf("\nERROR-RTI"); + } + } + while((*(member) < min) || (*(member) > max)); +} + +