diff --git a/spinnyboy_rust/src/bin/dc_driver/afroesc.rs b/spinnyboy_rust/src/bin/dc_driver/afroesc.rs index e0aa2b5..9dcf89d 100644 --- a/spinnyboy_rust/src/bin/dc_driver/afroesc.rs +++ b/spinnyboy_rust/src/bin/dc_driver/afroesc.rs @@ -1,14 +1,9 @@ -#![no_std] - -use esp_hal::aes::Operation; -use esp_hal::mcpwm::PwmPeripheral; use esp_hal::mcpwm::operator::PwmPin; -use esp_hal::mcpwm::operator::Operator; -use esp_hal::mcpwm::McPwm; -use esp_hal::peripherals::MCPWM0; use esp_hal::delay::Delay; +use crate::dc_driver::EscState; pub struct AfroEsc<'a>{ - pub pwm_pin: &'a mut PwmPin<'a, esp_hal::peripherals::MCPWM0<'a>, 0,true> + pub pwm_pin: &'a mut PwmPin<'a, esp_hal::peripherals::MCPWM0<'a>, 0,true>, + state: crate::dc_driver::EscState, } const ARMING_SEQUENCE:u16 = 1055; @@ -19,13 +14,14 @@ const GAP:u16 = (MAX_THROTTLE - MIN_THROTTLE)/100; impl AfroEsc<'_>{ //this is a little hacky tbh pub fn new<'a>(pwm_pin:&'a mut PwmPin<'a, esp_hal::peripherals::MCPWM0<'a>, 0,true>)-> AfroEsc<'a> { - let mut esc = AfroEsc{pwm_pin:pwm_pin}; + let mut esc = AfroEsc{pwm_pin:pwm_pin,state:EscState::Starting}; let delay = Delay::new(); - esc.set_arming_sequence(); + esc.send_arming_sequence(); delay.delay_millis(3000); esc } pub fn set_timestamp(&mut self,value:u16){ + self.pwm_pin.set_timestamp(value); } //range is from 1121 till 1421 @@ -37,8 +33,24 @@ impl AfroEsc<'_>{ let new_timestamp = MIN_THROTTLE+value*GAP; self.pwm_pin.set_timestamp(new_timestamp); } - pub fn set_arming_sequence(&mut self){ + pub fn send_arming_sequence(&mut self){ self.set_timestamp(1055); } + fn set_state(&mut self, state:EscState){ + self.state = state; + } + pub fn get_state(self) -> EscState{ + self.state + } + pub fn map_duty(&mut self, x:i32){ + if x <=0 { + self.pwm_pin.set_timestamp(1055); + } + else{ + let duty:u16 = crate::dc_driver::arduino_map(x, 0, 100, MIN_THROTTLE.into(), MAX_THROTTLE.into()).try_into().expect("INTEGER TOO LARGE"); + self.pwm_pin.set_timestamp(duty); + + } + } } \ No newline at end of file diff --git a/spinnyboy_rust/src/bin/dc_driver/mod.rs b/spinnyboy_rust/src/bin/dc_driver/mod.rs index c2a351f..5ebbfd5 100644 --- a/spinnyboy_rust/src/bin/dc_driver/mod.rs +++ b/spinnyboy_rust/src/bin/dc_driver/mod.rs @@ -1 +1,17 @@ -pub mod afroesc; \ No newline at end of file +pub mod afroesc; + +pub enum EscState { + Starting, + Running, + Stopping, + Stop + +} +//taken from: https://docs.arduino.cc/language-reference/en/functions/math/map/ +//used for the ramp up of the spincoater +pub fn arduino_map(x:i32, in_min:i32, in_max:i32, out_min:i32, out_max:i32) -> i32 { + + return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; + +} +