A library to control a CYS S8218 servo

Dependents:   Heiko

CYS8218Controller.cpp

Committer:
Kerneels Bezuidenhout
Date:
2016-09-07
Revision:
1:c42f4b73e85c
Parent:
0:23a6381d15ff
Child:
2:695c74c6d483

File content as of revision 1:c42f4b73e85c:

#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);
  SetServo();
}

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();
}