Yosuke Kirihata / Mbed 2 deprecated Nucleo_CaitSith_Firmware_added_delayServo

Dependencies:   mbed

Fork of Nucleo_CaitSith_Firmware by Yosuke Kirihata

Committer:
YosukeK
Date:
Sat Feb 28 12:02:38 2015 +0000
Revision:
6:a3829299dfd5
Parent:
4:039a7d1ce3e9
Roomba??

Who changed what in which revision?

UserRevisionLine numberNew contents of line
YosukeK 3:9ac9fdf1856e 1 #include <mbed.h>
YosukeK 6:a3829299dfd5 2 #include "DelayServo.h"
YosukeK 6:a3829299dfd5 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 3:9ac9fdf1856e 71 //角度計算
YosukeK 3:9ac9fdf1856e 72 if (mTargetAngle - mCurrentAngle >= 0) {//順方向
YosukeK 3:9ac9fdf1856e 73 if (mTargetAngle - mCurrentAngle > mStepAngle) {//目標角度-現在角度が上限角度を超えるなら現在値を上限角度分移動
YosukeK 3:9ac9fdf1856e 74 mCurrentAngle = mCurrentAngle + mStepAngle;
YosukeK 3:9ac9fdf1856e 75 } else {
YosukeK 3:9ac9fdf1856e 76 mCurrentAngle = mTargetAngle;//上限角度以下なら現在角度は目標角度
YosukeK 3:9ac9fdf1856e 77 }
YosukeK 3:9ac9fdf1856e 78 } else {//逆方向
YosukeK 3:9ac9fdf1856e 79 if (mTargetAngle - mCurrentAngle < mStepAngle * -1) {
YosukeK 3:9ac9fdf1856e 80 mCurrentAngle = mCurrentAngle - mStepAngle;// + (mStepAngle * -1)
YosukeK 3:9ac9fdf1856e 81 } else {
YosukeK 3:9ac9fdf1856e 82 mCurrentAngle = mTargetAngle;
YosukeK 3:9ac9fdf1856e 83 }
YosukeK 3:9ac9fdf1856e 84 }
YosukeK 3:9ac9fdf1856e 85
YosukeK 3:9ac9fdf1856e 86 ExtendedServo::setAngle(mCurrentAngle);
YosukeK 3:9ac9fdf1856e 87 }
YosukeK 3:9ac9fdf1856e 88
YosukeK 3:9ac9fdf1856e 89 /**
YosukeK 3:9ac9fdf1856e 90 * 更新周期再設定
YosukeK 3:9ac9fdf1856e 91 */
YosukeK 3:9ac9fdf1856e 92 void DelayServo::updateInterval(int interval)
YosukeK 3:9ac9fdf1856e 93 {
YosukeK 4:039a7d1ce3e9 94 //mTick.detach();
YosukeK 3:9ac9fdf1856e 95 mInterval = interval;
YosukeK 4:039a7d1ce3e9 96 //mTick.attach_us(this, &DelayServo::moveServo, mInterval);
YosukeK 3:9ac9fdf1856e 97 }
YosukeK 3:9ac9fdf1856e 98
YosukeK 3:9ac9fdf1856e 99 /**
YosukeK 3:9ac9fdf1856e 100 * 角度設定
YosukeK 3:9ac9fdf1856e 101 */
YosukeK 3:9ac9fdf1856e 102 void DelayServo::setAngle(int angle)
YosukeK 3:9ac9fdf1856e 103 {
YosukeK 3:9ac9fdf1856e 104 mTargetAngle = angle;
YosukeK 3:9ac9fdf1856e 105 moveServo();
YosukeK 3:9ac9fdf1856e 106 }