Made changes to individually control servo speeds
Dependents: VariableSpeedServo
Fork of Servo by
Servo.cpp@4:8bdb46e629b9, 2015-10-14 (annotated)
- Committer:
- sierrasmith71
- Date:
- Wed Oct 14 02:10:23 2015 +0000
- Revision:
- 4:8bdb46e629b9
- Parent:
- 3:774dd54867f2
Fixed NewPostion Variable initialization in Enable in servo.cpp
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jdenkers | 0:30b972d2dcec | 1 | #include "Servo.h" |
jdenkers | 0:30b972d2dcec | 2 | #include "mbed.h" |
jdenkers | 0:30b972d2dcec | 3 | |
sierrasmith71 | 3:774dd54867f2 | 4 | Servo::Servo(PinName Pin) : ServoPin(Pin) {} |
sierrasmith71 | 3:774dd54867f2 | 5 | |
sierrasmith71 | 3:774dd54867f2 | 6 | int Servo:: SpeedConvert (int _speed) |
sierrasmith71 | 3:774dd54867f2 | 7 | { |
sierrasmith71 | 3:774dd54867f2 | 8 | |
sierrasmith71 | 2:466f005a4dd5 | 9 | if (_speed > 50) |
sierrasmith71 | 3:774dd54867f2 | 10 | _speed = 50; |
sierrasmith71 | 2:466f005a4dd5 | 11 | else if (_speed < 1) |
sierrasmith71 | 3:774dd54867f2 | 12 | _speed =1; |
sierrasmith71 | 3:774dd54867f2 | 13 | speed = 10000/_speed; |
sierrasmith71 | 2:466f005a4dd5 | 14 | return speed; |
sierrasmith71 | 3:774dd54867f2 | 15 | |
sierrasmith71 | 3:774dd54867f2 | 16 | } |
jdenkers | 0:30b972d2dcec | 17 | |
sierrasmith71 | 3:774dd54867f2 | 18 | void Servo::SetPosition(int Pos) //servo go to position |
sierrasmith71 | 3:774dd54867f2 | 19 | { |
sierrasmith71 | 3:774dd54867f2 | 20 | NewPosition = Pos; |
sierrasmith71 | 3:774dd54867f2 | 21 | } |
sierrasmith71 | 3:774dd54867f2 | 22 | |
sierrasmith71 | 2:466f005a4dd5 | 23 | void Servo::Update() |
sierrasmith71 | 2:466f005a4dd5 | 24 | { |
sierrasmith71 | 3:774dd54867f2 | 25 | if(NewPosition != CurrentPosition) { |
sierrasmith71 | 2:466f005a4dd5 | 26 | |
sierrasmith71 | 2:466f005a4dd5 | 27 | if(NewPosition > CurrentPosition) { |
sierrasmith71 | 2:466f005a4dd5 | 28 | CurrentPosition++; |
sierrasmith71 | 2:466f005a4dd5 | 29 | Position = CurrentPosition; |
sierrasmith71 | 3:774dd54867f2 | 30 | |
sierrasmith71 | 3:774dd54867f2 | 31 | } else { |
sierrasmith71 | 2:466f005a4dd5 | 32 | CurrentPosition--; |
sierrasmith71 | 2:466f005a4dd5 | 33 | Position = CurrentPosition; |
sierrasmith71 | 2:466f005a4dd5 | 34 | } |
sierrasmith71 | 2:466f005a4dd5 | 35 | } |
sierrasmith71 | 2:466f005a4dd5 | 36 | Position = CurrentPosition; |
sierrasmith71 | 3:774dd54867f2 | 37 | } |
sierrasmith71 | 2:466f005a4dd5 | 38 | |
sierrasmith71 | 3:774dd54867f2 | 39 | |
sierrasmith71 | 3:774dd54867f2 | 40 | void Servo::StartPulse() |
sierrasmith71 | 3:774dd54867f2 | 41 | { |
sierrasmith71 | 3:774dd54867f2 | 42 | ServoPin = 1; |
jdenkers | 0:30b972d2dcec | 43 | |
sierrasmith71 | 3:774dd54867f2 | 44 | PulseStop.attach_us(this, &Servo::EndPulse, Position); |
sierrasmith71 | 3:774dd54867f2 | 45 | } |
sierrasmith71 | 3:774dd54867f2 | 46 | |
sierrasmith71 | 3:774dd54867f2 | 47 | void Servo::EndPulse() |
sierrasmith71 | 3:774dd54867f2 | 48 | { |
sierrasmith71 | 3:774dd54867f2 | 49 | ServoPin = 0; |
sierrasmith71 | 3:774dd54867f2 | 50 | } |
jdenkers | 0:30b972d2dcec | 51 | |
sierrasmith71 | 3:774dd54867f2 | 52 | void Servo::Enable(int StartPos, int RefreshRate, int _speed) |
sierrasmith71 | 3:774dd54867f2 | 53 | { |
sierrasmith71 | 3:774dd54867f2 | 54 | SpeedConvert(_speed); |
sierrasmith71 | 3:774dd54867f2 | 55 | Period = (1000000/RefreshRate); //converts from HZ to period in us |
sierrasmith71 | 3:774dd54867f2 | 56 | Position = StartPos; |
sierrasmith71 | 4:8bdb46e629b9 | 57 | NewPosition = StartPos; |
sierrasmith71 | 3:774dd54867f2 | 58 | CurrentPosition = StartPos; //sets CurrentPosition to StartPos value |
sierrasmith71 | 3:774dd54867f2 | 59 | Pulse.attach_us(this, &Servo::StartPulse, Period); //starts servo period Ticker r |
sierrasmith71 | 3:774dd54867f2 | 60 | Speed.attach_us(this, &Servo::Update, speed); //starts servo Speed Ticker speed of servo update pulse width steps in us, slow =100000 100ms per step |
sierrasmith71 | 3:774dd54867f2 | 61 | } |
jdenkers | 0:30b972d2dcec | 62 | |
sierrasmith71 | 3:774dd54867f2 | 63 | void Servo::Disable() //turns off Ticker Pulse |
sierrasmith71 | 3:774dd54867f2 | 64 | { |
sierrasmith71 | 3:774dd54867f2 | 65 | Pulse.detach(); |
sierrasmith71 | 3:774dd54867f2 | 66 | } |