ジャパンオープン用のメインプログラム

Dependencies:   mbed AQM1602 HMC6352 PID

Revision:
32:367b16d69a32
Parent:
31:745a775cfc20
Child:
33:aa115c30892e
--- a/main_processing/strategy/strategy.cpp	Wed Mar 23 13:01:43 2016 +0000
+++ b/main_processing/strategy/strategy.cpp	Thu Mar 24 04:54:39 2016 +0000
@@ -244,6 +244,25 @@
                 }
             }
         }
+        if((sys.HomeBlind==0)){
+            if(((data.irNotice==IR_CLOSE)||(data.irNotice==IR_CLOSER))&&(data.ping[B_PING]<60)&&
+                (
+                    (data.irPosition==11)||
+                    (data.irPosition==(ir_posi_s[(11-8+24+1)%12]))||
+                    (data.irPosition==(ir_posi_s[(11-8+24-1)%12]))||
+                    (data.irPosition==(ir_posi_s[(11-8+24+2)%12]))||
+                    (data.irPosition==(ir_posi_s[(11-8+24-2)%12]))||
+                    (data.irPosition==(ir_posi_s[(11-8+24+3)%12]))||
+                    (data.irPosition==(ir_posi_s[(11-8+24-3)%12]))
+                )
+            ){
+                sys.ir_pow_table=2;//直進
+                ir_x_dir = ir_move_val[2][data.irNotice][data.irPosition][IR_X_DIR];
+                ir_y_dir = ir_move_val[2][data.irNotice][data.irPosition][IR_Y_DIR];
+                ir_x_turn = ir_move_val[2][data.irNotice][data.irPosition][IR_X_TURN];
+                ir_y_turn = ir_move_val[2][data.irNotice][data.irPosition][IR_Y_TURN];
+            }
+        }
     }
     
     //Irの検出値によって出力を調整
@@ -287,21 +306,23 @@
     //ホールド判定
     JudgeBallHolding();
     //ドリブラー駆動
-    if((sys.DriBlind==0)&&(data.lnRawOrderLog1[0]!=LINE_EMPTY)&&(data.lnRawOrder[0]==LINE_EMPTY)){
-        if(
-            ((data.lnRawOrderLog1[0]==A_SPOT)&&(data.lnRawOrderLog1[1]==B_SPOT))||
-            ((data.lnRawOrderLog1[0]==B_SPOT)&&(data.lnRawOrderLog1[1]==A_SPOT))
-        ){
-            cmps_set.GoalDeg=0;
-        }
-        else if((data.lnRawOrderLog1[0]==A_SPOT)&&(1)){
-            cmps_set.GoalDeg=-30;
-        }
-        else if((data.lnRawOrderLog1[0]==B_SPOT)&&(1)){
-            cmps_set.GoalDeg=30;
-        }
-        else{
-            cmps_set.GoalDeg=0;
+    if((sys.TurnDriBlind==0)&&(data.lnRawOrderLog1[0]!=LINE_EMPTY)&&(data.lnRawOrder[0]==LINE_EMPTY)){
+        if(sys.TurnHoldBlind==0){
+            if(
+                ((data.lnRawOrderLog1[0]==A_SPOT)&&(data.lnRawOrderLog1[1]==B_SPOT))||
+                ((data.lnRawOrderLog1[0]==B_SPOT)&&(data.lnRawOrderLog1[1]==A_SPOT))
+            ){
+                cmps_set.GoalDeg=0;
+            }
+            else if((data.lnRawOrderLog1[0]==A_SPOT)&&(1)){
+                cmps_set.GoalDeg=-30;
+            }
+            else if((data.lnRawOrderLog1[0]==B_SPOT)&&(1)){
+                cmps_set.GoalDeg=30;
+            }
+            else{
+                cmps_set.GoalDeg=0;
+            }
         }
     }
     if((sys.DriBlind==0)&&(data.irNotice==IR_CLOSER)&&((data.irPosition==10)||(data.irPosition==11)||(data.irPosition==12))){
@@ -343,8 +364,8 @@
         (data.ping[R_PING]<30)&&
         (data.ping[L_PING]<30)
     ){
-        DriveTurn();
-        DriveSolenoid();
+        //DriveTurn();
+        //DriveSolenoid();
     }
     
     //Irの細かい補正値の処理.基本的にLineの補正値を演算する処理が始まる前にIrのモーター出力値補正をすべて終わらせる.
@@ -378,7 +399,13 @@
             ir_y = -1;
         }
         else{
-            ir_y = 0;
+            if((data.ping[B_PING]>40)&&(data.ping[R_PING]>55)&&(data.ping[L_PING]>55)){
+                ir_y = -1;
+                ir_pow_y = 15;
+            }
+            else{
+                ir_y = 0;
+            }
             //sys.HomeStayFlag[Y_PING]=1;
         }
     }
@@ -391,6 +418,7 @@
         if(ir_y>0) ir_y=0;
         if((data.ping[B_PING]>60)&&(1)){
             ir_y = -1;
+            ir_pow_y = 15;
         }
     }
     if(
@@ -434,11 +462,11 @@
     //LED = ((data.lnOrder[0]!=LINE_EMPTY)<<2) | ((data.lnOrder[1]!=LINE_EMPTY)<<1) | ((data.lnOrder[2]!=LINE_EMPTY)<<0);
     
     //LED = sys.BallHoldFlag*15;
-    //if(sys.BallHoldFlag==1) LED=15;
-    //else LED=10;
+    if(sys.BallHoldFlag==1) LED=15;
+    else LED=10;
     
-    if(data.lnRepeat>=1) LED=15;
-    else LED=10;
+    //if(data.lnRepeat>=1) LED=15;
+    //else LED=10;
     
     //LED = 0xFF*(data.ping[B_PING]<30);
     
@@ -449,8 +477,8 @@
     
     
     ////最終的なモーターの出力を演算
-    vx = (ir_pow_x*ir_x)*data.lnStop[X_LINE]*(data.lnStay[X_LINE])*LineSlowPower[X_LINE] + LineReturnPower[X_LINE];
-    vy = (ir_pow_y*ir_y)*data.lnStop[Y_LINE]*(data.lnStay[Y_LINE])*LineSlowPower[Y_LINE] + LineReturnPower[Y_LINE];
+    vx = (ir_pow_x*ir_x)*data.lnStop[X_LINE]*(data.lnStay[X_LINE])*LineSlowPower[X_LINE]*(sys.TurnStopFlag==0) + LineReturnPower[X_LINE];
+    vy = (ir_pow_y*ir_y)*data.lnStop[Y_LINE]*(data.lnStay[Y_LINE])*LineSlowPower[Y_LINE]*(sys.TurnStopFlag==0) + LineReturnPower[Y_LINE];
     vs = cmps_set.OutputPID;
     move(
         vx,