A library to control a CYS S8218 servo

Dependents:   Heiko

CYS8218Controller.cpp

Committer:
Kerneels Bezuidenhout
Date:
2016-09-23
Revision:
2:695c74c6d483
Parent:
1:c42f4b73e85c
Child:
3:b0a7d93e2611

File content as of revision 2:695c74c6d483:

#include "CYS8218Controller.hpp"

CYS8218Controller::CYS8218Controller(PinName pwmPin, float initAngle) :
  _servo(pwmPin)
{
  _angle = initAngle;
  ZEROPW = 0.0015f; //1500us default position
  PW_PER_DEG = 0.0005f/45.0f; //500us -> 45deg default
  _servo.period_us(5000);

  if( initAngle != -1 )
    SetServo();
  else
    _servo.pulsewidth(0);
}

void CYS8218Controller::SetServo()
{
  float pw = ZEROPW+_angle*PW_PER_DEG;

  pw = ( pw < MIN_PW ? MIN_PW : pw > MAX_PW ? MAX_PW : pw);

  _servo.pulsewidth(pw);
}

void CYS8218Controller::SaveZero()
{
  ZEROPW = (ZEROPW+_angle*PW_PER_DEG);
}

void CYS8218Controller::Calibrate(float actualAngle)
{
  PW_PER_DEG = (_angle*PW_PER_DEG)/actualAngle;
}

void CYS8218Controller::Set(float angle)
{
  _angle = angle;
  SetServo();
}

void CYS8218Controller::Move(float relAngle)
{
  _angle += relAngle;
  SetServo();
}

void CYS8218Controller::SetZero(float angle)
{
  ZEROPW = (ZERO+angle*PW_PER_DEG);
}