Brewery-Controller/boil_kettle/src/functions.h
2024-04-26 08:41:06 -04:00

89 lines
2.3 KiB
C

#include "../globals.h"
// Interrupt function to run when encoder is turned.
//
// Increases/decreases the kettle output to a max
// of 100% and minimum of 0%.
void doEncoder()
{
uint8_t result = rotary.read();
int inc;
if (result) {
uint8_t speed = rotary.speed();
speed >= 10 ? inc = 5 : inc = 1;
if (result == DIR_CCW) inc = inc * -1;
SettingChanged = true;
if (KettleController.Mode() == MANUAL) {
uint8_t KettleDuty = (uint8_t)KettleController.Power();
KettleDuty = max(0, min((KettleDuty / inc) * inc + inc, 100));
KettleController.Power((double)KettleDuty);
} else if (KettleController.Mode() == AUTOMATIC) {
uint8_t KettleTemp = (uint8_t)KettleController.Setpoint();
KettleTemp = max(0, min((KettleTemp / inc) * inc + inc, 220));
KettleController.Setpoint((double)KettleTemp);
}
} else {
SettingChanged = false;
}
}
// Return a character array to represent the
// state of the kettle.
char* ShowKettleState() {
if (KettleController.Mode() == MANUAL) {
return (char*)"Kettle: Manual";
} else if (KettleController.Mode() == AUTOMATIC) {
return (char*)"Kettle: Auto";
} else {
return (char*)"Kettle: Off";
}
}
char* ShowKettleSetting() {
static char LCD_Line[21];
char setting[4];
if (KettleController.Mode() == MANUAL) {
strcpy(LCD_Line, (char*)"Kettle Power: ");
itoa(KettleController.Power(), setting, 10);
strcat(LCD_Line, setting);
strcat(LCD_Line, (char*)"%");
return LCD_Line;
} else if (KettleController.Mode() == AUTOMATIC) {
strcpy(LCD_Line, (char*)"Kettle Temp: ");
itoa(KettleController.Setpoint(), setting, 10);
strcat(LCD_Line, setting);
strcat(LCD_Line, (char*)"F");
return LCD_Line;
} else {
return (char*)"It's Off stoopid";
}
}
void UpdateBoilKettle(){
if (Enter.pressed()) {
Serial.println("Pressed");
KettleController.CycleMode();
SettingChanged = true;
}
if (SettingChanged) {
menu.update();
SettingChanged = false;
}
if (KettleController.Mode() != OFF) {
// Compute will return false if MANUAL is set so duty will not
// be changed here.
KettleController.Compute();
KettleDuty = KettleController.Power();
digitalWrite(O_PWM, boilPWM.compute(KettleDuty));
} else {
digitalWrite(O_PWM, boilPWM.compute(0));
}
}