forked from M-Labs/thermostat
do not overwrite dac value when pid is disengaged
This commit is contained in:
parent
b9d05ff274
commit
c0079007f2
|
@ -26,7 +26,7 @@ impl Default for ChannelState {
|
||||||
|
|
||||||
impl ChannelState {
|
impl ChannelState {
|
||||||
/// Update PID state on ADC input, calculate new DAC output
|
/// Update PID state on ADC input, calculate new DAC output
|
||||||
pub fn update_pid(&mut self, now: Instant, adc_data: u32) {
|
pub fn update_pid(&mut self, now: Instant, adc_data: u32) -> u32 {
|
||||||
self.adc_data = Some(adc_data);
|
self.adc_data = Some(adc_data);
|
||||||
self.adc_time = now;
|
self.adc_time = now;
|
||||||
|
|
||||||
|
@ -34,6 +34,6 @@ impl ChannelState {
|
||||||
let input = (adc_data as f64) / (ad7172::MAX_VALUE as f64);
|
let input = (adc_data as f64) / (ad7172::MAX_VALUE as f64);
|
||||||
let temperature = self.sh.get_temperature(input);
|
let temperature = self.sh.get_temperature(input);
|
||||||
let output = self.pid.update(temperature);
|
let output = self.pid.update(temperature);
|
||||||
self.dac_value = (output * (ad5680::MAX_VALUE as f64)) as u32;
|
(output * (ad5680::MAX_VALUE as f64)) as u32
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,10 +48,10 @@ impl Channels {
|
||||||
|
|
||||||
let dac_value = {
|
let dac_value = {
|
||||||
let state = self.channel_state(channel);
|
let state = self.channel_state(channel);
|
||||||
state.update_pid(instant, data);
|
let pid_output = state.update_pid(instant, data);
|
||||||
|
|
||||||
if state.pid_engaged {
|
if state.pid_engaged {
|
||||||
Some(state.dac_value)
|
Some(pid_output)
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue