Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 6:8364e8639b4e, committed 2014-10-26
- Comitter:
- YosukeK
- Date:
- Sun Oct 26 05:12:20 2014 +0000
- Parent:
- 5:8223f5a154e2
- Commit message:
- Fixed bug of moveServo(): reverse angle caluculation is wrong.
Changed in this revision
--- a/DelayServo.cpp Wed Oct 15 10:21:51 2014 +0000 +++ b/DelayServo.cpp Sun Oct 26 05:12:20 2014 +0000 @@ -9,51 +9,51 @@ * コンストラクタ */ DelayServo::DelayServo(PinName pin) : ExtendedServo(pin) +//初期化リスト +,mStepAngle(DEFAULT_STEP_ANGLE) +,mCurrentAngle(0) +,mInterval(DEFAULT_INTERVAL) { - mStepAngle = DEFAULT_STEP_ANGLE; - mCurrentAngle = 0; - mInterval = DEFAULT_INTERVAL; - mTick.attach_us(this, &DelayServo::moveServo, mInterval); -} +}; /** * コンストラクタ */ DelayServo::DelayServo(PinName pin, int stepAngle) : ExtendedServo(pin) +//初期化リスト +,mStepAngle(stepAngle) +,mCurrentAngle(0) +,mInterval(DEFAULT_INTERVAL) { - mStepAngle = stepAngle; - mCurrentAngle = 0; - mInterval = DEFAULT_INTERVAL; - mTick.attach_us(this, &DelayServo::moveServo, mInterval); -} +}; /** * コンストラクタ */ DelayServo::DelayServo(PinName pin, int stepAngle, int interval) : ExtendedServo(pin) +//初期化リスト +,mStepAngle(stepAngle) +,mCurrentAngle(0) +,mInterval(interval) { - mStepAngle = stepAngle; - mCurrentAngle = 0; - mInterval = interval; - mTick.attach_us(this, &DelayServo::moveServo, mInterval); -} +}; /** * コンストラクタ */ -DelayServo::DelayServo(PinName pin, int stepAngle, int interval, - int upperLimit ,int lowerLimit, int offsetAngle, bool isReverse) - : ExtendedServo(pin, upperLimit, lowerLimit, offsetAngle, isReverse) +DelayServo::DelayServo(PinName pin, int stepAngle, int interval, + int upperLimit ,int lowerLimit, int offsetAngle, bool isReverse) + : ExtendedServo(pin, upperLimit, lowerLimit, offsetAngle, isReverse) +//初期化リスト +,mStepAngle(stepAngle) +,mCurrentAngle(0) +,mInterval(interval) { - mStepAngle = stepAngle; - mCurrentAngle = 0; - mInterval = interval; - mTick.attach_us(this, &DelayServo::moveServo, mInterval); -} +}; /** * デストラクタ @@ -65,25 +65,20 @@ /** * サーボ移動 */ -//HACK:方向はExtendedServoから取得できる? void DelayServo::moveServo(void) { //角度計算 - if (mTargetAngle - mCurrentAngle >= 0) { - //順方向 - if (mTargetAngle - mCurrentAngle > mStepAngle) { - //目標角度-現在角度が上限角度を超えるなら現在値を上限角度分移動 + if (mTargetAngle - mCurrentAngle >= 0) {//順方向 + if (mTargetAngle - mCurrentAngle > mStepAngle) {//目標角度-現在角度が上限角度を超えるなら現在値を上限角度分移動 mCurrentAngle = mCurrentAngle + mStepAngle; } else { - //上限角度以下なら現在角度は目標角度 - mCurrentAngle = mTargetAngle; + mCurrentAngle = mTargetAngle;//上限角度以下なら現在角度は目標角度 } - } else { - //逆方向 - if (mTargetAngle - mCurrentAngle < mStepAngle) { - mCurrentAngle = mCurrentAngle - mStepAngle; + } else {//逆方向 + if (mTargetAngle - mCurrentAngle < mStepAngle * -1) { + mCurrentAngle = mCurrentAngle - mStepAngle; } else { - mCurrentAngle = mTargetAngle; + mCurrentAngle = mTargetAngle; } }
--- a/ExtendedServo.cpp Wed Oct 15 10:21:51 2014 +0000 +++ b/ExtendedServo.cpp Sun Oct 26 05:12:20 2014 +0000 @@ -9,45 +9,40 @@ * コンストラクタ */ ExtendedServo::ExtendedServo(PinName pin) : PwmServo(pin) +//初期化リスト +,mOffsetAngle(0) +,mIsReverse(false) +,mUpperLimit(180) +,mLowerLimit(0) { - mOffsetAngle = 0; - mIsReverse = false; - mUpperLimit = 180; - mLowerLimit = 0; setAngle(mOffsetAngle); -} - //初期化子を使用した記述 - /*mOffsetAngle(0) - ,mIsReverse(false) - ,mUpperLimit(180) - ,mLowerLimit(0) - { - setAngle(mOffsetAngle); - };*/ +}; /** * コンストラクタ */ ExtendedServo::ExtendedServo(PinName pin, int upperLimit , int lowerLimit) : PwmServo(pin) +//初期化リスト +,mOffsetAngle(0) +,mIsReverse(false) +,mUpperLimit(upperLimit) +,mLowerLimit(lowerLimit) { - mOffsetAngle = 0; - mIsReverse = false; - mUpperLimit = upperLimit; - mLowerLimit = lowerLimit; setAngle(mOffsetAngle); -} +}; /** * コンストラクタ */ ExtendedServo::ExtendedServo(PinName pin, int upperLimit ,int lowerLimit, int offsetAngle, bool isReverse) : PwmServo(pin) +//初期化リスト +,mOffsetAngle(offsetAngle) +,mIsReverse(isReverse) +,mUpperLimit(upperLimit) +,mLowerLimit(lowerLimit) { - mOffsetAngle = offsetAngle; - mIsReverse = isReverse; - mUpperLimit = upperLimit; - mLowerLimit = lowerLimit; setAngle(mOffsetAngle); -} +}; /** * デストラクタ @@ -72,7 +67,7 @@ mIsReverse = isReverse; } -int ExtendedServo::getDirection() +bool ExtendedServo::getDirection() { return mIsReverse; }
--- a/ExtendedServo.h Wed Oct 15 10:21:51 2014 +0000 +++ b/ExtendedServo.h Sun Oct 26 05:12:20 2014 +0000 @@ -35,7 +35,7 @@ void setOffsetAngle(int angle); int getOffsetAngle(); void setDirection(bool isReverse); - int getDirection(); + bool getDirection(); void setUpperLimit(int angle); int getUpperLimit(); void setLowerLimit(int angle);
--- a/PwmServo.cpp Wed Oct 15 10:21:51 2014 +0000 +++ b/PwmServo.cpp Sun Oct 26 05:12:20 2014 +0000 @@ -3,8 +3,6 @@ /** * サーボ制御基底クラス - * Kyoto-Densou-An 2014 - * @author yishii */ /**
--- a/main.cpp Wed Oct 15 10:21:51 2014 +0000 +++ b/main.cpp Sun Oct 26 05:12:20 2014 +0000 @@ -5,12 +5,12 @@ int main() { - DelayServo b(PB_10, 10, 10000, 170, 0, 0, false);//10度刻みで50ms毎に角度を更新 + DelayServo b(PB_10, 10, 50000, 180, 0, 0, false);//10度刻みで50ms毎に角度を更新 //DelayServo b(PB_10); while(1) { - b.updateInterval(30); + //b.updateInterval(10000); b.setAngle(0); wait_ms(2000);