modifications to run via legfile.txt and then exit, manage logfile versions, diagnostics file

Dependencies:   mbed MODSERIAL FATFileSystem

Committer:
tnhnrl
Date:
Wed Jun 06 19:18:47 2018 +0000
Revision:
52:f207567d3ea4
Child:
74:d281aaef9766
version with non-working motors

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tnhnrl 52:f207567d3ea4 1 #ifndef SERVODRIVER_HPP
tnhnrl 52:f207567d3ea4 2 #define SERVODRIVER_HPP
tnhnrl 52:f207567d3ea4 3
tnhnrl 52:f207567d3ea4 4 #include "mbed.h"
tnhnrl 52:f207567d3ea4 5
tnhnrl 52:f207567d3ea4 6 class ServoDriver {
tnhnrl 52:f207567d3ea4 7 public:
tnhnrl 52:f207567d3ea4 8 ServoDriver(PinName pwm);
tnhnrl 52:f207567d3ea4 9
tnhnrl 52:f207567d3ea4 10 void endPoints(float lower_endpoint, float upper_endpoint);
tnhnrl 52:f207567d3ea4 11 void neutralPosition(float input_neutral_position);
tnhnrl 52:f207567d3ea4 12 void setPosition_deg(float input_position);
tnhnrl 52:f207567d3ea4 13
tnhnrl 52:f207567d3ea4 14 float slope();
tnhnrl 52:f207567d3ea4 15
tnhnrl 52:f207567d3ea4 16 void setMinPWM(float pwm_input);
tnhnrl 52:f207567d3ea4 17 void setMaxPWM(float pwm_input);
tnhnrl 52:f207567d3ea4 18 void setCenterPWM(float pwm_input);
tnhnrl 52:f207567d3ea4 19 void setMinDeg(float deg);
tnhnrl 52:f207567d3ea4 20 void setMaxDeg(float deg);
tnhnrl 52:f207567d3ea4 21
tnhnrl 52:f207567d3ea4 22 float getPosition_deg();
tnhnrl 52:f207567d3ea4 23 float getPosition_pwm();
tnhnrl 52:f207567d3ea4 24
tnhnrl 52:f207567d3ea4 25 void init();
tnhnrl 52:f207567d3ea4 26
tnhnrl 52:f207567d3ea4 27 void pwm_pulse_off();
tnhnrl 52:f207567d3ea4 28 void pwm_pulse_on();
tnhnrl 52:f207567d3ea4 29 void pause();
tnhnrl 52:f207567d3ea4 30 void unpause();
tnhnrl 52:f207567d3ea4 31
tnhnrl 52:f207567d3ea4 32 void runServo();
tnhnrl 52:f207567d3ea4 33
tnhnrl 52:f207567d3ea4 34 float getMinPWM();
tnhnrl 52:f207567d3ea4 35 float getMaxPWM();
tnhnrl 52:f207567d3ea4 36 float getCenterPWM();
tnhnrl 52:f207567d3ea4 37 float getMinDeg();
tnhnrl 52:f207567d3ea4 38 float getMaxDeg();
tnhnrl 52:f207567d3ea4 39
tnhnrl 52:f207567d3ea4 40 private:
tnhnrl 52:f207567d3ea4 41 float _min_pwm;
tnhnrl 52:f207567d3ea4 42 float _max_pwm;
tnhnrl 52:f207567d3ea4 43 float _center_pwm;
tnhnrl 52:f207567d3ea4 44 float _min_deg;
tnhnrl 52:f207567d3ea4 45 float _max_deg;
tnhnrl 52:f207567d3ea4 46
tnhnrl 52:f207567d3ea4 47 float _degrees_set_position;
tnhnrl 52:f207567d3ea4 48
tnhnrl 52:f207567d3ea4 49 volatile unsigned int _valid_servo_position_pwm; //signal in microseconds, for example 1580 microseconds (close to center of servo)
tnhnrl 52:f207567d3ea4 50 volatile unsigned int _period_cnt;
tnhnrl 52:f207567d3ea4 51
tnhnrl 52:f207567d3ea4 52 Ticker pwm_pulse_on_ticker;
tnhnrl 52:f207567d3ea4 53 Ticker pwm_pulse_off_ticker;
tnhnrl 52:f207567d3ea4 54 Timeout pwm_pulse_off_timeout;
tnhnrl 52:f207567d3ea4 55
tnhnrl 52:f207567d3ea4 56 DigitalOut _pwm_out; //cannot be volatile
tnhnrl 52:f207567d3ea4 57 };
tnhnrl 52:f207567d3ea4 58
tnhnrl 52:f207567d3ea4 59 template <typename T>
tnhnrl 52:f207567d3ea4 60 T servoClamp(T value, T min, T max)
tnhnrl 52:f207567d3ea4 61 {
tnhnrl 52:f207567d3ea4 62 if(value < min) {
tnhnrl 52:f207567d3ea4 63 return min;
tnhnrl 52:f207567d3ea4 64 } else if(value > max) {
tnhnrl 52:f207567d3ea4 65 return max;
tnhnrl 52:f207567d3ea4 66 } else {
tnhnrl 52:f207567d3ea4 67 return value;
tnhnrl 52:f207567d3ea4 68 }
tnhnrl 52:f207567d3ea4 69 };
tnhnrl 52:f207567d3ea4 70
tnhnrl 52:f207567d3ea4 71 #endif