サーボモーターを回すライブラリです。

Dependents:   Hybrid_ServoMotor Hybrid_main_FirstEdtion

Committer:
Gaku0606
Date:
Tue Jan 24 22:34:57 2017 +0000
Revision:
1:ed0ec5b8516c
Parent:
0:7ba85d855519
?????????????

Who changed what in which revision?

UserRevisionLine numberNew 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 }