|
@@ -64,25 +64,28 @@ void display_process(therm_settings_t* s
|
|
|
ssd1306_drawstring(" ", 3, 72);
|
|
|
ssd1306_drawstring(tempstr, 3, 72);
|
|
|
}
|
|
|
|
|
|
if (state_changed) {
|
|
|
ssd1306_drawlogo();
|
|
|
}
|
|
|
|
|
|
switch(goto_mode) {
|
|
|
|
|
|
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:
|
|
|
{
|
|
|
ssd1306_drawstring("-> setup ", 1, 40);
|
|
|
} break;
|
|
|
|
|
|
case MODE_RESET:
|
|
|
{
|
|
|
ssd1306_drawstring("-> reset ", 1, 40);
|
|
|
} break;
|
|
|
|
|
@@ -92,25 +95,25 @@ void display_process(therm_settings_t* s
|
|
|
ssd1306_drawstring("-> dfu ", 1, 40);
|
|
|
}
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
// Button handler
|
|
|
if(SW_BTN_PRESSED) {
|
|
|
switch(goto_mode) {
|
|
|
case MODE_HEAT:
|
|
|
status->state = STATE_PREHEAT;
|
|
|
break;
|
|
|
case MODE_SETUP:
|
|
|
status->state = STATE_SETP;
|
|
|
status->state = STATE_SETMODE;
|
|
|
break;
|
|
|
case MODE_RESET:
|
|
|
status->state = STATE_RESET;
|
|
|
reset_mode = RESET_REBOOT;
|
|
|
break;
|
|
|
#ifdef BOOTLOADER_SHORTCUT
|
|
|
case MODE_BOOTLOADER:
|
|
|
ssd1306_clearscreen();
|
|
|
ssd1306_drawstring("Bootloader Entered", 0, 0);
|
|
|
ssd1306_drawstring("Device won't boot", 2, 0);
|
|
|
ssd1306_drawstring("until reflashed!", 3, 0);
|
|
|
bootloader_enter(); // Resets into bootloader
|
|
@@ -125,24 +128,91 @@ void display_process(therm_settings_t* s
|
|
|
goto_mode++;
|
|
|
}
|
|
|
else if(SW_UP_PRESSED && goto_mode > 0) {
|
|
|
goto_mode--;
|
|
|
}
|
|
|
|
|
|
|
|
|
// Event Handler
|
|
|
// N/A
|
|
|
|
|
|
} 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
|
|
|
// [ therm :: set p ]
|
|
|
// [ p = 12 ]
|
|
|
ssd1306_drawstring("Proportional", 0, 40);
|
|
|
ssd1306_drawlogo();
|
|
|
|
|
|
char tempstr[6];
|
|
|
itoa(set->val.k_p, tempstr, 10);
|
|
|
ssd1306_drawstring("P=", 1, 45);
|
|
|
ssd1306_drawstring(" ", 1, 57);
|
|
@@ -369,26 +439,30 @@ void display_process(therm_settings_t* s
|
|
|
// Event Handler
|
|
|
if(status->temp >= status->setpoint) {
|
|
|
status->state = STATE_MAINTAIN;
|
|
|
}
|
|
|
|
|
|
} break;
|
|
|
|
|
|
case STATE_MAINTAIN:
|
|
|
{
|
|
|
// 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;
|
|
|
|
|
|
// Button handler
|
|
|
if(SW_BTN_PRESSED) {
|
|
|
status->state = STATE_IDLE;
|
|
|
}
|
|
|
else {
|
|
|
user_input((uint16_t*)&set->val.setpoint_brew);
|
|
|
}
|
|
|
|