Library to control servos
Servo.cpp
- Committer:
- Cornelius Bezuidenhout
- Date:
- 2017-10-21
- Revision:
- 2:738b08cb03ea
- Parent:
- 1:940dffb14ff6
- Child:
- 3:37e6c7b8fd2d
File content as of revision 2:738b08cb03ea:
#include "Servo.hpp" Servo::Servo(PinName pwmPin, float zeroAngle, float minAngle, float maxAngle) : _servo(pwmPin) { PW_PER_DEG = 0.0005f/45.0f; ZEROPW = 0.0014f; _minAngle = minAngle; _maxAngle = maxAngle; _angle = zeroAngle; _servo.period_us(5000); _servo.pulsewidth(0); SaveZero(); } void Servo::SetServo() { float pw = ZEROPW+_angle*PW_PER_DEG; pw = ( pw < MIN_PW ? MIN_PW : pw > MAX_PW ? MAX_PW : pw); _servo.pulsewidth(pw); } void Servo::SaveZero() { ZEROPW = (ZEROPW+_angle*PW_PER_DEG); } void Servo::Calibrate(float actualAngle) { PW_PER_DEG = (_angle*PW_PER_DEG)/actualAngle; } void Servo::Set(float angle) { if( _angle < _minAngle) _angle = _minAngle; else if( _angle > _maxAngle ) _angle = _maxAngle; else _angle = angle; SetServo(); } void Servo::Move(float relAngle) { float newAngle = _angle + relAngle; if( newAngle < _minAngle ) _angle = _minAngle; else if( newAngle > _maxAngle ) _angle = _maxAngle; else _angle = newAngle; SetServo(); } void Servo::SetZero(float angle) { ZEROPW = (ZEROPW+angle*PW_PER_DEG); } void Servo::Off() { _servo.pulsewidth(0); } float Servo::GetAngle() { return _angle; } void Servo::GotoMin() { _angle = _minAngle; SetServo(); } void Servo::GotoMax() { _angle = _maxAngle; SetServo(); }