A library to control a CYS S8218 servo
CYS8218Controller.cpp@2:695c74c6d483, 2016-09-23 (annotated)
- 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?
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 |
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 | } |