#ifndef CONFIG_H
#define CONFIG_H
#define SSR_PERIOD 200
#define LED_POWER GPIOB,GPIO_Pin_9
#define LED_STAT GPIOA,GPIO_Pin_15
#define MAX_CS GPIOB,GPIO_Pin_12
#define SW_BTN GPIOB, GPIO_Pin_3
#define SW_UP GPIOB, GPIO_Pin_4
#define SW_DOWN GPIOB, GPIO_Pin_6
#define SW_LEFT GPIOB, GPIO_Pin_5
#define SW_RIGHT GPIOB, GPIO_Pin_7
#define SSR_PIN GPIOC, GPIO_Pin_13
#endif
@@ -239,56 +239,58 @@ void process()
if((ticks - last_ssr_on > SSR_PERIOD))
{
if(pid_enabled)
// Get ssr output for next time
int16_t power_percent = update_pid(k_p, k_i, k_d, temp, temp_frac, setpoint);
//power-percent is 0-1000
ssr_output = power_percent; //(((uint32_t)SSR_PERIOD * (uint32_t)10 * (uint32_t)100) * power_percent) / (uint32_t)1000000;
}
else
ssr_output = 0;
// Only support heating (ssr_output > 0) right now
if(ssr_output > 0) {
char tempstr[6];
itoa(ssr_output, tempstr);
ssd1306_DrawString("#=", 2, 45);
ssd1306_DrawString(" ", 2, 57);
ssd1306_DrawString(tempstr, 2, 57);
GPIO_SetBits(LED_STAT);
GPIO_SetBits(SSR_PIN);
last_ssr_on = ticks;
// Kill SSR after elapsed period less than SSR_PERIOD
if(ticks - last_ssr_on > ssr_output)
GPIO_ResetBits(LED_STAT);
GPIO_ResetBits(SSR_PIN);
void draw_setpoint() {
char tempstr[3];
itoa_fp(temp, temp_frac, tempstr);
//ssd1306_DrawString(" ", 3, 40);
ssd1306_DrawString(tempstr, 3, 40);
ssd1306_DrawString("-> ", 3, 80);
itoa(setpoint, tempstr);
ssd1306_DrawString(" ", 3, 95);
ssd1306_DrawString(tempstr, 3, 95);
uint8_t goto_mode = 2;
// State machine
uint8_t sw_btn_last = 0;
uint8_t sw_up_last = 0;
uint8_t sw_down_last = 0;
uint8_t sw_left_last = 0;
uint8_t sw_right_last = 0;
#define SW_BTN_PRESSED (sw_btn_last == 0 && sw_btn == 1) // rising edge on buttonpress
Status change: