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

Revision:
52:f207567d3ea4
Child:
74:d281aaef9766
--- /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