-
Notifications
You must be signed in to change notification settings - Fork 43
/
Copy pathMashKettleHeaterService.cpp
83 lines (69 loc) · 2.32 KB
/
MashKettleHeaterService.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <MashKettleHeaterService.h>
double _mashKettleSetpoint, _mashKettleInput, _mashKettleOutput;
PID _mashKettlePID = PID(&_mashKettleInput, &_mashKettleOutput, &_mashKettleSetpoint, 1, 1, 1, P_ON_M, DIRECT);
MashKettleHeaterService::MashKettleHeaterService(TemperatureService *temperatureService,
ActiveStatus *activeStatus,
BrewSettingsService *brewSettingsService) : HeaterService(temperatureService,
activeStatus,
brewSettingsService)
{
}
double MashKettleHeaterService::GetPidOutput()
{
return _mashKettleOutput;
}
double MashKettleHeaterService::GetPidInput()
{
return _mashKettleInput;
}
double MashKettleHeaterService::GetPidSetPoint()
{
return _mashKettleSetpoint;
}
uint8_t MashKettleHeaterService::GetBus()
{
return HEATER_BUS;
}
void MashKettleHeaterService::PidCompute()
{
_mashKettlePID.Compute();
}
PID &MashKettleHeaterService::GetPid()
{
return _mashKettlePID;
}
void MashKettleHeaterService::StartPID(double kp, double ki, double kd)
{
_mashKettlePID.SetOutputLimits(0.0, 1.0); // Forces minimum up to 0.0
_mashKettlePID.SetOutputLimits(-1.0, 0.0); // Forces maximum down to 0.0
_mashKettlePID.SetTunings(kp, ki, kd, P_ON_M);
_mashKettlePID.SetOutputLimits(0, 1023);
_mashKettlePID.SetMode(AUTOMATIC);
}
void MashKettleHeaterService::SetPidParameters(double input, double setpoint)
{
_mashKettleInput = input;
_mashKettleSetpoint = setpoint;
}
void MashKettleHeaterService::SetUP()
{
}
bool MashKettleHeaterService::InvertedPWM()
{
return false;
}
boolean MashKettleHeaterService::StopCompute()
{
return !_activeStatus->BrewStarted ||
_activeStatus->ActiveStep != mash ||
_activeStatus->PumpIsResting ||
!_activeStatus->HeaterOn;
}
void MashKettleHeaterService::TurnOff()
{
if (!_activeStatus->BrewStarted ||
(_activeStatus->ActiveStep == boil && _activeStatus->EnableBoilKettle) ||
(_activeStatus->ActiveStep == mash && _activeStatus->PumpIsResting) ||
(_activeStatus->ActiveStep == mash && !_activeStatus->HeaterOn))
analogWrite(GetBus(), 0);
}