Pulse Width Modulation RC Servomotor Library compatible with classic and extended models. Models limit are customizable
Dependents: FRC_2018 0hackton_08_06_18 0hackton_08_06_18_publish Kenya_2019 ... more
Diff: RC_Servo.cpp
- Revision:
- 7:014d36c33b73
- Parent:
- 6:cf65fc8b0de1
--- a/RC_Servo.cpp Tue Jun 05 07:25:09 2018 +0000 +++ b/RC_Servo.cpp Tue Jun 05 12:22:17 2018 +0000 @@ -2,7 +2,6 @@ RC_Servo::RC_Servo(PinName PWM, int _extended) : _RCpwm(PWM) { - _tickRC.attach(callback(this,&RC_Servo::generatePwm),0.02); if (_extended) { _RCpMin = 400; _RCpMax = 2400; @@ -12,24 +11,6 @@ } } -void RC_Servo::generatePwm (void) -{ - - static int output = 0; - static long pulseWidthTime = 0; - - if (pulseWidthTime == 0) pulseWidthTime = _RCpMin; - _tickRC.detach(); - output = !output; - _RCpwm = output; - - if (output == 1) _tickRC.attach (callback(this,&RC_Servo::generatePwm), pulseWidthTime); - else { - _tickRC.attach (callback(this,&RC_Servo::generatePwm), 20000-pulseWidthTime); - pulseWidthTime = RCdelay; - } -} - int RC_Servo::setLimits (int Tmin, int Tmax) { if ((Tmin > 400) && (Tmin < Tmax)) _RCpMin = Tmin; @@ -39,13 +20,13 @@ return 0; } -void RC_Servo::write (float position) +void RC_Servo::write (double position) { if ((position >= 0) && (position <= 1)) - RCdelay = _RCpMin + (long)((_RCpMax - _RCpMin) * position); + _RCpwm.pulsewidth_us (_RCpMin + (long)((_RCpMax - _RCpMin) * position)); } -RC_Servo& RC_Servo::operator= (float position) +RC_Servo& RC_Servo::operator= (double position) { write (position); return *this;