most functionality to splashdwon, find neutral and start mission. short timeouts still in code for testing, will adjust to go directly to sit_idle after splashdown
Dependencies: mbed MODSERIAL FATFileSystem
Diff: ServoDriver_new/ServoDriver.hpp
- Revision:
- 52:f207567d3ea4
- Child:
- 74:d281aaef9766
diff -r c5c40272ecc3 -r f207567d3ea4 ServoDriver_new/ServoDriver.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ServoDriver_new/ServoDriver.hpp Wed Jun 06 19:18:47 2018 +0000 @@ -0,0 +1,71 @@ +#ifndef SERVODRIVER_HPP +#define SERVODRIVER_HPP + +#include "mbed.h" + +class ServoDriver { +public: + ServoDriver(PinName pwm); + + void endPoints(float lower_endpoint, float upper_endpoint); + void neutralPosition(float input_neutral_position); + void setPosition_deg(float input_position); + + float slope(); + + void setMinPWM(float pwm_input); + void setMaxPWM(float pwm_input); + void setCenterPWM(float pwm_input); + void setMinDeg(float deg); + void setMaxDeg(float deg); + + float getPosition_deg(); + float getPosition_pwm(); + + void init(); + + void pwm_pulse_off(); + void pwm_pulse_on(); + void pause(); + void unpause(); + + void runServo(); + + float getMinPWM(); + float getMaxPWM(); + float getCenterPWM(); + float getMinDeg(); + float getMaxDeg(); + +private: + float _min_pwm; + float _max_pwm; + float _center_pwm; + float _min_deg; + float _max_deg; + + float _degrees_set_position; + + volatile unsigned int _valid_servo_position_pwm; //signal in microseconds, for example 1580 microseconds (close to center of servo) + volatile unsigned int _period_cnt; + + Ticker pwm_pulse_on_ticker; + Ticker pwm_pulse_off_ticker; + Timeout pwm_pulse_off_timeout; + + DigitalOut _pwm_out; //cannot be volatile +}; + +template <typename T> +T servoClamp(T value, T min, T max) +{ + if(value < min) { + return min; + } else if(value > max) { + return max; + } else { + return value; + } +}; + +#endif \ No newline at end of file