diff --git a/display.c b/display.c --- a/display.c +++ b/display.c @@ -24,6 +24,7 @@ static uint8_t sw_right_last = 0; // States static uint8_t trigger_drawsetpoint = 1; static int16_t last_temp = 21245; +static int16_t last_state = STATE_IDLE; static uint8_t goto_mode = MODE_HEAT; static uint8_t reset_mode = RESET_REBOOT; @@ -32,7 +33,8 @@ static uint8_t reset_mode = RESET_REBOOT // Display state machine void display_process(therm_settings_t* set, therm_status_t* status) { - uint8_t last_state = status->state; + uint8_t state_changed = status->state != last_state; + last_state = status->state; uint8_t temp_changed = status->temp != last_temp; last_temp = status->temp; @@ -53,7 +55,7 @@ void display_process(therm_settings_t* s ssd1306_drawstring("therm :: idle ", 0, 40); status->pid_enabled = 0; - if(temp_changed) { + if(temp_changed || state_changed) { char tempstr[6]; itoa_fp(status->temp, status->temp_frac, tempstr); ssd1306_drawstring("Temp: ", 3, 40); @@ -61,7 +63,9 @@ void display_process(therm_settings_t* s ssd1306_drawstring(tempstr, 3, 72); } - ssd1306_drawlogo(); + if (state_changed) { + ssd1306_drawlogo(); + } switch(goto_mode) {