int main(void) { int8_t encCnt = 0; uint8_t action = ACTION_NOACTION; /* Init hardware */ hwInit(); #if 0 if (extFunc == USE_DS18B20) { ds18x20ConvertTemp(); setSensTimer(TEMP_MEASURE_TIME); } #endif while (1) { #if 0 /* Control temperature */ if (extFunc == USE_DS18B20) { if (getSensTimer() == 0) { ds18x20GetAllTemps(); ds18x20ConvertTemp(); setSensTimer(SENSOR_POLL_INTERVAL); } tempControlProcess(); } #endif /* Emulate poweroff if any of timers expired */ if (getStbyTimer() == 0 || getSilenceTimer() == 0) action = CMD_RC_STBY; /* Check alarm and update time */ if (action == ACTION_NOACTION) action = checkAlarmAndTime(); /* Convert input command to action */ if (action == ACTION_NOACTION) action = getAction(); /* Handle action */ handleAction(action); /* Handle encoder */ encCnt = getEncoder(); /* Get value from encoder */ if (action == CMD_RC_VOL_UP) /* Emulate VOLUME_UP action as encoder action */ encCnt++; if (action == CMD_RC_VOL_DOWN) /* Emulate VOLUME_DOWN action as encoder action */ encCnt--; handleEncoder(encCnt); /* Reset silence timer on any action */ if (encCnt || (action != ACTION_NOACTION && action != ACTION_EXIT_STANDBY)) enableSilenceTimer(); /* Reset handled action */ action = ACTION_NOACTION; /* Check if we need exit to default mode*/ handleExitDefaultMode(); /* Switch to timer mode if it expires */ handleTimers(); /* Clear screen if mode has changed */ handleModeChange(); /* Show things */ showScreen(); } return 0; }
int main(void) { uint8_t cmd; uint8_t dispMode = MODE_MAIN; static int8_t direction = PARAM_UP; hwInit(); showTimeMasked(); ds18x20Process(); setSensTimer(TEMP_MEASURE_TIME); while(1) { // Update sensors with SENSOR_POLL_INTERVAL period if (getSensTimer() == 0) { setSensTimer(SENSOR_POLL_INTERVAL); ds18x20Process(); if (bmp180HaveSensor()) bmp180Convert(); dht22Read(); } // Check alarm checkAlarm(); // Update brightness only when not in brightness setup if (dispMode != MODE_BRIGHTNESS) calcBrightness(); // Get command from buttons cmd = getBtnCmd(); // Beep on button pressed if (cmd != CMD_EMPTY) { if (cmd < CMD_BTN_1_LONG) startBeeper(BEEP_SHORT); else startBeeper(BEEP_LONG); } // Stop scrolling on any button pressed if (cmd != CMD_EMPTY) matrixHwScroll(MATRIX_SCROLL_STOP); // Handle command switch (cmd) { case CMD_BTN_1: direction = PARAM_UP; switch (dispMode) { case MODE_EDIT_TIME: rtcNextEditParam(); break; case MODE_EDIT_ALARM: alarmNextEditParam(); break; } break; case CMD_BTN_2: direction = PARAM_UP; case CMD_BTN_3: if (cmd == CMD_BTN_3) direction = PARAM_DOWN; switch (dispMode) { case MODE_MAIN: startScroll(cmd - CMD_BTN_2); break; case MODE_EDIT_TIME: rtcChangeTime(direction); break; case MODE_EDIT_ALARM: alarmChange(direction); break; case MODE_BRIGHTNESS: changeBrightness(direction); break; } break; case CMD_BTN_1_LONG: if (dispMode == MODE_MAIN) { dispMode = MODE_EDIT_TIME; rtcNextEditParam(); } else { rtc.etm = RTC_NOEDIT; alarmSave(); alarm.eam = ALARM_NOEDIT; saveMaxBrightness(); dispMode = MODE_MAIN; showTimeMasked(); } break; case CMD_BTN_2_LONG: if (dispMode == MODE_MAIN) { dispMode = MODE_EDIT_ALARM; alarmNextEditParam(); } break; case CMD_BTN_3_LONG: if (dispMode == MODE_MAIN) { dispMode = MODE_BRIGHTNESS; showBrightness(direction, MASK_ALL); } break; case CMD_BTN_1_2_LONG: displaySwitchHourZero(); dispMode = MODE_MAIN; showTimeMasked(); break; case CMD_BTN_2_3_LONG: displaySwitchBigNum(); dispMode = MODE_MAIN; showTimeMasked(); break; case CMD_BTN_1_3_LONG: displaySwitchHourSignal(); dispMode = MODE_MAIN; showTimeMasked(); break; } // Show things switch (dispMode) { case MODE_MAIN: showMainScreen(); break; case MODE_EDIT_TIME: showTimeEdit(direction); break; case MODE_EDIT_ALARM: showAlarmEdit(direction); break; case MODE_BRIGHTNESS: showBrightness(direction, MASK_NONE); break; } } return 0; }