diff --git a/src/display.c b/src/display.c --- a/src/display.c +++ b/src/display.c @@ -45,6 +45,14 @@ void display_1hz(void) toggle = !toggle; } +static char updown(void) +{ + if(toggle) + return '\x8f'; + else + return '\x90'; +} + // Display state machine void display_process(void) { @@ -165,6 +173,7 @@ void display_process(void) ssd1306_drawstring("Sensor Type", 0, 40); ssd1306_drawlogo(); + ssd1306_drawchar(updown(), 1, 52); ssd1306_drawstring(sensor_lookup[set->val.sensor_type], 1, 60); ssd1306_drawstring("Press to accept", 3, 40); @@ -192,6 +201,9 @@ void display_process(void) ssd1306_drawstring("Control Mode", 0, 40); ssd1306_drawlogo(); + ssd1306_drawchar(updown(), 1, 52); + + if(set->val.control_mode == MODE_PID) ssd1306_drawstring("PID ", 1, 60); else @@ -223,6 +235,8 @@ void display_process(void) ssd1306_drawstring("Plant Type", 0, 40); ssd1306_drawlogo(); + ssd1306_drawchar(updown(), 1, 52 ); + if(set->val.plant_type == PLANT_HEATER) ssd1306_drawstring("Heater", 1, 60); else @@ -250,33 +264,6 @@ void display_process(void) - case STATE_SETHYSTERESIS: - { - // Write text to OLED - ssd1306_drawstring("Hysteresis", 0, 40); - ssd1306_drawlogo(); - - char tempstr[6]; - itoa(set->val.hysteresis, tempstr, 10); - ssd1306_drawstring("H=", 1, 45); - ssd1306_drawstring(" ", 1, 57); - ssd1306_drawstring(tempstr, 1, 57); - - ssd1306_drawstring("Press to accept", 3, 40); - - // Button handler - if(SW_BTN_PRESSED) { - status->state = STATE_SETBOOTTOBREW; - } - else { - user_input((uint16_t*)&set->val.hysteresis); - } - - // Event Handler - // N/A - - } break; - case STATE_SETP: { @@ -286,12 +273,11 @@ void display_process(void) 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); - ssd1306_drawstring(tempstr, 1, 57); + ssd1306_drawchar(updown(), 1, 52); + char tempstr[12]; + snprintf(tempstr, 12, "P=%d", set->val.k_p); + ssd1306_drawstring(tempstr, 1, 60); ssd1306_drawstring("Press to accept", 3, 40); // Button handler @@ -315,11 +301,11 @@ void display_process(void) ssd1306_drawstring("Integral", 0, 40); ssd1306_drawlogo(); - char tempstr[6]; - itoa(set->val.k_i, tempstr, 10); - ssd1306_drawstring("I=", 1, 45); - ssd1306_drawstring(" ", 1, 57); - ssd1306_drawstring(tempstr, 1, 57); + ssd1306_drawchar(updown(), 1, 52); + + char tempstr[12]; + snprintf(tempstr, 12, "I=%d", set->val.k_i); + ssd1306_drawstring(tempstr, 1, 60); ssd1306_drawstring("Press to accept", 3, 40); @@ -344,11 +330,11 @@ void display_process(void) ssd1306_drawstring("Derivative", 0, 40); ssd1306_drawlogo(); - char tempstr[6]; - itoa(set->val.k_d, tempstr, 10); - ssd1306_drawstring("D=", 1, 45); - ssd1306_drawstring(" ", 1, 57); - ssd1306_drawstring(tempstr, 1, 57); + ssd1306_drawchar(updown(), 1, 52); + + char tempstr[12]; + snprintf(tempstr, 12, "D=%d", set->val.k_d); + ssd1306_drawstring(tempstr, 1, 60); ssd1306_drawstring("Press to accept", 3, 40); @@ -365,6 +351,36 @@ void display_process(void) } break; + + + case STATE_SETHYSTERESIS: + { + // Write text to OLED + ssd1306_drawstring("Hysteresis", 0, 40); + ssd1306_drawlogo(); + + ssd1306_drawchar(updown(), 1, 52); + + char tempstr[12]; + snprintf(tempstr, 12, "H=%d", set->val.hysteresis); + ssd1306_drawstring(tempstr, 1, 60); + + ssd1306_drawstring("Press to accept", 3, 40); + + // Button handler + if(SW_BTN_PRESSED) { + status->state = STATE_SETBOOTTOBREW; + } + else { + user_input((uint16_t*)&set->val.hysteresis); + } + + // Event Handler + // N/A + + } break; + + case STATE_SETWINDUP: { // Write text to OLED @@ -373,11 +389,11 @@ void display_process(void) ssd1306_drawstring("Windup Guard", 0, 40); ssd1306_drawlogo(); - char tempstr[6]; - itoa(set->val.windup_guard, tempstr, 10); - ssd1306_drawstring("G=", 1, 45); - ssd1306_drawstring(" ", 1, 57); - ssd1306_drawstring(tempstr, 1, 57); + ssd1306_drawchar(updown(), 1, 52); + + char tempstr[12]; + snprintf(tempstr, 12, "G=%d", set->val.windup_guard); + ssd1306_drawstring(tempstr, 1, 60); ssd1306_drawstring("Press to accept", 3, 40); @@ -402,12 +418,14 @@ void display_process(void) ssd1306_drawstring("Start on Boot", 0, 40); ssd1306_drawlogo(); - ssd1306_drawstring("sob=", 1, 45); + ssd1306_drawstring("sob=", 1, 50); + ssd1306_drawchar(updown(), 1, 43); + if(set->val.boottobrew) - ssd1306_drawstring("Enabled ", 1, 70); + ssd1306_drawstring("Enable ", 1, 75); else - ssd1306_drawstring("Disabled", 1, 70); + ssd1306_drawstring("Disable", 1, 75); ssd1306_drawstring("Press to accept", 3, 40); @@ -435,6 +453,8 @@ void display_process(void) ssd1306_drawstring("Units: ", 0, 40); ssd1306_drawlogo(); + ssd1306_drawchar(updown(), 1, 52); + if(set->val.temp_units == TEMP_UNITS_FAHRENHEIT) ssd1306_drawstring("Fahrenheit", 1, 60); else @@ -467,11 +487,11 @@ void display_process(void) ssd1306_drawstring("Temp Cal Offset", 0, 40); ssd1306_drawlogo(); - char tempstr[6]; - itoa(set->val.temp_offset, tempstr, 10); - ssd1306_drawstring("O=", 1, 45); - ssd1306_drawstring(" ", 1, 57); - ssd1306_drawstring(tempstr, 1, 57); + ssd1306_drawchar(updown(), 1, 52); + + char tempstr[12]; + snprintf(tempstr, 12, "O=%d", set->val.temp_offset); + ssd1306_drawstring(tempstr, 1, 60); ssd1306_drawstring("Press to accept", 3, 40); @@ -709,8 +729,8 @@ static void draw_setpoint(therm_status_t ssd1306_drawstringbig(">", 3, 74); if(status->setpoint != setpoint_last || trigger_drawsetpoint) { - char tempstr[5]; - snprintf(tempstr, 5, "%g ", status->setpoint); + char tempstr[4]; + snprintf(tempstr, 4, "%g ", status->setpoint); ssd1306_drawstringbig(tempstr, 3, 90); }