Yosuke Kirihata / Mbed 2 deprecated Nucleo_CaitSith_Firmware_added_delayServo

Dependencies:   mbed

Fork of Nucleo_CaitSith_Firmware by Yosuke Kirihata

Committer:
YosukeK
Date:
Sat Jan 24 17:41:21 2015 +0000
Revision:
4:039a7d1ce3e9
Parent:
3:9ac9fdf1856e
Child:
6:a3829299dfd5
????????????????

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