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.
DelayServo.cpp
- Committer:
- YosukeK
- Date:
- 2014-10-26
- Revision:
- 6:8364e8639b4e
- Parent:
- 5:8223f5a154e2
File content as of revision 6:8364e8639b4e:
#include <mbed.h> #include <DelayServo.h> /** * 遅延サーボクラス */ /** * コンストラクタ */ DelayServo::DelayServo(PinName pin) : ExtendedServo(pin) //初期化リスト ,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) { mTick.attach_us(this, &DelayServo::moveServo, mInterval); }; /** * コンストラクタ */ DelayServo::DelayServo(PinName pin, int stepAngle, int interval) : ExtendedServo(pin) //初期化リスト ,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) //初期化リスト ,mStepAngle(stepAngle) ,mCurrentAngle(0) ,mInterval(interval) { mTick.attach_us(this, &DelayServo::moveServo, mInterval); }; /** * デストラクタ */ DelayServo::~DelayServo() { mTick.detach(); } /** * サーボ移動 */ void DelayServo::moveServo(void) { //角度計算 if (mTargetAngle - mCurrentAngle >= 0) {//順方向 if (mTargetAngle - mCurrentAngle > mStepAngle) {//目標角度-現在角度が上限角度を超えるなら現在値を上限角度分移動 mCurrentAngle = mCurrentAngle + mStepAngle; } else { mCurrentAngle = mTargetAngle;//上限角度以下なら現在角度は目標角度 } } else {//逆方向 if (mTargetAngle - mCurrentAngle < mStepAngle * -1) { mCurrentAngle = mCurrentAngle - mStepAngle; } else { mCurrentAngle = mTargetAngle; } } ExtendedServo::setAngle(mCurrentAngle); } /** * 更新周期再設定 */ void DelayServo::updateInterval(int interval) { mTick.detach(); mInterval = interval; mTick.attach_us(this, &DelayServo::moveServo, mInterval); } /** * 角度設定 */ void DelayServo::setAngle(int angle) { mTargetAngle = angle; moveServo(); }