/** @brief Low Battery alarm to be called for example with 1 Hz */ void beep_on_low_voltage(void) { if (global_data.battery_voltage < BATTERY_LOW_VOLTAGE_ALARM) { buzzer_toggle(); } else { buzzer_off(); } }
/** Główna funkcja programu */ int main(void) { FuncPtr FPtr; ioinit(); hd44780_clear(); hd44780_bl_on(); hd44780_cursor_off(); load_basic_settings(EEPROM_BASIC_SETTINGS_BEGIN); load_temp_sensors_settings(EEPROM_TEMP_SETTINGS_BEGIN); load_outputs_settings(EEPROM_OUTS_SETTING_BEGIN); load_timers_settings(EEPROM_TIMERS_SETTING_BEGIN); load_timersv_settings(EEPROM_TIMERSV_SETTING_BEGIN); load_topoff_settings(EEPROM_TOPOFF_SETTINGS_BEGIN); hd44780_printOnLcdDelay(PSTR(PROGRAM_FULL_NAME)); hd44780_clear(); sei(); rtc_get_time(); rtc_get_date(); gui_client_present(); log_write_record(LOG_EVENT_START,0,0,0); for (;;) { wdt_reset(); qbuttons_process(); ui_key_pressed(); if (key_pressed && alarms_notification_enabled() && alarms_is_active() ){ alarms_block_notification(); menu_set(1,1,0,0); key_pressed = NONE; } //########################### akcje wykonywane kiedy minie sekunda if (SF(FLAG_SECOND_PAST)) { SSF(FLAG_FORCE_LCD_REFRESH); temp_counter++; top_off_check_time(); top_off_process(); CSF(FLAG_SECOND_PAST); } //########################### akcje wykonywane kiedy minie pół sekundy if (SF(FLAG_HALF_SECOND_PAST)) { SSF(FLAG_FORCE_LCD_SEMI_REFRESH); if (alarms_is_active() && alarms_notification_enabled()) { buzzer_toggle(); } else { buzzer_off(); } CSF(FLAG_HALF_SECOND_PAST); } //######################################## odświeżenie wyswietlacza LCD if (system_flags & LCD_REFRESH_MASK) { //if (back_light_counter < LCD_BL_SHUTOFF_TIME) { hd44780_bl_on(); } FPtr=(FuncPtr)pgm_read_word(&FuncPtrTable[menu_func_index()]); hd44780_outcmd(HD44780_HOME); FPtr(); menu_dummy(); CSF(FLAG_FORCE_LCD_REFRESH); CSF(FLAG_FORCE_LCD_SEMI_REFRESH); } //########################### akcje wykonywane kiedy minie minuta if (SF(FLAG_MINUTE_PAST)) { //if (back_light_counter < 0xFF) { back_light_counter++; } //if (back_light_counter >= LCD_BL_SHUTOFF_TIME) { hd44780_bl_off(); } timers_process(); timersv_process(); if (alarms_block_notification_counter < ALARM_MAX_BLOCK_VALUE) { alarms_block_notification_counter++; } CSF(FLAG_MINUTE_PAST); } //########################### akcje wykonywane kiedy minie godzina if (SF(FLAG_HOUR_PAST)) { temp_register(); CSF(FLAG_HOUR_PAST); } //########################### akcje wykonywane jak minie dzień if (SF(FLAG_DAY_PAST)) { rtc_get_time(); rtc_get_date(); CSF(FLAG_DAY_PAST); } //########################### pomiar temeratury if (temp_counter > TEMP_SENSOR_READ_INTERVAL) { temp_read_temperature(); temp_counter = 0; } //######################################## obsługa interfejsu szeregowego gui_cm_process_char(); //######################################## aktualizacja stanu wyjść outputs_update(); } return 0; }