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:
- 13:b20921316f3c
- Parent:
- 12:bee8f883c33a
- Child:
- 14:b510adcb6065
--- a/main_processing/strategy/strategy.cpp Thu Mar 10 14:08:09 2016 +0000
+++ b/main_processing/strategy/strategy.cpp Fri Mar 11 00:39:21 2016 +0000
@@ -729,8 +729,6 @@
return;
}
double LineJudgeX(double x){
- const double static LineDecline[5] = {1, .75, .5, .375, 0};
- const uint8_t static WhiteToWall = 30;
uint8_t LineState;
uint8_t LnRaw;
uint8_t LnHold;
@@ -776,17 +774,15 @@
//else if(LnHold==0){...maxpower
if(x>=0){
- if(data.ping[R_PING]<WhiteToWall) return LineDecline[LineState];
+ if(data.ping[R_PING]<WhiteToWall[X_PING]) return LineDecline[LineState];
else return 1;
}
else{
- if(data.ping[L_PING]<WhiteToWall) return LineDecline[LineState];
+ if(data.ping[L_PING]<WhiteToWall[X_PING]) return LineDecline[LineState];
else return 1;
}
}
void LineJudgeSlow(double *x, double *y){
- const double static LineDecline[5] = {1, .75, .5, .375, 0};
- const uint8_t static WhiteToWall[2] = {30, 30};
uint8_t LineState;
//line
@@ -817,6 +813,10 @@
}
}
//else if(data.lnHold==0){...maxpower
+ if(data.FieldState==LINE_OUTSIDE){
+ LineState = 4;
+ }
+
if(*x>=0){
if(data.ping[R_PING]<WhiteToWall[X_PING]) (*x)=LineDecline[LineState];
@@ -836,9 +836,8 @@
else *y=1;
}
}
-void LineJudgeReturn(double pow_x, double pow_y, int8_t *x, int8_t *y){
+void LineJudgeReturn(double pow_x, double pow_y, double *x, double *y){
const int8_t static LineReturn[5] = {0, 0, 0, 0, 10};
- const uint8_t static WhiteToWall[2] = {30, 30};
uint8_t LinePingState[4];
//◎ボールを追う力とラインから離れる力の向きが違うならばラインから離れる力が優先される.
//◎ボールを追う力とラインから離れる力の向きが同じならばボールを追う力が優先される.
@@ -846,8 +845,6 @@
//×ラインのほぼ場外では常時ラインから離れる力が優先される.
//※場外判定を行うには再び場内に戻る必要がある.
-
-
if(data.FieldState==LINE_OUTSIDE){
LinePingState[L_PING]=(data.ping[L_PING]<WhiteToWall[X_PING]);
@@ -860,39 +857,75 @@
data.lnStop[Y_LINE]=1;
//x
if((LinePingState[L_PING]==0)&&(LinePingState[R_PING]==0)){
- if(data.ping[L_PING]>data.ping[R_PING]) *x = -LineReturn[4];
- if(data.ping[L_PING]==data.ping[R_PING]) *x = 0;
- if(data.ping[L_PING]<data.ping[R_PING]) *x = LineReturn[4];
+ 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(pow_x<0){*x = 0;}
- else{*x = -LineReturn[4];data.lnStop[X_LINE]=0;}
+ 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)){
- if(pow_x>0){*x = 0;}
- else{*x = -LineReturn[4];data.lnStop[X_LINE]=0;}
+ 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[L_PING]==0)&&(LinePingState[R_PING]==0)){
- if(data.ping[L_PING]>data.ping[R_PING]) *x = -LineReturn[4];
- if(data.ping[L_PING]==data.ping[R_PING]) *x = 0;
- if(data.ping[L_PING]<data.ping[R_PING]) *x = LineReturn[4];
+ 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;
}
- if((LinePingState[L_PING]==0)&&(LinePingState[R_PING]==1)){
- if(pow_x<0){*x = 0;}
- else{*x = -LineReturn[4];data.lnStop[X_LINE]=0;}
+ if((LinePingState[B_PING]==0)&&(LinePingState[F_PING]==1)){
+ if(pow_y<0){
+ *y = 0;
+ data.lnStop[Y_LINE]=1;
+ }
+ else{
+ *y = -LineReturn[4];
+ data.lnStop[Y_LINE]=0;
+ }
}
- if((LinePingState[L_PING]==1)&&(LinePingState[R_PING]==0)){
- if(pow_x>0){*x = 0;}
- else{*x = -LineReturn[4];data.lnStop[X_LINE]=0;}
+ if((LinePingState[B_PING]==1)&&(LinePingState[F_PING]==0)){
+ if(pow_y>0){
+ *y = 0;
+ data.lnStop[Y_LINE]=1;
+ }
+ else{
+ *y = LineReturn[4];
+ data.lnStop[Y_LINE]=0;
+ }
}
- if((LinePingState[L_PING]==1)&&(LinePingState[R_PING]==1)){
- *x = 0;
+ if((LinePingState[B_PING]==1)&&(LinePingState[F_PING]==1)){
+ *y = 0;
+ data.lnStop[Y_LINE]=0;
}
+
+
}
else{//data.FieldState==LINE_INSIDE
*x = 0;
@@ -904,12 +937,55 @@
}
}
void LineJudgeReset(void){
- return;
+ uint8_t LineState;
+
+ //line
+ if(data.lnHold==7){
+ if(data.lnRaw>0){
+ //場外間際...減衰
+ }
+ else{//data.lnRaw==0
+ //場外...出力完全無効+反発
+ if(
+ (data.ping[L_PING]<OutToWall[X_PING])||
+ (data.ping[R_PING]<OutToWall[X_PING])||
+ (data.ping[F_PING]<OutToWall[Y_PING])||
+ (data.ping[B_PING]<OutToWall[Y_PING])
+ ){
+ LineLiberate();
+ data.FieldState=LINE_OUTSIDE;
+ }
+ if(
+ (data.ping[L_PING]>=WhiteToWall[X_PING])&&
+ (data.ping[R_PING]>=WhiteToWall[X_PING])
+ ){
+ LineLiberate();
+ data.FieldState=LINE_INSIDE;
+ }
+ }
+ }
+ else if(data.lnHold>0){
+ if(data.lnRaw>0){
+ //踏んでるけどまだ出てない...減衰
+ //timeout&reset...detach
+ }
+ else{//data.lnRaw==0
+ //線をまたいでいるか,中途半端に線を踏んだあと復帰したか...減衰
+ //if((data.ping[L_PING]>40)&&(data.ping[R_PING]>40)) LineLiberate();
+ //ping&reset
+ //timeout&reset
+ }
+ }
+ //else if(data.lnHold==0){...maxpower
+
+ if((data.ping[R_PING]>WhiteToWall[X_PING])&&(data.ping[L_PING]>WhiteToWall[X_PING])) LineLiberate();
}
void modeAttack4(void){
double ir_x_dir, ir_y_dir;
double ir_x_turn, ir_y_turn;
double ir_x, ir_y;
+
+ double pow_x, pow_y;
uint8_t ir_pow;
int vx,vy,vs;
@@ -920,6 +996,8 @@
sys.LineBlind=0;
sys.PingBlind=0;
+ data.FieldState=LINE_INSIDE;
+
sys.KickOffFlag=0;
}
//data