diff --git a/controller/src/main.rs b/controller/src/main.rs index 4c20358..3176aaa 100644 --- a/controller/src/main.rs +++ b/controller/src/main.rs @@ -288,10 +288,18 @@ async fn main(spawner: Spawner) { }; if let Ok(telem) = postcard::to_slice(&telem, &mut telem_buf) { + if let Err(e) = socket.write_all(&u32::to_be_bytes(telem.len() as u32)).await { + warn!("write error: {:?}", e); + break; + } if let Err(e) = socket.write_all(&telem).await { warn!("write error: {:?}", e); break; } + //if let Err(e) = socket.flush().await { + // warn!("write error: {:?}", e); + // break; + //} } } } @@ -299,7 +307,7 @@ async fn main(spawner: Spawner) { } /// 0 to 1 -fn calc_speed(speed: f32) -> u16 { +fn calc_speed_mosfet(speed: f32) -> u16 { let speed = speed.clamp(0., 1.); let speed = speed * u16::MAX as f32; @@ -307,6 +315,16 @@ fn calc_speed(speed: f32) -> u16 { speed as u16 } +/// -1 to 1 +fn calc_speed(speed: f32) -> u16 { + const COUNTS_PER_MS: f32 = 3125.; + let speed = speed.clamp(-1., 1.); + + let ms = (speed/2.0)+1.5; + + (COUNTS_PER_MS * ms) as u16 +} + #[derive(Debug)] enum CamState { Override(f32), @@ -365,6 +383,6 @@ fn handle_cam(cam: &mut Pwm, state: &mut CamState, limit: &Input) { let mut f: pwm::Config = Default::default(); f.divider = 1.into(); f.top = u16::MAX; - f.compare_b = calc_speed(speed); + f.compare_b = calc_speed_mosfet(speed); cam.set_config(&f); }