@@ -338,14 +338,13 @@ void display_process(therm_settings_t* s
ssd1306_DrawString("Celsius ", 1, 60);
ssd1306_DrawString("Press to accept", 3, 40);
// Button handler
if(SW_BTN_PRESSED) {
save_settings();
status->state = STATE_IDLE;
status->state = STATE_SETTEMPOFFSET;
}
else if(!HAL_GPIO_ReadPin(SW_UP)) {
set->temp_units = TEMP_UNITS_FAHRENHEIT;
else if(!HAL_GPIO_ReadPin(SW_DOWN)) {
set->temp_units = TEMP_UNITS_CELSIUS;
@@ -354,12 +353,43 @@ void display_process(therm_settings_t* s
// Event Handler
// N/A
} break;
case STATE_SETTEMPOFFSET:
{
// Write text to OLED
// [ therm :: set temp offset ]
// [ g = 12 ]
ssd1306_DrawString("Thermocouple Offset", 0, 40);
ssd1306_drawlogo();
char tempstr[6];
itoa(set->temp_offset, tempstr, 10);
ssd1306_DrawString("O=", 1, 45);
ssd1306_DrawString(" ", 1, 57);
ssd1306_DrawString(tempstr, 1, 57);
else {
user_input_signed(&set->temp_offset);
case STATE_PREHEAT_BREW:
// [ therm : preheating brew ]
// [ 30 => 120 C ]
ssd1306_DrawString("Preheating...", 0, 0);
@@ -17,12 +17,27 @@ void user_input(uint16_t* to_modify)
CHANGE_RESET;
(*to_modify)--;
void user_input_signed(int16_t* to_modify)
// TODO: Bounds check on int16_t
if(CHANGE_ELAPSED) {
if(!HAL_GPIO_ReadPin(SW_UP) ) {
(*to_modify)++;
void init_gpio(void) {
GPIO_InitTypeDef GPIO_InitStruct;
/* GPIO Ports Clock Enable */
@@ -6,11 +6,12 @@
#define CHANGE_PERIOD_MS 100
#define CHANGE_ELAPSED (HAL_GetTick() - change_time_reset) > CHANGE_PERIOD_MS
#define CHANGE_RESET change_time_reset = HAL_GetTick()
void user_input(uint16_t* to_modify);
void user_input_signed(int16_t* to_modify);
void init_gpio(void);
#endif
// vim:softtabstop=4 shiftwidth=4 expandtab
@@ -203,18 +203,20 @@ void update_temp() {
status.temp = signint * ((temp_pre*100) + status.temp_frac);
status.temp = status.temp * 1.8;
status.temp += 3200;
status.temp_frac = status.temp % 100;
status.temp /= 100;
status.temp += set.temp_offset;
// Use Celsius values
else
status.temp = temp_pre * signint;
// PID implementation
@@ -14,12 +14,13 @@ typedef struct {
uint8_t boottobrew;
uint8_t temp_units;
uint16_t windup_guard;
uint16_t k_p;
uint16_t k_i;
uint16_t k_d;
int16_t temp_offset;
uint8_t ignore_tc_error;
int16_t setpoint_brew;
int16_t setpoint_steam;
} therm_settings_t;
@@ -36,12 +37,13 @@ enum state {
STATE_SETI,
STATE_SETD,
STATE_SETSTEPS,
STATE_SETWINDUP,
STATE_SETBOOTTOBREW,
STATE_SETUNITS,
STATE_SETTEMPOFFSET,
STATE_PREHEAT_BREW,
STATE_MAINTAIN_BREW,
STATE_PREHEAT_STEAM,
STATE_MAINTAIN_STEAM,
Status change: