Dependents:   YMotor

Revision:
1:c8ed08beefb9
Parent:
0:a2bbf76ca734
Child:
2:871d1f6d311e
--- a/YMotorDriverBase.cpp	Sun Aug 23 15:18:04 2015 +0000
+++ b/YMotorDriverBase.cpp	Wed Oct 14 06:04:34 2015 +0000
@@ -1,6 +1,7 @@
 #include "mbed.h"
 #include "PWMOut.h"
 #include "YMotorDriverBase.h"
+#include "YMotorDriver.h"
 
 const PinName YMotorDriverBase::mMotorDriveDoutPinName[] = {
     dp6, dp9, dp13, dp14
@@ -16,10 +17,42 @@
     dp5, dp27
 };
 const int YMotorDriverBase::mPwmCycle_us  = 300;
-const float YMotorDriverBase::mMaxDuty    = 0.90f;
-const float YMotorDriverBase::mMinDuty    = 0.30f;
+const float YMotorDriverBase::mMinDutyList[] = {
+    0.285f, // steering
+    0.285f, //
+    0.285f, //
+    0.0f,   // shooter
+    0.3f,   // general
+    //0.25f   // supplier
+    0.22f   // supplier
+};
+const float YMotorDriverBase::mMaxDutyList[] = {
+    0.85f,  // steering
+    0.85f,  // 
+    0.85f,  // 
+    1.0f,   // shooter
+    0.9f,   // general
+    0.50f   // supplier
+};
 
-YMotorDriverBase::YMotorDriverBase( char address ) : mAddress( address ){
+YMotorDriverBase::YMotorDriverBase( char address ) :
+        mAddress( address ),
+        mMaxDuty( mMaxDutyList[ YMotorDriver::GENERAL_ID ] ), mMinDuty( mMinDutyList[ YMotorDriver::GENERAL_ID ] ){
+            
+    init();
+}
+
+YMotorDriverBase::YMotorDriverBase( char address, int id ) :
+        mAddress( address ), mMaxDuty( mMaxDutyList[ id ] ), mMinDuty( mMinDutyList[ id ] ){
+    init();
+}
+
+YMotorDriverBase::YMotorDriverBase( char address, float maxDuty, float minDuty ) :
+        mAddress( address ), mMaxDuty( maxDuty ), mMinDuty( minDuty ){
+    init();
+}
+
+void YMotorDriverBase::init(){
     mI2C = new I2CSlave( mI2CPinName[ 0 ], mI2CPinName[ 1 ] );
     mI2C->address( mAddress );
     
@@ -43,6 +76,12 @@
 }
 
 void YMotorDriverBase::update(){
+     updateI2CSlave();
+     updateSpecial();
+     write();
+}
+
+void YMotorDriverBase::updateI2CSlave(){
      switch ( mI2C->receive() ){
         case I2CSlave::ReadAddressed:{
              char buf[] = { mMinDuty * 255.0f, mMaxDuty * 255.0f };
@@ -65,9 +104,8 @@
         case I2CSlave::NoData:
             break;
      }
-     
-     write();
 }
+
 void YMotorDriverBase::write(){
     updatePwmDuty();