speedservo

Dependents:   nhk_auto_06

speedservo.cpp

Committer:
kenken0721
Date:
2019-01-19
Revision:
1:331042d0fbff
Parent:
0:b583163ca5b3

File content as of revision 1:331042d0fbff:

#include "speedservo.h"
#include "mbed.h"

Servo::Servo(PinName Pin) : ServoPin(Pin) {}

int Servo:: SpeedConvert (int _speed)
{
    Speed.detach();
    if (_speed > 50)
        _speed = 50;
    else if (_speed < 1)
        _speed =1;
    speed = 10000/_speed;
    Speed.attach_us(this, &Servo::Update, speed);
    return speed;

}

void Servo::SetPosition(int Pos,int _speed)             //servo go to position
{
    SpeedConvert(_speed);
    NewPosition = Pos;
}

void Servo::Update()
{
    if(NewPosition != CurrentPosition) {

        if(NewPosition > CurrentPosition) {
            CurrentPosition++;
            Position =  CurrentPosition;

        } else  {
            CurrentPosition--;
            Position = CurrentPosition;
        }
    }
    Position = CurrentPosition;
}


void Servo::StartPulse()
{
    ServoPin = 1;

    PulseStop.attach_us(this, &Servo::EndPulse, Position);
}

void Servo::EndPulse()
{
    ServoPin = 0;
}

void Servo::Enable(int StartPos, int RefreshRate, int _speed)
{
    SpeedConvert(_speed);
    Period = (1000000/RefreshRate);                            //converts from HZ to period in  us
    Position = StartPos;
    NewPosition = StartPos;
    CurrentPosition = StartPos;                              //sets CurrentPosition to  StartPos value
    Pulse.attach_us(this, &Servo::StartPulse, Period);       //starts servo period Ticker r
    //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
    SpeedConvert(_speed);
}

void Servo::Disable()           //turns off Ticker Pulse
{
    Pulse.detach();
}