/*! * \file * main.c * \brief * Main application file * * Author: Christos Choutouridis AEM: 8997 * email : */ #include #include "thermostat.h" #include "console.h" /* * Zero initialized globals */ app_data_t app_data; state_en state; // Value initialized globals settings_t _Init_settings(settings); /* * helper api */ float_t temp_get_current (void) { return (app_data.cur) ? app_data.T[app_data.cur-1] : app_data.T[MEASUREMENTS-1]; } void control (void) { static time_t sample =0; time_t now = time(0); // get time // Proximity if (proximity(&prox) < settings.Pset) app_data.flag_proximity = 1; else if (proximity(&prox) < settings.Pset + settings.Physt) ; else app_data.flag_proximity = 0; // Temperature calculation if (now - sample >= MEAS_INTERVAL) { sample = now; app_data.T[app_data.cur] = temp_read(); if (++app_data.cur >= MEASUREMENTS) { app_data.cur =0; float_t f =0; for (int i=0 ; i= UI_AVERAGE_TIME) state = ST_COUNT; break; case ST_USER: sprintf(line1, "\fTav=%4.1f T=%4.1f", app_data.Tav, temp_get_current()); sprintf(line2, "\n%s: %s ", (settings.mode == HEATING) ? "Heating" : "Cooling", (app_data.flag_output) ? "On " : "Off" ); // escapes if (!app_data.flag_proximity) state = ST_COUNT; break; } lcd_puts(line1); lcd_puts(line2); } void outputs (void) { static uint8_t pr_output =0; if (app_data.flag_init) return; led_green(app_data.flag_output && settings.mode == COOLING); led_red (app_data.flag_output && settings.mode == HEATING); if (app_data.flag_output != pr_output) { relay(app_data.flag_output); pr_output = app_data.flag_output; } } int main(void) { hal_hw_init (); lcd_init (); proximity_init(&prox); temp_init (TEMP_11_BIT); lcd_enable(1); app_data.flag_init = 1; while (1) { control (); display (); outputs(); console (); HAL_Delay(10); } }