A library to control a CYS S8218 servo

Dependents:   Heiko

Committer:
Kerneels Bezuidenhout
Date:
Fri Sep 23 03:01:18 2016 +0200
Revision:
2:695c74c6d483
Parent:
1:c42f4b73e85c
Child:
3:b0a7d93e2611
Added SetZero function

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 2:695c74c6d483 10
Kerneels Bezuidenhout 2:695c74c6d483 11 if( initAngle != -1 )
Kerneels Bezuidenhout 2:695c74c6d483 12 SetServo();
Kerneels Bezuidenhout 2:695c74c6d483 13 else
Kerneels Bezuidenhout 2:695c74c6d483 14 _servo.pulsewidth(0);
Kerneels Bezuidenhout 1:c42f4b73e85c 15 }
Kerneels Bezuidenhout 1:c42f4b73e85c 16
Kerneels Bezuidenhout 1:c42f4b73e85c 17 void CYS8218Controller::SetServo()
Kerneels Bezuidenhout 1:c42f4b73e85c 18 {
Kerneels Bezuidenhout 1:c42f4b73e85c 19 float pw = ZEROPW+_angle*PW_PER_DEG;
Kerneels Bezuidenhout 1:c42f4b73e85c 20
Kerneels Bezuidenhout 1:c42f4b73e85c 21 pw = ( pw < MIN_PW ? MIN_PW : pw > MAX_PW ? MAX_PW : pw);
Kerneels Bezuidenhout 1:c42f4b73e85c 22
Kerneels Bezuidenhout 1:c42f4b73e85c 23 _servo.pulsewidth(pw);
Kerneels Bezuidenhout 1:c42f4b73e85c 24 }
Kerneels Bezuidenhout 1:c42f4b73e85c 25
Kerneels Bezuidenhout 1:c42f4b73e85c 26 void CYS8218Controller::SaveZero()
Kerneels Bezuidenhout 1:c42f4b73e85c 27 {
Kerneels Bezuidenhout 1:c42f4b73e85c 28 ZEROPW = (ZEROPW+_angle*PW_PER_DEG);
Kerneels Bezuidenhout 1:c42f4b73e85c 29 }
Kerneels Bezuidenhout 1:c42f4b73e85c 30
Kerneels Bezuidenhout 1:c42f4b73e85c 31 void CYS8218Controller::Calibrate(float actualAngle)
Kerneels Bezuidenhout 1:c42f4b73e85c 32 {
Kerneels Bezuidenhout 1:c42f4b73e85c 33 PW_PER_DEG = (_angle*PW_PER_DEG)/actualAngle;
Kerneels Bezuidenhout 1:c42f4b73e85c 34 }
Kerneels Bezuidenhout 1:c42f4b73e85c 35
Kerneels Bezuidenhout 1:c42f4b73e85c 36 void CYS8218Controller::Set(float angle)
Kerneels Bezuidenhout 1:c42f4b73e85c 37 {
Kerneels Bezuidenhout 1:c42f4b73e85c 38 _angle = angle;
Kerneels Bezuidenhout 1:c42f4b73e85c 39 SetServo();
Kerneels Bezuidenhout 1:c42f4b73e85c 40 }
Kerneels Bezuidenhout 1:c42f4b73e85c 41
Kerneels Bezuidenhout 1:c42f4b73e85c 42 void CYS8218Controller::Move(float relAngle)
Kerneels Bezuidenhout 1:c42f4b73e85c 43 {
Kerneels Bezuidenhout 1:c42f4b73e85c 44 _angle += relAngle;
Kerneels Bezuidenhout 1:c42f4b73e85c 45 SetServo();
Kerneels Bezuidenhout 1:c42f4b73e85c 46 }
Kerneels Bezuidenhout 2:695c74c6d483 47
Kerneels Bezuidenhout 2:695c74c6d483 48 void CYS8218Controller::SetZero(float angle)
Kerneels Bezuidenhout 2:695c74c6d483 49 {
Kerneels Bezuidenhout 2:695c74c6d483 50 ZEROPW = (ZERO+angle*PW_PER_DEG);
Kerneels Bezuidenhout 2:695c74c6d483 51 }