サーボモーターを回すライブラリです。
Dependents: Hybrid_ServoMotor Hybrid_main_FirstEdtion
Servo.cpp@0:7ba85d855519, 2017-01-18 (annotated)
- Committer:
- Gaku0606
- Date:
- Wed Jan 18 22:09:15 2017 +0000
- Revision:
- 0:7ba85d855519
ServoLib ver 1.0.5
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Gaku0606 | 0:7ba85d855519 | 1 | #include "Servo.h" |
Gaku0606 | 0:7ba85d855519 | 2 | |
Gaku0606 | 0:7ba85d855519 | 3 | |
Gaku0606 | 0:7ba85d855519 | 4 | |
Gaku0606 | 0:7ba85d855519 | 5 | Servo::Servo(PinName pin, double maxPulse, double minPulse) : _pwm(pin){ |
Gaku0606 | 0:7ba85d855519 | 6 | _pinName = pin; |
Gaku0606 | 0:7ba85d855519 | 7 | _pwm.period(0.020);//20ms 周期 |
Gaku0606 | 0:7ba85d855519 | 8 | _maxPulse = maxPulse; |
Gaku0606 | 0:7ba85d855519 | 9 | _minPulse = minPulse; |
Gaku0606 | 0:7ba85d855519 | 10 | setAngleRange();//Max 90° min -90°に設定 |
Gaku0606 | 0:7ba85d855519 | 11 | setZeroPulse((maxPulse + minPulse)/2.0); |
Gaku0606 | 0:7ba85d855519 | 12 | write(0.0f);//初期位置に |
Gaku0606 | 0:7ba85d855519 | 13 | } |
Gaku0606 | 0:7ba85d855519 | 14 | |
Gaku0606 | 0:7ba85d855519 | 15 | void Servo::write(double angle){ |
Gaku0606 | 0:7ba85d855519 | 16 | //error check |
Gaku0606 | 0:7ba85d855519 | 17 | if(angle > _maxAngle) angle = _maxAngle; |
Gaku0606 | 0:7ba85d855519 | 18 | else if(angle < _minAngle) angle = _minAngle; |
Gaku0606 | 0:7ba85d855519 | 19 | //make pulse value |
Gaku0606 | 0:7ba85d855519 | 20 | double pulse = _zeroPulse + angle * ((_maxPulse - _zeroPulse) / 90.0); |
Gaku0606 | 0:7ba85d855519 | 21 | _pwm.pulsewidth(pulse); |
Gaku0606 | 0:7ba85d855519 | 22 | |
Gaku0606 | 0:7ba85d855519 | 23 | currentAngle = angle;//register set angle |
Gaku0606 | 0:7ba85d855519 | 24 | } |
Gaku0606 | 0:7ba85d855519 | 25 | |
Gaku0606 | 0:7ba85d855519 | 26 | double Servo::read(){ |
Gaku0606 | 0:7ba85d855519 | 27 | return currentAngle; |
Gaku0606 | 0:7ba85d855519 | 28 | } |
Gaku0606 | 0:7ba85d855519 | 29 | void Servo::setRange(double maxPulse, double minPulse){ |
Gaku0606 | 0:7ba85d855519 | 30 | _maxPulse = maxPulse; |
Gaku0606 | 0:7ba85d855519 | 31 | _minPulse = minPulse; |
Gaku0606 | 0:7ba85d855519 | 32 | } |
Gaku0606 | 0:7ba85d855519 | 33 | |
Gaku0606 | 0:7ba85d855519 | 34 | void Servo::setZeroPulse(double zeroPulse){ |
Gaku0606 | 0:7ba85d855519 | 35 | _zeroPulse = zeroPulse; |
Gaku0606 | 0:7ba85d855519 | 36 | } |
Gaku0606 | 0:7ba85d855519 | 37 | |
Gaku0606 | 0:7ba85d855519 | 38 | void Servo::setAngleRange(double maxAngle, double minAngle){ |
Gaku0606 | 0:7ba85d855519 | 39 | _maxAngle = maxAngle; |
Gaku0606 | 0:7ba85d855519 | 40 | _minAngle = minAngle; |
Gaku0606 | 0:7ba85d855519 | 41 | } |
Gaku0606 | 0:7ba85d855519 | 42 | |
Gaku0606 | 0:7ba85d855519 | 43 | Servo& Servo::operator=(double dValue){ |
Gaku0606 | 0:7ba85d855519 | 44 | write(dValue); |
Gaku0606 | 0:7ba85d855519 | 45 | return *this; |
Gaku0606 | 0:7ba85d855519 | 46 | } |
Gaku0606 | 0:7ba85d855519 | 47 | |
Gaku0606 | 0:7ba85d855519 | 48 | double Servo::operator()(void){ |
Gaku0606 | 0:7ba85d855519 | 49 | return read(); |
Gaku0606 | 0:7ba85d855519 | 50 | } |