A library to control a CYS S8218 servo
CYS8218Controller.cpp@1:c42f4b73e85c, 2016-09-07 (annotated)
- 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?
User | Revision | Line number | New 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 | } |