diff --git a/display.c b/display.c --- a/display.c +++ b/display.c @@ -73,7 +73,10 @@ void display_process(therm_settings_t* s case MODE_HEAT: { - ssd1306_drawstring("-> heat ", 1, 40); + if(set->val.plant_type == PLANT_HEATER) + ssd1306_drawstring("-> heat ", 1, 40); + else + ssd1306_drawstring("-> cool ", 1, 40); } break; case MODE_SETUP: @@ -101,7 +104,7 @@ void display_process(therm_settings_t* s status->state = STATE_PREHEAT; break; case MODE_SETUP: - status->state = STATE_SETP; + status->state = STATE_SETMODE; break; case MODE_RESET: status->state = STATE_RESET; @@ -134,6 +137,73 @@ void display_process(therm_settings_t* s } break; + + + case STATE_SETMODE: + { + // Write text to OLED + // [ therm :: set mode ] + // [ m = ] + ssd1306_drawstring("Control Mode", 0, 40); + ssd1306_drawlogo(); + + if(set->val.control_mode == MODE_PID) + ssd1306_drawstring("PID ", 1, 60); + else + ssd1306_drawstring("Thermostat", 1, 60); + + ssd1306_drawstring("Press to accept", 3, 40); + + // Button handler + if(SW_BTN_PRESSED) { + status->state = STATE_SETPLANTTYPE; + } + else if (!HAL_GPIO_ReadPin(SW_UP)) { + set->val.control_mode = MODE_PID; + } + else if(!HAL_GPIO_ReadPin(SW_DOWN)) { + set->val.control_mode = MODE_THERMOSTAT; + } + // Event Handler + // N/A + + } break; + + + case STATE_SETPLANTTYPE: + { + // Write text to OLED + // [ therm :: set mode ] + // [ m = ] + ssd1306_drawstring("Plant Type", 0, 40); + ssd1306_drawlogo(); + + if(set->val.plant_type == PLANT_HEATER) + ssd1306_drawstring("Heater", 1, 60); + else + ssd1306_drawstring("Cooler", 1, 60); + + ssd1306_drawstring("Press to accept", 3, 40); + + // Button handler + if(SW_BTN_PRESSED) { + if(set->val.control_mode == MODE_PID) + status->state = STATE_SETP; + else + status->state = STATE_SETBOOTTOBREW; + } + else if (!HAL_GPIO_ReadPin(SW_UP)) { + set->val.plant_type = PLANT_COOLER; + } + else if(!HAL_GPIO_ReadPin(SW_DOWN)) { + set->val.plant_type = PLANT_HEATER; + } + // Event Handler + // N/A + + } break; + + case STATE_SETP: { // Write text to OLED @@ -378,8 +448,12 @@ void display_process(therm_settings_t* s // Write text to OLED // [ therm : ready to brew ] // [ 30 => 120 C ] - ssd1306_drawstring("Preheated!", 0, 0); - //ssd1306_drawlogo(); + + if(set->val.plant_type == PLANT_HEATER) + ssd1306_drawstring("Preheated!", 0, 0); + else + ssd1306_drawstring("Precooled!", 0, 0); + draw_setpoint(status); status->pid_enabled = 1; status->setpoint = set->val.setpoint_brew;