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

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 #ifndef SERVO_H_
Gaku0606 0:7ba85d855519 2 #define SERVO_H_
Gaku0606 0:7ba85d855519 3 #include "mbed.h"
Gaku0606 0:7ba85d855519 4
Gaku0606 0:7ba85d855519 5 /**
Gaku0606 0:7ba85d855519 6 * @author Matsumoto Gaku
Gaku0606 0:7ba85d855519 7 * @note サーボモーターを回すライブラリです。0~180度のやつを対象としています。
Gaku0606 0:7ba85d855519 8 */
Gaku0606 0:7ba85d855519 9 class Servo{
Gaku0606 0:7ba85d855519 10
Gaku0606 0:7ba85d855519 11 public:
Gaku0606 0:7ba85d855519 12 /**
Gaku0606 1:ed0ec5b8516c 13 @param _pin pin's name
Gaku0606 1:ed0ec5b8516c 14 @param _maxPulse Max pulse width in seconds
Gaku0606 1:ed0ec5b8516c 15 @param _minPulse min pulse width in seconds
Gaku0606 0:7ba85d855519 16 */
Gaku0606 0:7ba85d855519 17 Servo(PinName pin, double maxPulse = 0.00245f, double minPulse = 0.00065f);
Gaku0606 0:7ba85d855519 18
Gaku0606 0:7ba85d855519 19 /**
Gaku0606 1:ed0ec5b8516c 20 @bref rotate servo motor's horn set angle
Gaku0606 1:ed0ec5b8516c 21 @param _angle[double] Servo position in degree
Gaku0606 0:7ba85d855519 22 */
Gaku0606 0:7ba85d855519 23 void write(double angle);
Gaku0606 0:7ba85d855519 24
Gaku0606 0:7ba85d855519 25 /**
Gaku0606 1:ed0ec5b8516c 26 @bref read current servo position
Gaku0606 1:ed0ec5b8516c 27 @param [double] Return angle in degree
Gaku0606 0:7ba85d855519 28 */
Gaku0606 0:7ba85d855519 29 double read();
Gaku0606 0:7ba85d855519 30
Gaku0606 0:7ba85d855519 31 /**
Gaku0606 1:ed0ec5b8516c 32 @bref Set pulse width in max and min
Gaku0606 1:ed0ec5b8516c 33 @param maxPulse [double] Max pulse width in seconds
Gaku0606 1:ed0ec5b8516c 34 @param minPulse [double] min pulse width in seconds
Gaku0606 0:7ba85d855519 35 */
Gaku0606 0:7ba85d855519 36 void setRange(double maxPulse, double minPulse);
Gaku0606 0:7ba85d855519 37
Gaku0606 0:7ba85d855519 38 /**
Gaku0606 1:ed0ec5b8516c 39 @bref Set pulse width in zero [degree]
Gaku0606 1:ed0ec5b8516c 40 @param zeroPulse [double] pulse width in zero position
Gaku0606 0:7ba85d855519 41 */
Gaku0606 0:7ba85d855519 42 void setZeroPulse(double zeroPulse = 0.00160f);
Gaku0606 0:7ba85d855519 43
Gaku0606 0:7ba85d855519 44 /**
Gaku0606 1:ed0ec5b8516c 45 @bref Set never over angle
Gaku0606 1:ed0ec5b8516c 46 @param maxAngle [double] max servo position
Gaku0606 1:ed0ec5b8516c 47 @param minAngle [double] min servo position
Gaku0606 1:ed0ec5b8516c 48 @note もし90,0と設定すると,絶対に0°から90°の範囲から出なくなります
Gaku0606 0:7ba85d855519 49 */
Gaku0606 0:7ba85d855519 50 void setAngleRange(double maxAngle = 90.0f, double minAngle = -90.0f);
Gaku0606 0:7ba85d855519 51
Gaku0606 0:7ba85d855519 52 /**
Gaku0606 1:ed0ec5b8516c 53 @bref use '=' operater, you can write()
Gaku0606 1:ed0ec5b8516c 54 @param dValue [double] angle in degree
Gaku0606 0:7ba85d855519 55 */
Gaku0606 0:7ba85d855519 56 Servo& operator= (double dValue);
Gaku0606 0:7ba85d855519 57
Gaku0606 0:7ba85d855519 58 /**
Gaku0606 1:ed0ec5b8516c 59 @bref Return currnet angle, so the same of read()
Gaku0606 0:7ba85d855519 60 */
Gaku0606 0:7ba85d855519 61 double operator()(void);
Gaku0606 0:7ba85d855519 62
Gaku0606 0:7ba85d855519 63 private:
Gaku0606 0:7ba85d855519 64
Gaku0606 0:7ba85d855519 65 PwmOut _pwm;
Gaku0606 0:7ba85d855519 66 double currentAngle;
Gaku0606 0:7ba85d855519 67 double _maxPulse;
Gaku0606 0:7ba85d855519 68 double _minPulse;
Gaku0606 0:7ba85d855519 69 PinName _pinName;
Gaku0606 0:7ba85d855519 70 double _maxAngle;
Gaku0606 0:7ba85d855519 71 double _minAngle;
Gaku0606 0:7ba85d855519 72 double _zeroPulse;
Gaku0606 0:7ba85d855519 73 };
Gaku0606 0:7ba85d855519 74
Gaku0606 0:7ba85d855519 75 #endif