Dependents:   OBROT_ALL

Revision:
2:58d7debaed1f
Parent:
1:e541c8ebe96b
Child:
3:56ad82f5f780
--- a/Command.cpp	Fri Aug 21 04:51:05 2015 +0000
+++ b/Command.cpp	Wed Oct 14 05:50:26 2015 +0000
@@ -1,47 +1,112 @@
 #include "Command.h"
+#include "Math.h"
+#include "Shooter.h"
+#include "Steering.h"
+#include "XBee.h"
 
-const float Command::mPositionSetOfShooting[] = {
-    0.5f,
-    0.5f,
-    0.5f
-};
+// angle to analog
+/*
+const float Command::mAngleToAnalogCoeffA = -0.01584967;
+const float Command::mAngleToAnalogCoeffB =  0.788235;
+*/
+const float Command::mAngleToAnalogCoeffA = -0.016122;
+const float Command::mAngleToAnalogCoeffB =  0.800000;
 
-const float Command::mAngleSetOfShooting[] = {
-    0.5f,
-    0.5f,
-    0.5f
+const float Command::mShootingAngleTable[] = {
+    //4.0f,   // OWN_POLE
+    //16.0f,   // OWN_POLE
+    22.0f - 6.0f,
+    //16.0f,
+    
+    //30.0f,   // CENTER_MIDDLE_POLE
+    36.0f - 6.0f,
+    //24.0f,   // CENTER_MIDDLE_POLE
+    
+    //36.0f,   // CENTER_SIDE_POLE
+    30.0f - 6.0f,
+    //46.0f,
+    
+    //10.0f    // ENEMYS_POLE
+    //10.0f - 6.0f,
+    16.0f - 6.0f,
+    //24.0f
 };
+const float Command::mMaxAngle_deg = 46.0f;
+const float Command::mMinAngle_deg =  2.0f;
 
-Command::Command( ActionType action, float moveDirection_rad, float moveDuty, float roll, bool isShootable, AimTargetType target ){
-    mActionType         = action;
-    mMoveDirection_rad  = moveDirection_rad;
-    mMoveDuty           = moveDuty;
-    mRollCoeff          = roll;
-    mIsShootable        = isShootable;
-    setAimStateByTargetType( target );
+Command::Command(){
+    mSteeringActionType = Steering::STOP;
+    mMoveDirection_rad  = gPI * 0.5f;
+    mMoveDuty           = 0.5f;
+    mRollCoeff          = 0.0f;
+    mShootingAngle_deg  = 0.0f;
+    mAngleAdjust_deg    = 0.0f;
+    mShooterPosition    = 0.0f;
+    mIsShooting         = false;
+    mIsSupplying        = false;
+    
+    setAimStateAndAimParam( ShootingSystem::AIM_OWN_POLE );
 }
 
-void Command::setAimStateByTargetType( AimTargetType target ){
-    switch ( target ){
-        case NONE:
+Command::Command( Steering::ActionType steeringAction,
+                  ShootingSystem::AimState aimState,
+                  float moveDirection_rad,  float angleAdjust_deg,
+                  float moveDuty, float roll, bool isSupplying ){
+    
+    mSteeringActionType     = steeringAction;
+    mMoveDirection_rad      = moveDirection_rad;
+    mShootingAngle_deg      = 0.0f;
+    mAngleAdjust_deg        = angleAdjust_deg;
+    mMoveDuty               = moveDuty;
+    mRollCoeff              = roll;
+    mIsShooting             = ( mSteeringActionType == Steering::SHOOT );
+    mIsSupplying            = isSupplying;
+
+    setAimStateAndAimParam( aimState );
+}
+
+void Command::setAimStateAndAimParam( ShootingSystem::AimState aimState ){
+    mAimState  = aimState;
+    
+    switch ( mAimState ){
+        case ShootingSystem::AIM_OWN_POLE:
+            mShootingAngle_deg  = mShootingAngleTable[ OWN_POLE_ID ] + mAngleAdjust_deg;
+            mShootVoltage       = Shooter::WORKING_8V;
+            //mShooterPosition    = 1.0f;
+            mShooterPosition    = 0.780392f;
+            break;
+        
+        case ShootingSystem::AIM_CENTER_MIDDLE_POLE:
+            mShootingAngle_deg  = mShootingAngleTable[ CENTER_MIDDLE_POLE_ID ] + mAngleAdjust_deg;
+            mShootVoltage       = Shooter::WORKING_12V;
+            mShooterPosition    = 0.305882f;
+            break;
+        
+        case ShootingSystem::AIM_CENTER_SIDE_POLE:
+            mShootingAngle_deg  = mShootingAngleTable[ CENTER_SIDE_POLE_ID ] + mAngleAdjust_deg;
+            //mShootVoltage       = Shooter::WORKING_12V;
+            mShootVoltage       = Shooter::WORKING_12V;
+            //mShooterPosition    = 1.0f;
+            mShooterPosition    = 0.780392f;
             break;
             
-        case OWN_POLE:
-            mPositionOfShooting = mPositionSetOfShooting[ OWN_POLE_ID ];
-            mAngleOfShooting    = mAngleSetOfShooting[ OWN_POLE_ID ];
-            break;
-        
-        case CENTER_POLE:
-            mPositionOfShooting = mPositionSetOfShooting[ CENTER_POLE_ID ];
-            mAngleOfShooting    = mAngleSetOfShooting[ CENTER_POLE_ID ];
-            break;
-            
-        case ENEMYS_POLE:
-            mPositionOfShooting = mPositionSetOfShooting[ ENEMYS_POLE_ID ];
-            mAngleOfShooting    = mAngleSetOfShooting[ ENEMYS_POLE_ID ];
+        case ShootingSystem::AIM_ENEMYS_POLE:
+            mShootingAngle_deg  = mShootingAngleTable[ ENEMYS_POLE_ID ] + mAngleAdjust_deg;
+            mShootVoltage       = Shooter::WORKING_12V;
+            //mShooterPosition    = 0.0f;
+            mShooterPosition    = 0.305882f;
             break;
             
         default:
             break;
     }
+    
+    if ( mShootingAngle_deg > mMaxAngle_deg ){
+        mShootingAngle_deg = mMaxAngle_deg;
+        XBee::setAngleAdjust_deg( mAngleAdjust_deg - XBee::mAngleAdjustTable[ XBee::INCREMENT ] );
+    }
+    if ( mShootingAngle_deg < mMinAngle_deg ){
+        mShootingAngle_deg = mMinAngle_deg;
+        XBee::setAngleAdjust_deg( mAngleAdjust_deg - XBee::mAngleAdjustTable[ XBee::DECREMENT ] );
+    }
 }