use core::time::Duration;
use crate::loops::ControlLoop;
pub struct BangBang {
magnitude: f64,
}
impl BangBang {
pub fn new(magnitude: f64) -> Self {
Self { magnitude }
}
pub fn magnitude(&self) -> f64 {
self.magnitude
}
pub fn set_magnitude(&mut self, magnitude: f64) {
self.magnitude = magnitude;
}
}
impl ControlLoop for BangBang {
type Input = f64;
type Output = f64;
fn update(
&mut self,
measurement: Self::Input,
setpoint: Self::Input,
_dt: Duration,
) -> Self::Output {
if measurement < setpoint {
self.magnitude
} else {
0.0
}
}
}