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.
Fork of Nucleo_CaitSith_Firmware by
DelayServo.cpp@4:039a7d1ce3e9, 2015-01-24 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |
