CatPot 2015-2016 / Mbed 2 deprecated CatPot_2v10_T_Main

Dependencies:   mbed AQM1602 HMC6352 PID

Revision:
17:cc862ecf9812
Parent:
16:4fadb7a87497
Child:
18:3a42a931c95a
--- a/main_processing/strategy/strategy.cpp	Mon Mar 14 07:51:37 2016 +0000
+++ b/main_processing/strategy/strategy.cpp	Mon Mar 14 08:56:04 2016 +0000
@@ -748,34 +748,6 @@
     else if(LineSum==0){
         LineState = 0;
     }
-    /*if(data.lnHold==7){
-        if(data.lnRaw>0){
-            //場外間際...減衰
-            LineState = 3;
-        }
-        else{//data.lnRaw==0
-            //場外...出力完全無効+反発
-            //powerVoid & restore
-            LineState = 4;
-        }
-    }
-    else if(data.lnHold>0){
-        if(data.lnRaw>0){
-            //踏んでるけどまだ出てない...減衰
-            LineState = 2;
-            //timeout&reset...detach
-        }
-        else{//data.lnRaw==0
-            //線をまたいでいるか,中途半端に線を踏んだあと復帰したか...減衰
-            LineState = 1;
-            //ping&reset
-            //timeout&reset
-        }
-    }
-    //else if(data.lnHold==0){...maxpower
-    if(data.FieldState==LINE_OUTSIDE){
-        LineState = 4;
-    }*/
     
     
     if(pow_x>=0){
@@ -797,7 +769,7 @@
     }
 }
 void LineJudgeReturn(double pow_x, double pow_y, double *x, double *y){
-    const int8_t static LineReturn[5] = {0, 0, 0, 0, 10};
+    const int8_t static LineReturn[5] = {0, 0, 0, 0, 20};
     uint8_t LinePingState[4];
     //◎ボールを追う力とラインから離れる力の向きが違うならばラインから離れる力が優先される.
     //◎ボールを追う力とラインから離れる力の向きが同じならばボールを追う力が優先される.
@@ -805,7 +777,7 @@
     //×ラインのほぼ場外では常時ラインから離れる力が優先される.
     //※場外判定を行うには再び場内に戻る必要がある.
     
-    if(data.FieldState==LINE_OUTSIDE){
+    if(data.FieldSpot==LINE_OUTSIDE){
         
         LinePingState[L_PING]=(data.ping[L_PING]<WhiteToWall[X_PING]);
         LinePingState[R_PING]=(data.ping[R_PING]<WhiteToWall[X_PING]);
@@ -815,17 +787,12 @@
         //line間際の復帰力以外の力を作用させるか否か
         data.lnStop[X_LINE]=1;
         data.lnStop[Y_LINE]=1;
+        
+        data.ReturnDir[X_LINE]=LINE_EMPTY;
+        data.ReturnDir[Y_LINE]=LINE_EMPTY;
+        
         //x
-        if((LinePingState[L_PING]==0)&&(LinePingState[R_PING]==0)){
-            if(pow_x>0){
-              *x = -pow_x*(1-0.75);
-            }
-            else{
-              *x = pow_x*(1-0.75);
-            }
-            data.lnStop[X_LINE]=1;
-        }
-        if((LinePingState[L_PING]==0)&&(LinePingState[R_PING]==1)){
+        if(data.ReturnDir[X_LINE]==L_LINE){
             if(pow_x<0){
               *x = 0;
               data.lnStop[X_LINE]=1;
@@ -835,7 +802,7 @@
               data.lnStop[X_LINE]=0;
             }
         }
-        if((LinePingState[L_PING]==1)&&(LinePingState[R_PING]==0)){
+        else if(data.ReturnDir[X_LINE]==R_LINE){
             if(pow_x>0){
               *x = 0;
               data.lnStop[X_LINE]=1;
@@ -845,22 +812,59 @@
               data.lnStop[X_LINE]=0;
             }
         }
-        if((LinePingState[L_PING]==1)&&(LinePingState[R_PING]==1)){
-            *x = 0;
-            data.lnStop[X_LINE]=0;
+        else if(data.ReturnDir[X_LINE]==LINE_EMPTY){
+            if((LinePingState[L_PING]==0)&&(LinePingState[R_PING]==0)){
+                /*if(pow_x>0){
+                  *x = -pow_x*(1-0.75);
+                }
+                else{
+                  *x = pow_x*(1-0.75);
+                }*/
+                data.lnStop[X_LINE]=1;
+            }
+            if((LinePingState[L_PING]==0)&&(LinePingState[R_PING]==1)){
+                
+                data.ReturnDir[X_LINE]=L_LINE;
+                
+                if(pow_x<0){
+                  *x = 0;
+                  data.lnStop[X_LINE]=1;
+                }
+                else{
+                  *x = -LineReturn[4];
+                  data.lnStop[X_LINE]=0;
+                }
+            }
+            if((LinePingState[L_PING]==1)&&(LinePingState[R_PING]==0)){
+                
+                data.ReturnDir[X_LINE]=R_LINE;
+                
+                if(pow_x>0){
+                  *x = 0;
+                  data.lnStop[X_LINE]=1;
+                }
+                else{
+                  *x = LineReturn[4];
+                  data.lnStop[X_LINE]=0;
+                }
+            }
+            if((LinePingState[L_PING]==1)&&(LinePingState[R_PING]==1)){
+                *x = 0;
+                data.lnStop[X_LINE]=0;
+            }
         }
-        
         //y
-        if((LinePingState[B_PING]==0)&&(LinePingState[F_PING]==0)){
+        if(data.ReturnDir[Y_LINE]==F_LINE){
             if(pow_y>0){
-              *y = -pow_y*(1-0.75);
+              *y = 0;
+              data.lnStop[Y_LINE]=1;
             }
             else{
-              *y = pow_y*(1-0.75);
+              *y = LineReturn[4];
+              data.lnStop[Y_LINE]=0;
             }
-            data.lnStop[Y_LINE]=1;
         }
-        if((LinePingState[B_PING]==0)&&(LinePingState[F_PING]==1)){
+        else if(data.ReturnDir[Y_LINE]==B_LINE){
             if(pow_y<0){
               *y = 0;
               data.lnStop[Y_LINE]=1;
@@ -870,24 +874,58 @@
               data.lnStop[Y_LINE]=0;
             }
         }
-        if((LinePingState[B_PING]==1)&&(LinePingState[F_PING]==0)){
-            if(pow_y>0){
-              *y = 0;
-              data.lnStop[Y_LINE]=1;
+        else if(data.ReturnDir[Y_LINE]==LINE_EMPTY){
+            if((LinePingState[B_PING]==0)&&(LinePingState[F_PING]==0)){
+                /*if(pow_y>0){
+                  *y = -pow_y*(1-0.75);
+                }
+                else{
+                  *y = pow_y*(1-0.75);
+                }*/
+                data.lnStop[Y_LINE]=1;
             }
-            else{
-              *y = LineReturn[4];
-              data.lnStop[Y_LINE]=0;
+            if((LinePingState[B_PING]==0)&&(LinePingState[F_PING]==1)){
+                
+                data.ReturnDir[Y_LINE]=B_LINE;
+                
+                if(pow_y<0){
+                  *y = 0;
+                  data.lnStop[Y_LINE]=1;
+                }
+                else{
+                  *y = -LineReturn[4];
+                  data.lnStop[Y_LINE]=0;
+                }
+            }
+            if((LinePingState[B_PING]==1)&&(LinePingState[F_PING]==0)){
+                
+                data.ReturnDir[Y_LINE]=F_LINE;
+                
+                if(pow_y>0){
+                  *y = 0;
+                  data.lnStop[Y_LINE]=1;
+                }
+                else{
+                  *y = LineReturn[4];
+                  data.lnStop[Y_LINE]=0;
+                }
+            }
+            if((LinePingState[B_PING]==1)&&(LinePingState[F_PING]==1)){
+                *y = 0;
+                data.lnStop[Y_LINE]=0;
             }
         }
-        if((LinePingState[B_PING]==1)&&(LinePingState[F_PING]==1)){
-            *y = 0;
-            data.lnStop[Y_LINE]=0;
+        //none
+        if((LinePingState[L_PING]==1)&&(LinePingState[R_PING]==1)&&(LinePingState[F_PING]==1)&&(LinePingState[B_PING]==1)){
+            //turn!
         }
         
+    }
+    else{//data.FieldSpot==LINE_INSIDE
+    
+        data.ReturnDir[X_LINE]=LINE_EMPTY;
+        data.ReturnDir[Y_LINE]=LINE_EMPTY;
         
-    }
-    else{//data.FieldState==LINE_INSIDE
         *x = 0;
         *y = 0;
         
@@ -1066,16 +1104,17 @@
         LineJudgeReset();
         
         //LineJudgeSlow(ir_x, ir_y, &LineSlowPower[X_LINE], &LineSlowPower[Y_LINE]);
-        //LineJudgeReturn(ir_x, ir_y, &LineReturnPower[X_LINE], &LineReturnPower[Y_LINE]);
+        LineJudgeReturn(ir_x, ir_y, &LineReturnPower[X_LINE], &LineReturnPower[Y_LINE]);
         
         LineSlowPower[X_LINE] = 1.0;
         LineSlowPower[Y_LINE] = 1.0;
-        
+        /*
         LineReturnPower[X_LINE] = 0.0;
         LineReturnPower[Y_LINE] = 0.0;
         
         data.lnStop[X_LINE] = 1;
         data.lnStop[Y_LINE] = 1;
+        */
         
     }
     if(data.FieldSpot==LINE_OUTSIDE) LED = 0x9;