89 lines
2.2 KiB
C
89 lines
2.2 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();
|
|
uint8_t 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*)F("Kettle: Manual");
|
|
} else if (KettleController.Mode() == AUTOMATIC) {
|
|
return (char*)F("Kettle: Auto");
|
|
} else {
|
|
return (char*)F("Kettle: Off");
|
|
}
|
|
}
|
|
|
|
char* ShowKettleSetting() {
|
|
static char LCD_Line[21];
|
|
char setting[4];
|
|
if (KettleController.Mode() == MANUAL) {
|
|
strcpy(LCD_Line, (char*)F("Kettle Power: "));
|
|
itoa(KettleController.Power(), setting, 10);
|
|
strcat(LCD_Line, setting);
|
|
strcat(LCD_Line, (char*)F("%"));
|
|
|
|
return LCD_Line;
|
|
} else if (KettleController.Mode() == AUTOMATIC) {
|
|
strcpy(LCD_Line, (char*)F("Kettle Temp: "));
|
|
itoa(KettleController.Setpoint(), setting, 10);
|
|
strcat(LCD_Line, setting);
|
|
strcat(LCD_Line, (char*)F("F"));
|
|
return LCD_Line;
|
|
} else {
|
|
return (char*)"";
|
|
}
|
|
}
|
|
|
|
void UpdateBoilKettle(){
|
|
|
|
if (Enter.pressed()) {
|
|
KettleController.CycleMode();
|
|
SettingChanged = true;
|
|
}
|
|
|
|
if (SettingChanged) {
|
|
menu.update();
|
|
SettingChanged = false;
|
|
}
|
|
|
|
if (KettleController.Mode() != OFF) {
|
|
if (KettleController.Compute()) KettleDuty = KettleController.Power();
|
|
digitalWrite(O_PWM, boilPWM.compute(KettleDuty));
|
|
} else {
|
|
digitalWrite(O_PWM, boilPWM.compute(0));
|
|
}
|
|
}
|