A library to control a CYS S8218 servo

Dependents:   Heiko

Committer:
Kerneels Bezuidenhout
Date:
Wed Sep 07 03:07:07 2016 +0200
Revision:
1:c42f4b73e85c
Parent:
0:23a6381d15ff
Child:
2:695c74c6d483
Initial version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kerneels Bezuidenhout 1:c42f4b73e85c 1 #include "CYS8218Controller.hpp"
Kerneels Bezuidenhout 1:c42f4b73e85c 2
Kerneels Bezuidenhout 1:c42f4b73e85c 3 CYS8218Controller::CYS8218Controller(PinName pwmPin, float initAngle) :
Kerneels Bezuidenhout 1:c42f4b73e85c 4 _servo(pwmPin)
Kerneels Bezuidenhout 1:c42f4b73e85c 5 {
Kerneels Bezuidenhout 1:c42f4b73e85c 6 _angle = initAngle;
Kerneels Bezuidenhout 1:c42f4b73e85c 7 ZEROPW = 0.0015f; //1500us default position
Kerneels Bezuidenhout 1:c42f4b73e85c 8 PW_PER_DEG = 0.0005f/45.0f; //500us -> 45deg default
Kerneels Bezuidenhout 1:c42f4b73e85c 9 _servo.period_us(5000);
Kerneels Bezuidenhout 1:c42f4b73e85c 10 SetServo();
Kerneels Bezuidenhout 1:c42f4b73e85c 11 }
Kerneels Bezuidenhout 1:c42f4b73e85c 12
Kerneels Bezuidenhout 1:c42f4b73e85c 13 void CYS8218Controller::SetServo()
Kerneels Bezuidenhout 1:c42f4b73e85c 14 {
Kerneels Bezuidenhout 1:c42f4b73e85c 15 float pw = ZEROPW+_angle*PW_PER_DEG;
Kerneels Bezuidenhout 1:c42f4b73e85c 16
Kerneels Bezuidenhout 1:c42f4b73e85c 17 pw = ( pw < MIN_PW ? MIN_PW : pw > MAX_PW ? MAX_PW : pw);
Kerneels Bezuidenhout 1:c42f4b73e85c 18
Kerneels Bezuidenhout 1:c42f4b73e85c 19 _servo.pulsewidth(pw);
Kerneels Bezuidenhout 1:c42f4b73e85c 20 }
Kerneels Bezuidenhout 1:c42f4b73e85c 21
Kerneels Bezuidenhout 1:c42f4b73e85c 22 void CYS8218Controller::SaveZero()
Kerneels Bezuidenhout 1:c42f4b73e85c 23 {
Kerneels Bezuidenhout 1:c42f4b73e85c 24 ZEROPW = (ZEROPW+_angle*PW_PER_DEG);
Kerneels Bezuidenhout 1:c42f4b73e85c 25 }
Kerneels Bezuidenhout 1:c42f4b73e85c 26
Kerneels Bezuidenhout 1:c42f4b73e85c 27 void CYS8218Controller::Calibrate(float actualAngle)
Kerneels Bezuidenhout 1:c42f4b73e85c 28 {
Kerneels Bezuidenhout 1:c42f4b73e85c 29 PW_PER_DEG = (_angle*PW_PER_DEG)/actualAngle;
Kerneels Bezuidenhout 1:c42f4b73e85c 30 }
Kerneels Bezuidenhout 1:c42f4b73e85c 31
Kerneels Bezuidenhout 1:c42f4b73e85c 32 void CYS8218Controller::Set(float angle)
Kerneels Bezuidenhout 1:c42f4b73e85c 33 {
Kerneels Bezuidenhout 1:c42f4b73e85c 34 _angle = angle;
Kerneels Bezuidenhout 1:c42f4b73e85c 35 SetServo();
Kerneels Bezuidenhout 1:c42f4b73e85c 36 }
Kerneels Bezuidenhout 1:c42f4b73e85c 37
Kerneels Bezuidenhout 1:c42f4b73e85c 38 void CYS8218Controller::Move(float relAngle)
Kerneels Bezuidenhout 1:c42f4b73e85c 39 {
Kerneels Bezuidenhout 1:c42f4b73e85c 40 _angle += relAngle;
Kerneels Bezuidenhout 1:c42f4b73e85c 41 SetServo();
Kerneels Bezuidenhout 1:c42f4b73e85c 42 }