Made changes to individually control servo speeds

Dependents:   VariableSpeedServo

Fork of Servo by Jasper Denkers

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?

UserRevisionLine numberNew 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 }