Yosuke Kirihata / Mbed 2 deprecated Nucleo_extended_servo

Dependencies:   mbed

Files at this revision

API Documentation at this revision

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

DelayServo.cpp Show annotated file Show diff for this revision Revisions of this file
ExtendedServo.cpp Show annotated file Show diff for this revision Revisions of this file
ExtendedServo.h Show annotated file Show diff for this revision Revisions of this file
PwmServo.cpp Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- 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);