Yosuke Kirihata / Mbed 2 deprecated Nucleo_CaitSith_Firmware_added_delayServo

Dependencies:   mbed

Fork of Nucleo_CaitSith_Firmware by Yosuke Kirihata

Committer:
YosukeK
Date:
Sat Nov 08 02:45:59 2014 +0000
Revision:
3:9ac9fdf1856e
Child:
4:039a7d1ce3e9
Added DelayServo class.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
YosukeK 3:9ac9fdf1856e 1 #include <mbed.h>
YosukeK 3:9ac9fdf1856e 2 #include <DelayServo.h>
YosukeK 3:9ac9fdf1856e 3
YosukeK 3:9ac9fdf1856e 4 /**
YosukeK 3:9ac9fdf1856e 5 * 遅延サーボクラス
YosukeK 3:9ac9fdf1856e 6 */
YosukeK 3:9ac9fdf1856e 7
YosukeK 3:9ac9fdf1856e 8 /**
YosukeK 3:9ac9fdf1856e 9 * コンストラクタ
YosukeK 3:9ac9fdf1856e 10 */
YosukeK 3:9ac9fdf1856e 11 DelayServo::DelayServo(PinName pin) : ExtendedServo(pin)
YosukeK 3:9ac9fdf1856e 12 //初期化リスト
YosukeK 3:9ac9fdf1856e 13 ,mStepAngle(DEFAULT_STEP_ANGLE)
YosukeK 3:9ac9fdf1856e 14 ,mCurrentAngle(0)
YosukeK 3:9ac9fdf1856e 15 ,mInterval(DEFAULT_INTERVAL)
YosukeK 3:9ac9fdf1856e 16 {
YosukeK 3:9ac9fdf1856e 17 mTick.attach_us(this, &DelayServo::moveServo, mInterval);
YosukeK 3:9ac9fdf1856e 18 };
YosukeK 3:9ac9fdf1856e 19
YosukeK 3:9ac9fdf1856e 20 /**
YosukeK 3:9ac9fdf1856e 21 * コンストラクタ
YosukeK 3:9ac9fdf1856e 22 */
YosukeK 3:9ac9fdf1856e 23 DelayServo::DelayServo(PinName pin, int stepAngle) : ExtendedServo(pin)
YosukeK 3:9ac9fdf1856e 24 //初期化リスト
YosukeK 3:9ac9fdf1856e 25 ,mStepAngle(stepAngle)
YosukeK 3:9ac9fdf1856e 26 ,mCurrentAngle(0)
YosukeK 3:9ac9fdf1856e 27 ,mInterval(DEFAULT_INTERVAL)
YosukeK 3:9ac9fdf1856e 28 {
YosukeK 3:9ac9fdf1856e 29 mTick.attach_us(this, &DelayServo::moveServo, mInterval);
YosukeK 3:9ac9fdf1856e 30 };
YosukeK 3:9ac9fdf1856e 31
YosukeK 3:9ac9fdf1856e 32 /**
YosukeK 3:9ac9fdf1856e 33 * コンストラクタ
YosukeK 3:9ac9fdf1856e 34 */
YosukeK 3:9ac9fdf1856e 35 DelayServo::DelayServo(PinName pin, int stepAngle, int interval) : ExtendedServo(pin)
YosukeK 3:9ac9fdf1856e 36 //初期化リスト
YosukeK 3:9ac9fdf1856e 37 ,mStepAngle(stepAngle)
YosukeK 3:9ac9fdf1856e 38 ,mCurrentAngle(0)
YosukeK 3:9ac9fdf1856e 39 ,mInterval(interval)
YosukeK 3:9ac9fdf1856e 40 {
YosukeK 3:9ac9fdf1856e 41 mTick.attach_us(this, &DelayServo::moveServo, mInterval);
YosukeK 3:9ac9fdf1856e 42 };
YosukeK 3:9ac9fdf1856e 43
YosukeK 3:9ac9fdf1856e 44 /**
YosukeK 3:9ac9fdf1856e 45 * コンストラクタ
YosukeK 3:9ac9fdf1856e 46 */
YosukeK 3:9ac9fdf1856e 47 DelayServo::DelayServo(PinName pin, int stepAngle, int interval,
YosukeK 3:9ac9fdf1856e 48 int upperLimit ,int lowerLimit, int offsetAngle, bool isReverse)
YosukeK 3:9ac9fdf1856e 49 : ExtendedServo(pin, upperLimit, lowerLimit, offsetAngle, isReverse)
YosukeK 3:9ac9fdf1856e 50 //初期化リスト
YosukeK 3:9ac9fdf1856e 51 ,mStepAngle(stepAngle)
YosukeK 3:9ac9fdf1856e 52 ,mCurrentAngle(0)
YosukeK 3:9ac9fdf1856e 53 ,mInterval(interval)
YosukeK 3:9ac9fdf1856e 54 {
YosukeK 3:9ac9fdf1856e 55 mTick.attach_us(this, &DelayServo::moveServo, mInterval);
YosukeK 3:9ac9fdf1856e 56 };
YosukeK 3:9ac9fdf1856e 57
YosukeK 3:9ac9fdf1856e 58 /**
YosukeK 3:9ac9fdf1856e 59 * デストラクタ
YosukeK 3:9ac9fdf1856e 60 */
YosukeK 3:9ac9fdf1856e 61 DelayServo::~DelayServo() {
YosukeK 3:9ac9fdf1856e 62 mTick.detach();
YosukeK 3:9ac9fdf1856e 63 }
YosukeK 3:9ac9fdf1856e 64
YosukeK 3:9ac9fdf1856e 65 /**
YosukeK 3:9ac9fdf1856e 66 * サーボ移動
YosukeK 3:9ac9fdf1856e 67 */
YosukeK 3:9ac9fdf1856e 68 void DelayServo::moveServo(void)
YosukeK 3:9ac9fdf1856e 69 {
YosukeK 3:9ac9fdf1856e 70 //角度計算
YosukeK 3:9ac9fdf1856e 71 if (mTargetAngle - mCurrentAngle >= 0) {//順方向
YosukeK 3:9ac9fdf1856e 72 if (mTargetAngle - mCurrentAngle > mStepAngle) {//目標角度-現在角度が上限角度を超えるなら現在値を上限角度分移動
YosukeK 3:9ac9fdf1856e 73 mCurrentAngle = mCurrentAngle + mStepAngle;
YosukeK 3:9ac9fdf1856e 74 } else {
YosukeK 3:9ac9fdf1856e 75 mCurrentAngle = mTargetAngle;//上限角度以下なら現在角度は目標角度
YosukeK 3:9ac9fdf1856e 76 }
YosukeK 3:9ac9fdf1856e 77 } else {//逆方向
YosukeK 3:9ac9fdf1856e 78 if (mTargetAngle - mCurrentAngle < mStepAngle * -1) {
YosukeK 3:9ac9fdf1856e 79 mCurrentAngle = mCurrentAngle - mStepAngle;// + (mStepAngle * -1)
YosukeK 3:9ac9fdf1856e 80 } else {
YosukeK 3:9ac9fdf1856e 81 mCurrentAngle = mTargetAngle;
YosukeK 3:9ac9fdf1856e 82 }
YosukeK 3:9ac9fdf1856e 83 }
YosukeK 3:9ac9fdf1856e 84
YosukeK 3:9ac9fdf1856e 85 ExtendedServo::setAngle(mCurrentAngle);
YosukeK 3:9ac9fdf1856e 86 }
YosukeK 3:9ac9fdf1856e 87
YosukeK 3:9ac9fdf1856e 88 /**
YosukeK 3:9ac9fdf1856e 89 * 更新周期再設定
YosukeK 3:9ac9fdf1856e 90 */
YosukeK 3:9ac9fdf1856e 91 void DelayServo::updateInterval(int interval)
YosukeK 3:9ac9fdf1856e 92 {
YosukeK 3:9ac9fdf1856e 93 mTick.detach();
YosukeK 3:9ac9fdf1856e 94 mInterval = interval;
YosukeK 3:9ac9fdf1856e 95 mTick.attach_us(this, &DelayServo::moveServo, mInterval);
YosukeK 3:9ac9fdf1856e 96 }
YosukeK 3:9ac9fdf1856e 97
YosukeK 3:9ac9fdf1856e 98 /**
YosukeK 3:9ac9fdf1856e 99 * 角度設定
YosukeK 3:9ac9fdf1856e 100 */
YosukeK 3:9ac9fdf1856e 101 void DelayServo::setAngle(int angle)
YosukeK 3:9ac9fdf1856e 102 {
YosukeK 3:9ac9fdf1856e 103 mTargetAngle = angle;
YosukeK 3:9ac9fdf1856e 104 moveServo();
YosukeK 3:9ac9fdf1856e 105 }