Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed AQM1602 HMC6352 PID
Diff: main_processing/strategy/strategy.cpp
- 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;