せとうちオープン用のメインプログラム
Dependencies: mbed AQM1602 HMC6352 PID
main_processing/strategy/LineProcess.cpp
- Committer:
- lilac0112_1
- Date:
- 2016-05-01
- Revision:
- 0:b910276f9da2
File content as of revision 0:b910276f9da2:
#include "mbed.h" #include "extern.h" void LineJudgeSlow(double pow_x, double pow_y, double *x, double *y){ uint8_t LineState; uint8_t LineSum; //line LineState = 0; LineSum = ((data.lnHold>>2)&0x1)+((data.lnHold>>1)&0x1)+((data.lnHold>>0)&0x1); if((LineSum==3)||(data.FieldSpot==LINE_OUTSIDE)){ LineState = 3; } else if(LineSum==2){ LineState = 2; } else if(LineSum==1){ LineState = 1; } else if(LineSum==0){ LineState = 0; } if(pow_x>=0){ if(data.ping[R_PING]<WhiteToWall[X_PING]) (*x)=LineDecline[LineState]; else *x=1; } else{ if(data.ping[L_PING]<WhiteToWall[X_PING]) (*x)=LineDecline[LineState]; else *x=1; } if(pow_y>=0){ if(data.ping[F_PING]<WhiteToWall[Y_PING]) (*y)=LineDecline[LineState]; else *y=1; } else{ if(data.ping[B_PING]<WhiteToWall[Y_PING]) (*y)=LineDecline[LineState]; else *y=1; } } void LineJudgeSlow2(double pow_x, double pow_y, double *x, double *y, uint8_t *px, uint8_t *py){ uint8_t LineState; uint8_t LineSum; //line LineState = 0; LineSum = (data.lnRawOrder[0]!=LINE_EMPTY)+(data.lnRawOrder[1]!=LINE_EMPTY)+(data.lnRawOrder[2]!=LINE_EMPTY); if(LineSum==3){ LineState = 3; } else if(LineSum==2){ LineState = 2; } else if(LineSum==1){ LineState = 1; } else if(LineSum==0){ LineState = 0; } if(LineSum>0){ if(pow_x>=0){ if((data.ping[R_PING]<WhiteToWall[X_PING])&&((*px)>LineDecrease[LineState])) (*px)=LineDecrease[LineState]; } else{ if((data.ping[L_PING]<WhiteToWall[X_PING])&&((*px)>LineDecrease[LineState])) (*px)=LineDecrease[LineState]; } if(pow_y>=0){ if((data.ping[F_PING]<WhiteToWall[Y_PING])&&((*py)>LineDecrease[LineState])) (*py)=LineDecrease[LineState]; } else{ if((data.ping[B_PING]<WhiteToWall[Y_PING])&&((*py)>LineDecrease[LineState])) (*py)=LineDecrease[LineState]; } } else if(LineSum==0){ ////超音波による減速 if(pow_x>=0){ if((data.ping[R_PING]<GoalEdgeToWall[X_PING])&&((*px)>LineDecrease[LineState])) (*px)=LineDecrease[LineState]; } else{ if((data.ping[L_PING]<GoalEdgeToWall[X_PING])&&((*px)>LineDecrease[LineState])) (*px)=LineDecrease[LineState]; } if(pow_y>=0){ //if((data.ping[F_PING]<15)&&((*py)>LineDecrease[LineState])) (*py)=LineDecrease[LineState]; } else{ if((data.ping[B_PING]<15)&&((*py)>LineDecrease[LineState])) (*py)=LineDecrease[LineState]; } } if((data.lnStayNow[X_LINE]==1)&&((*px)>15)){ (*px)=15; } if((data.lnStayNow[Y_LINE]==1)&&((*py)>15)){ (*py)=15; } ////超音波による減速 if(pow_x>=0){ if((data.ping[R_PING]<GoalEdgeToWall[X_PING])&&((*px)>20)){ (*px)=20; if((*py)>30) (*py)=30; } } else{ if((data.ping[L_PING]<GoalEdgeToWall[X_PING])&&((*px)>20)){ (*px)=20; if((*py)>30) (*py)=30; } } if(pow_y>=0){ if((data.ping[F_PING]<WhiteToWallPlus[Y_PING])&&((*py)>25)) (*py)=25; } else{ if((data.ping[B_PING]<WhiteToWallPlus[Y_PING])&&((*py)>25)) (*py)=25; } *x=1; *y=1; } void LineJudgeReturn(double pow_x, double pow_y, double *x, double *y){ const int8_t static LineReturn[5] = {0, 0, 0, 0, 20}; uint8_t LinePingState[4]; //◎ボールを追う力とラインから離れる力の向きが違うならばラインから離れる力が優先される. //◎ボールを追う力とラインから離れる力の向きが同じならばボールを追う力が優先される. //◎ラインセンサ全てが場外になるまではボールを追う力は作用しない.ボールを追う力は場内に出るまで作用する. //×ラインのほぼ場外では常時ラインから離れる力が優先される. //※場外判定を行うには再び場内に戻る必要がある. 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]); LinePingState[F_PING]=(data.ping[F_PING]<WhiteToWall[Y_PING]); LinePingState[B_PING]=(data.ping[B_PING]<WhiteToWall[Y_PING]); //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(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; } } else if(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; } } 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; }*/ *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; }*/ *x = LineReturn[4]; data.lnStop[X_LINE]=0; } if((LinePingState[L_PING]==1)&&(LinePingState[R_PING]==1)){ if( (data.lnOrder[0]==A_SPOT)&&(data.lnOrder[1]==C_SPOT)&&(data.lnOrder[2]==B_SPOT) ){ *x = -LineReturn[4]; data.lnStop[X_LINE]=0; } else if( (data.lnOrder[0]==B_SPOT)&&(data.lnOrder[1]==C_SPOT)&&(data.lnOrder[2]==A_SPOT) ){ *x = LineReturn[4]; data.lnStop[X_LINE]=0; } else{ *x = 0; data.lnStop[X_LINE]=0; } } } //y if(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; } } else if(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; } } 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; } 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)){ if( (data.lnOrder[0]==C_SPOT)&&(data.lnOrder[1]==A_SPOT)&&(data.lnOrder[2]==B_SPOT)|| (data.lnOrder[0]==C_SPOT)&&(data.lnOrder[1]==B_SPOT)&&(data.lnOrder[2]==A_SPOT) ){ *y = LineReturn[4]; data.lnStop[Y_LINE]=0; } else if( (data.lnOrder[0]==A_SPOT)&&(data.lnOrder[1]==B_SPOT)&&(data.lnOrder[2]==C_SPOT)|| (data.lnOrder[0]==B_SPOT)&&(data.lnOrder[1]==A_SPOT)&&(data.lnOrder[2]==C_SPOT) ){ *y = -LineReturn[4]; data.lnStop[Y_LINE]=0; } else{ *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; *x = 0; *y = 0; //line間際の復帰力以外の力を作用させるか否か data.lnStop[X_LINE]=1; data.lnStop[Y_LINE]=1; /* if( (data.lnRawMemory[A_SPOT]==1)&& (data.lnRawMemory[B_SPOT]==1)&& (data.lnRawMemory[C_SPOT]==0) ){ data.lnStop[Y_LINE]=0; *y = -LineReturn[4]; } else if( (data.lnRawMemory[A_SPOT]==0)&& (data.lnRawMemory[B_SPOT]==0)&& (data.lnRawMemory[C_SPOT]==1) ){ data.lnStop[Y_LINE]=0; *y = LineReturn[4]; }*/ } } void LineJudgeReturn2(double pow_x, double pow_y, double *x, double *y){ const int8_t static LineReturn[5] = {0, 0, 0, 0, 20}; uint8_t LinePingState[4]; //JSO2 static uint8_t lnRawReturn1 = 0; //◎ボールを追う力とラインから離れる力の向きが違うならばラインから離れる力が優先される. //◎ボールを追う力とラインから離れる力の向きが同じならばボールを追う力が優先される. //◎ラインセンサ全てが場外になるまではボールを追う力は作用しない.ボールを追う力は場内に出るまで作用する. //×ラインのほぼ場外では常時ラインから離れる力が優先される. //※場外判定を行うには再び場内に戻る必要がある. data.FieldSpot=LINE_INSIDE; if(data.FieldSpot==LINE_OUTSIDE){ } else{//data.FieldSpot==LINE_INSIDE data.ReturnDir[X_LINE]=LINE_EMPTY; data.ReturnDir[Y_LINE]=LINE_EMPTY; *x = 0; *y = 0; //line間際の復帰力以外の力を作用させるか否か data.lnStop[X_LINE]=1; data.lnStop[Y_LINE]=1; if(//y ((data.lnRawOrder[0]==A_SPOT)&&(data.lnRawOrder[1]==B_SPOT)&&(1))|| ((data.lnRawOrder[0]==B_SPOT)&&(data.lnRawOrder[1]==A_SPOT)&&(1)) ){ data.lnStop[Y_LINE]=0; *y = -LineReturn[4]; //JSO1 if( (data.ping[F_PING]<45)&& (data.lnRawReturn==1)//JSO2 ){ data.lnStop[X_LINE]=0; } //JSO2 if( ( ((Line[A_SPOT].read()==1)&&(Line[B_SPOT].read()==0))|| ((LineHolding[A_SPOT].read()==1)&&(LineHolding[B_SPOT].read()==0)) )&& (data.ping[F_PING]>45)&& (data.ping[F_PING]<200)&& (data.ping[R_PING]<25)&& (data.ping[L_PING]>40) ){ *x = -LineReturn[4]; data.lnStop[X_LINE]=0; } if( ( ((Line[A_SPOT].read()==0)&&(Line[B_SPOT].read()==1))|| ((LineHolding[A_SPOT].read()==0)&&(LineHolding[B_SPOT].read()==1)) )&& (data.ping[F_PING]>45)&& (data.ping[F_PING]<200)&& (data.ping[L_PING]<25)&& (data.ping[R_PING]>40) ){ *x = LineReturn[4]; data.lnStop[X_LINE]=0; } } else if( ((data.lnRawOrder[0]==C_SPOT)&&(1)&&(1)) ){ data.lnStop[Y_LINE]=0; *y = LineReturn[4]; //JSO1 if( (data.ping[B_PING]<45)&& (data.lnRawReturn==1) ){ data.lnStop[X_LINE]=0; } } else if(//x ((data.lnRawOrder[0]==A_SPOT)&&(data.lnRawOrder[1]==C_SPOT)&&(1)) ){ *x = -LineReturn[4]; data.lnStop[X_LINE]=0; } else if( ((data.lnRawOrder[0]==B_SPOT)&&(data.lnRawOrder[1]==C_SPOT)&&(1)) ){ *x = LineReturn[4]; data.lnStop[X_LINE]=0; } if( ((*x)!=0)|| ((*y)!=0) ){ data.lnRawReturn=1; LinePingState[L_PING]=(data.ping[L_PING]<WhiteToWallPlus[X_PING]); LinePingState[R_PING]=(data.ping[R_PING]<WhiteToWallPlus[X_PING]); LinePingState[F_PING]=(data.ping[F_PING]<WhiteToWallPlus[Y_PING]); LinePingState[B_PING]=(data.ping[B_PING]<WhiteToWallPlus[Y_PING]); //x if(data.lnStop[X_LINE]==1){ if((LinePingState[L_PING]==0)&&(LinePingState[R_PING]==1)){ *x = -LineReturn[4]; data.lnStop[X_LINE]=0; } if((LinePingState[L_PING]==1)&&(LinePingState[R_PING]==0)){ *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(data.lnStop[Y_LINE]==1){ 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; } } //JSO2 if((LineHolding[A_SPOT].read()==1)&&(LineHolding[B_SPOT].read()==1)&&(LineHolding[C_SPOT].read()==0)&&(data.lnRawReturn==1)){ *y = -LineReturn[4]; 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{ *y = LineReturn[4]; data.lnStop[Y_LINE]=0; } } if((LinePingState[B_PING]==1)&&(LinePingState[F_PING]==1)){ *y = 0; data.lnStop[Y_LINE]=0; } } } else{ data.lnRawReturn=0; //JSO3 if((data.lnOrder[0]==A_SPOT)&&(data.lnOrder[1]==LINE_EMPTY)&&(pow_x>0)){ data.lnStop[X_LINE]=0; } if((data.lnOrder[0]==B_SPOT)&&(data.lnOrder[1]==LINE_EMPTY)&&(pow_x<0)){ data.lnStop[X_LINE]=0; } //JSO3 if((Line[C_SPOT].read()==1)&&(1)&&(pow_y>0)){ data.lnStop[Y_LINE]=0; } } //JSO3 if((Line[C_SPOT].read()==1)&&(1)&&(pow_y>0)){ data.lnStop[Y_LINE]=0; } //JSO1 if(data.lnRawReturn==1){ //JSO2 if((lnRawReturn1==0)){ LineLiberate(); lnRawReturn1=1; } if( ( ((data.lnRawOrder[0]==A_SPOT)&&(data.lnRawOrder[1]==C_SPOT)&&(1))|| ((data.lnRawOrder[0]==B_SPOT)&&(data.lnRawOrder[1]==C_SPOT)&&(1)) )&& //((Line[A_SPOT].read()==1)&&(Line[B_SPOT].read()==1))&&//JSO1 ((LineHolding[A_SPOT].read()==1)&&(LineHolding[B_SPOT].read()==1))&&//JSO2 ((data.ping[F_PING]<45)&&(1))&&//JSO2 //(!((data.ping[B_PING]<40)&&(data.ping[B_PING]>25)))&&//JSO2 ((data.lnRawOrder[0]!=C_SPOT)&&(data.lnRawOrderLog1[0]!=C_SPOT)&&(data.lnRawOrderLog2[0]!=C_SPOT)) ){ *y = -LineReturn[4]; data.lnStop[Y_LINE]=0;//JSO2 } } else{ lnRawReturn1=0; if((LinePingState[L_PING]==0)&&(LinePingState[R_PING]==1)){ *x = -LineReturn[4]; data.lnStop[X_LINE]=0; } if((LinePingState[L_PING]==1)&&(LinePingState[R_PING]==0)){ *x = LineReturn[4]; data.lnStop[X_LINE]=0; } } } } void LineJudgeReset(double pow_x, double pow_y, double *x, double *y){ //static uint8_t NewLineCorner[4]={LINE_EMPTY, LINE_EMPTY, LINE_EMPTY, LINE_EMPTY}; //static uint8_t LastLineCorner[4]={LINE_EMPTY, LINE_EMPTY, LINE_EMPTY, LINE_EMPTY}; static uint8_t NewLineCorner[4]={LINE_EMPTY, LINE_EMPTY, LINE_EMPTY, LINE_EMPTY}; static uint8_t LastLineCorner[4]={LINE_EMPTY, LINE_EMPTY, LINE_EMPTY, LINE_EMPTY}; if((/*data.lnRaw==0*/1)&&(data.lnHold==7)){ if(data.FieldSpot==LINE_INSIDE){ data.lnCorner[L_LINE] = (data.ping[L_PING]<OutToWall[X_PING]); data.lnCorner[R_LINE] = (data.ping[R_PING]<OutToWall[X_PING]); data.lnCorner[F_LINE] = (data.ping[F_PING]<OutToWall[Y_PING]); data.lnCorner[B_LINE] = (data.ping[B_PING]<OutToWall[Y_PING]); if( (data.lnCorner[L_LINE])|| (data.lnCorner[R_LINE])|| (data.lnCorner[F_LINE])|| (data.lnCorner[B_LINE]) ){ data.NonWall[L_LINE] = (data.ping[L_PING]>WhiteToWall[X_PING]); data.NonWall[R_LINE] = (data.ping[R_PING]>WhiteToWall[X_PING]); data.NonWall[F_LINE] = (data.ping[F_PING]>WhiteToWall[Y_PING]); data.NonWall[B_LINE] = (data.ping[B_PING]>WhiteToWall[Y_PING]); ///* LastLineCorner[L_LINE]=NewLineCorner[L_LINE]; LastLineCorner[R_LINE]=NewLineCorner[R_LINE]; LastLineCorner[F_LINE]=NewLineCorner[F_LINE]; LastLineCorner[B_LINE]=NewLineCorner[B_LINE]; NewLineCorner[L_LINE]=data.lnCorner[L_LINE]; NewLineCorner[R_LINE]=data.lnCorner[R_LINE]; NewLineCorner[F_LINE]=data.lnCorner[F_LINE]; NewLineCorner[B_LINE]=data.lnCorner[B_LINE]; if( (LastLineCorner[L_LINE]==NewLineCorner[L_LINE])&& (LastLineCorner[R_LINE]==NewLineCorner[R_LINE])&& (LastLineCorner[F_LINE]==NewLineCorner[F_LINE])&& (LastLineCorner[B_LINE]==NewLineCorner[B_LINE]) ){ data.lnRepeat++; } else{ data.lnRepeat=0; } //*/ data.FieldSpot = LINE_OUTSIDE; LineLiberate(); } } else if(data.FieldSpot==LINE_OUTSIDE){ if(data.lnRaw==0){ data.FieldSpot = LINE_INSIDE; data.NonWall[L_LINE] = data.NonWall[R_LINE] = data.NonWall[F_LINE] = data.NonWall[B_LINE] = 0; LineLiberate(); LineRankClear(); } } } if(data.FieldSpot == LINE_OUTSIDE){ if( ( (data.ping[L_PING]>=WhiteToWall[X_PING])|| (data.NonWall[L_LINE]==1)|| ((data.lnOrder[0]==A_SPOT)&&(data.lnOrder[1]==C_SPOT)) //(data.lnOrder[0]==A_SPOT) )&& ( (data.ping[R_PING]>=WhiteToWall[X_PING])|| (data.NonWall[R_LINE]==1)|| ((data.lnOrder[0]==B_SPOT)&&(data.lnOrder[1]==C_SPOT)) //(data.lnOrder[0]==B_SPOT) )&& ( (data.ping[F_PING]>=WhiteToWall[Y_PING])|| (data.NonWall[F_LINE]==1)|| ((data.lnOrder[0]==C_SPOT)&&(data.lnOrder[1]==A_SPOT))|| ((data.lnOrder[0]==C_SPOT)&&(data.lnOrder[1]==B_SPOT)) )&& ((data.ping[B_PING]>=WhiteToWall[Y_PING])|| (data.NonWall[B_LINE]==1)|| ((data.lnOrder[0]==A_SPOT)&&(data.lnOrder[1]==B_SPOT))|| ((data.lnOrder[0]==B_SPOT)&&(data.lnOrder[1]==A_SPOT)) ) ){ data.FieldSpot = LINE_INSIDE; data.NonWall[L_LINE] = data.NonWall[R_LINE] = data.NonWall[F_LINE] = data.NonWall[B_LINE] = 0; LineLiberate(); LineRankClear(); } } if((data.FieldSpot == LINE_INSIDE)&&(0<data.lnHold)&&(data.lnHold<7)&&(data.lnRaw==0)){ if( ( ( (data.ping[L_PING]>=WhiteToWall[X_PING])|| ((data.lnOrder[0]==A_SPOT)&&(data.lnOrder[1]==C_SPOT)) //(data.lnOrder[0]==A_SPOT) )&& ( (data.ping[R_PING]>=WhiteToWall[X_PING])|| ((data.lnOrder[0]==B_SPOT)&&(data.lnOrder[1]==C_SPOT)) //(data.lnOrder[0]==B_SPOT) )&& ( (data.ping[F_PING]>=WhiteToWall[Y_PING])|| ((data.lnOrder[0]==C_SPOT)&&(data.lnOrder[1]==A_SPOT))|| ((data.lnOrder[0]==C_SPOT)&&(data.lnOrder[1]==B_SPOT)) )&& ( (data.ping[B_PING]>=WhiteToWall[Y_PING])|| ((data.lnOrder[0]==A_SPOT)&&(data.lnOrder[1]==B_SPOT))|| ((data.lnOrder[0]==B_SPOT)&&(data.lnOrder[1]==A_SPOT)) ) ) || ( (data.ping[L_PING]>=GoalEdgeToWall[X_PING])&& (data.ping[R_PING]>=GoalEdgeToWall[X_PING]) ) ){ data.NonWall[L_LINE] = data.NonWall[R_LINE] = data.NonWall[F_LINE] = data.NonWall[B_LINE] = 0; LineLiberate(); } } ///* if( (data.irNotice==IR_NONE)|| (data.irNotice==IR_FAR)|| ( (data.ping[L_PING]>=GoalEdgeToWall[X_PING])&& (data.ping[R_PING]>=GoalEdgeToWall[X_PING]) ) ){ data.lnRepeat = 0; NewLineCorner[L_LINE]=LINE_EMPTY; NewLineCorner[R_LINE]=LINE_EMPTY; NewLineCorner[F_LINE]=LINE_EMPTY; NewLineCorner[B_LINE]=LINE_EMPTY; LastLineCorner[L_LINE]=LINE_EMPTY; LastLineCorner[R_LINE]=LINE_EMPTY; LastLineCorner[F_LINE]=LINE_EMPTY; LastLineCorner[B_LINE]=LINE_EMPTY; } //data.lnRepeat=0; if((data.lnRepeat>0)&&(data.FieldSpot == LINE_INSIDE)){ //x if( ((pow_x>=0)&&(NewLineCorner[R_LINE]))|| ((pow_x<0)&&(NewLineCorner[L_LINE])) ){ data.lnStay[X_LINE]=0; } else{ data.lnStay[X_LINE]=1; } //y if( ((pow_y>=0)&&(NewLineCorner[F_LINE]))|| ((pow_y<0)&&(NewLineCorner[B_LINE])) ){ data.lnStay[Y_LINE]=0; } else{ data.lnStay[Y_LINE]=1; } } else{ data.lnStay[X_LINE]=data.lnStay[Y_LINE]=1; } //*/ } void LineJudgeReset2(double pow_x, double pow_y, double *x, double *y){ if(data.lnRepeat==0){ data.lnStayNow[X_LINE]=0; data.lnStayNow[Y_LINE]=0; } data.lnStay[X_LINE]=1; data.lnStay[Y_LINE]=1; if((data.irNotice==IR_FAR)&&(data.lnRepeat>1)){ data.lnRepeat=1; } if( (data.irNotice==IR_NONE)|| //(data.irNotice==IR_FAR)|| //(data.irLastPosition<=7)|| ( (!( (data.irPosition==data.irLastPosition)|| (data.irPosition==(ir_posi_s[(data.irLastPosition-8+24+1)%12]))|| (data.irPosition==(ir_posi_s[(data.irLastPosition-8+24-1)%12]))|| (data.irPosition==(ir_posi_s[(data.irLastPosition-8+24+2)%12]))|| (data.irPosition==(ir_posi_s[(data.irLastPosition-8+24-2)%12])) //((data.irPosition==(ir_posi_s[(data.irLastPosition-8+24+3)%12]))&&(cmps_set.GoalDeg==0))|| //((data.irPosition==(ir_posi_s[(data.irLastPosition-8+24-3)%12]))&&(cmps_set.GoalDeg==0)) ))&&( (data.irLastNotice==IR_CLOSE)|| (data.irLastNotice==IR_CLOSER) ) ) ){ data.lnRepeat = 0; LineRawLogReset(); } //data.lnRepeat=0; //if((data.lnRepeat==1)&&((data.lnRawOrder[0]==LINE_EMPTY)&&(data.lnRawOrder[1]==LINE_EMPTY)&&(data.lnRawOrder[2]==LINE_EMPTY))){ if( (data.lnRepeat>=1)&& (data.lnRawOrder[0]==LINE_EMPTY)/*&& ( ( (data.irPosition==data.irLastPosition)|| (data.irPosition==(data.irLastPosition+1))|| (data.irPosition==(data.irLastPosition-1))|| (data.irPosition==(data.irLastPosition+11))|| (data.irPosition==(data.irLastPosition-11)) )&& ( (data.irNotice==IR_CLOSE)|| (data.irNotice==IR_CLOSER) ) )*/ ){ //y if( ((pow_y>0)&&((data.lnRawOrderLog1[0]==A_SPOT)&&(data.lnRawOrderLog1[1]==B_SPOT)&&(1)))|| ((pow_y>0)&&((data.lnRawOrderLog1[0]==B_SPOT)&&(data.lnRawOrderLog1[1]==A_SPOT)&&(1))) ){ if(data.ping[F_PING]<WhiteToWallPlus[Y_PING]){ data.lnStay[Y_LINE]=0; } else{ data.lnStay[Y_LINE]=1; } data.lnStay[Y_LINE]=0; data.lnStayNow[Y_LINE]=1; } else{ data.lnStay[Y_LINE]=1; } if( ((pow_y<0)&&((data.lnRawOrderLog1[0]==C_SPOT)&&(1)&&(1))) ){ if(data.ping[B_PING]<WhiteToWallPlus[Y_PING]){ data.lnStay[Y_LINE]=0; } else{ data.lnStay[Y_LINE]=1; } data.lnStay[Y_LINE]=0; data.lnStayNow[Y_LINE]=1; } else{ data.lnStay[Y_LINE]=1; } //x if( ((pow_x>0)&&((data.lnRawOrderLog1[0]==A_SPOT)&&(data.lnRawOrderLog1[1]==C_SPOT)&&(1))) ){ if(data.ping[R_PING]<WhiteToWallPlus[X_PING]){ data.lnStay[X_LINE]=0; } else{ data.lnStay[X_LINE]=1; } data.lnStay[X_LINE]=0; data.lnStayNow[X_LINE]=1; } else{ data.lnStay[X_LINE]=1; } if( ((pow_x<0)&&((data.lnRawOrderLog1[0]==B_SPOT)&&(data.lnRawOrderLog1[1]==C_SPOT)&&(1))) ){ if(data.ping[L_PING]<WhiteToWallPlus[X_PING]){ data.lnStay[X_LINE]=0; } else{ data.lnStay[X_LINE]=1; } data.lnStay[X_LINE]=0; data.lnStayNow[X_LINE]=1; } else{ data.lnStay[X_LINE]=1; } if((data.irNotice==IR_CLOSE)||(data.irNotice==IR_CLOSER)){ //y2 if((data.lnStay[X_LINE]==1)&&(data.lnStay[Y_LINE]==0)){ if( ((pow_x>0)&&((data.lnRawOrderLog1[0]==A_SPOT)&&(data.lnRawOrderLog1[1]==B_SPOT))&&((data.irPosition== 9)||(data.irPosition==10)))|| ((pow_x>0)&&((data.lnRawOrderLog1[0]==B_SPOT)&&(data.lnRawOrderLog1[1]==A_SPOT))&&((data.irPosition== 9)||(data.irPosition==10)))|| ((pow_x>0)&&((data.lnRawOrderLog1[0]==C_SPOT)&&(1 ))&&((data.irPosition==18)||(data.irPosition==19))) ){ if(data.ping[R_PING]<WhiteToWallPlus[X_PING]){ data.lnStay[X_LINE]=0; } else{ data.lnStay[X_LINE]=1; } if(data.lnRepeat>=LINE_REPEAT){ data.lnStay[X_LINE]=0; } data.lnStayNow[X_LINE]=1; } else{ data.lnStay[X_LINE]=1; } } if((data.lnStay[X_LINE]==1)&&(data.lnStay[Y_LINE]==0)){ if( ((pow_x<0)&&((data.lnRawOrderLog1[0]==A_SPOT)&&(data.lnRawOrderLog1[1]==B_SPOT))&&((data.irPosition==12)||(data.irPosition==13)))|| ((pow_x<0)&&((data.lnRawOrderLog1[0]==B_SPOT)&&(data.lnRawOrderLog1[1]==A_SPOT))&&((data.irPosition==12)||(data.irPosition==13)))|| ((pow_x<0)&&((data.lnRawOrderLog1[0]==C_SPOT)&&(1 ))&&((data.irPosition==15)||(data.irPosition==16))) ){ if(data.ping[L_PING]<WhiteToWallPlus[X_PING]){ data.lnStay[X_LINE]=0; } else{ data.lnStay[X_LINE]=1; } if(data.lnRepeat>=LINE_REPEAT){ data.lnStay[X_LINE]=0; } data.lnStayNow[X_LINE]=1; } else{ data.lnStay[X_LINE]=1; } } //x2 if((data.lnStay[X_LINE]==0)&&(data.lnStay[Y_LINE]==1)){ if( ((pow_y>0)&&((data.lnRawOrderLog1[0]==A_SPOT)&&(data.lnRawOrderLog1[1]==C_SPOT))&&((data.irPosition== 9)||(data.irPosition==10)))|| ((pow_y>0)&&((data.lnRawOrderLog1[0]==B_SPOT)&&(data.lnRawOrderLog1[1]==C_SPOT))&&((data.irPosition==12)||(data.irPosition==13))) ){ if(data.ping[F_PING]<WhiteToWallPlus[Y_PING]){ data.lnStay[Y_LINE]=0; } else{ data.lnStay[Y_LINE]=1; } if(data.lnRepeat>=LINE_REPEAT){ data.lnStay[Y_LINE]=0; } data.lnStayNow[Y_LINE]=1; } else{ data.lnStay[Y_LINE]=1; } if( ((pow_y<0)&&((data.lnRawOrderLog1[0]==A_SPOT)&&(data.lnRawOrderLog1[1]==C_SPOT))&&((data.irPosition==18)||(data.irPosition==19)))|| ((pow_y<0)&&((data.lnRawOrderLog1[0]==B_SPOT)&&(data.lnRawOrderLog1[1]==C_SPOT))&&((data.irPosition==15)||(data.irPosition==16))) ){ if(data.ping[B_PING]<WhiteToWallPlus[Y_PING]){ data.lnStay[Y_LINE]=0; } else{ data.lnStay[Y_LINE]=1; } if(data.lnRepeat>=LINE_REPEAT){ data.lnStay[Y_LINE]=0; } data.lnStayNow[Y_LINE]=1; } else{ data.lnStay[Y_LINE]=1; } } if( (data.lnRepeat>=2) ){ if( ((pow_y>0)&&((data.ping[F_PING]<40)&&(1)))|| ((pow_y<0)&&((data.ping[B_PING]<40)&&(1))) ){ data.lnStay[Y_LINE]=0; } if( ((pow_x>0)&&((data.ping[R_PING]<40)&&(1)))|| ((pow_x<0)&&((data.ping[L_PING]<40)&&(1))) ){ data.lnStay[X_LINE]=0; } } } } else{ data.lnStay[X_LINE]=data.lnStay[Y_LINE]=1; } } void LineJudgeReset3(double pow_x, double pow_y, double *x, double *y){ if(data.lnRepeat==0){ data.lnStayNow[X_LINE]=0; data.lnStayNow[Y_LINE]=0; } data.lnStay[X_LINE]=1; data.lnStay[Y_LINE]=1; if((data.irNotice==IR_FAR)&&(data.lnRepeat>1)){ data.lnRepeat=1; } if( (data.irNotice==IR_NONE)|| (data.irNotice==IR_FAR)|| //(data.irLastPosition<=7)|| ( (!( (data.irPosition==data.irLastPosition)|| (data.irPosition==(ir_posi_s[(data.irLastPosition-8+24+1)%12]))|| (data.irPosition==(ir_posi_s[(data.irLastPosition-8+24-1)%12])) //(data.irPosition==(ir_posi_s[(data.irLastPosition-8+24+2)%12]))|| //(data.irPosition==(ir_posi_s[(data.irLastPosition-8+24-2)%12])) //((data.irPosition==(ir_posi_s[(data.irLastPosition-8+24+3)%12]))&&(cmps_set.GoalDeg==0))|| //((data.irPosition==(ir_posi_s[(data.irLastPosition-8+24-3)%12]))&&(cmps_set.GoalDeg==0)) ))&&( (data.irLastNotice==IR_CLOSE)|| (data.irLastNotice==IR_CLOSER) ) ) ){ data.lnRepeat = 0; LineRawLogReset(); } //data.lnRepeat=0; //if((data.lnRepeat==1)&&((data.lnRawOrder[0]==LINE_EMPTY)&&(data.lnRawOrder[1]==LINE_EMPTY)&&(data.lnRawOrder[2]==LINE_EMPTY))){ if( (data.lnRepeat>=1)&& (data.lnRawOrder[0]==LINE_EMPTY)/*&& ( ( (data.irPosition==data.irLastPosition)|| (data.irPosition==(data.irLastPosition+1))|| (data.irPosition==(data.irLastPosition-1))|| (data.irPosition==(data.irLastPosition+11))|| (data.irPosition==(data.irLastPosition-11)) )&& ( (data.irNotice==IR_CLOSE)|| (data.irNotice==IR_CLOSER) ) )*/ ){ //y if( ((pow_y>0)&&((data.lnRawOrderLog1[0]==A_SPOT)&&(data.lnRawOrderLog1[1]==B_SPOT)&&(1)))|| ((pow_y>0)&&((data.lnRawOrderLog1[0]==B_SPOT)&&(data.lnRawOrderLog1[1]==A_SPOT)&&(1))) ){ if(data.ping[F_PING]<WhiteToWallPlus[Y_PING]){ data.lnStay[Y_LINE]=0; } else{ data.lnStay[Y_LINE]=1; } data.lnStay[Y_LINE]=0; data.lnStayNow[Y_LINE]=1; } else{ data.lnStay[Y_LINE]=1; } if( ((pow_y<0)&&((data.lnRawOrderLog1[0]==C_SPOT)&&(1)&&(1))) ){ if(data.ping[B_PING]<WhiteToWallPlus[Y_PING]){ data.lnStay[Y_LINE]=0; } else{ data.lnStay[Y_LINE]=1; } data.lnStay[Y_LINE]=0; data.lnStayNow[Y_LINE]=1; } else{ data.lnStay[Y_LINE]=1; } //x if( ((pow_x>0)&&((data.lnRawOrderLog1[0]==A_SPOT)&&(data.lnRawOrderLog1[1]==C_SPOT)&&(1))) ){ if(data.ping[R_PING]<WhiteToWallPlus[X_PING]){ data.lnStay[X_LINE]=0; } else{ data.lnStay[X_LINE]=1; } data.lnStay[X_LINE]=0; data.lnStayNow[X_LINE]=1; } else{ data.lnStay[X_LINE]=1; } if( ((pow_x<0)&&((data.lnRawOrderLog1[0]==B_SPOT)&&(data.lnRawOrderLog1[1]==C_SPOT)&&(1))) ){ if(data.ping[L_PING]<WhiteToWallPlus[X_PING]){ data.lnStay[X_LINE]=0; } else{ data.lnStay[X_LINE]=1; } data.lnStay[X_LINE]=0; data.lnStayNow[X_LINE]=1; } else{ data.lnStay[X_LINE]=1; } if((data.irNotice==IR_CLOSE)||(data.irNotice==IR_CLOSER)){ //y2 if((data.lnStay[X_LINE]==1)&&(data.lnStay[Y_LINE]==0)){ if( ((pow_x>0)&&((data.lnRawOrderLog1[0]==A_SPOT)&&(data.lnRawOrderLog1[1]==B_SPOT))&&((data.irPosition== 9)||(data.irPosition==10)))|| ((pow_x>0)&&((data.lnRawOrderLog1[0]==B_SPOT)&&(data.lnRawOrderLog1[1]==A_SPOT))&&((data.irPosition== 9)||(data.irPosition==10)))|| ((pow_x>0)&&((data.lnRawOrderLog1[0]==C_SPOT)&&(1 ))&&((data.irPosition==18)||(data.irPosition==19))) ){ if(data.ping[R_PING]<WhiteToWallPlus[X_PING]){ data.lnStay[X_LINE]=0; } else{ data.lnStay[X_LINE]=1; } if(data.lnRepeat>=LINE_REPEAT){ data.lnStay[X_LINE]=0; } data.lnStayNow[X_LINE]=1; } else{ data.lnStay[X_LINE]=1; } } if((data.lnStay[X_LINE]==1)&&(data.lnStay[Y_LINE]==0)){ if( ((pow_x<0)&&((data.lnRawOrderLog1[0]==A_SPOT)&&(data.lnRawOrderLog1[1]==B_SPOT))&&((data.irPosition==12)||(data.irPosition==13)))|| ((pow_x<0)&&((data.lnRawOrderLog1[0]==B_SPOT)&&(data.lnRawOrderLog1[1]==A_SPOT))&&((data.irPosition==12)||(data.irPosition==13)))|| ((pow_x<0)&&((data.lnRawOrderLog1[0]==C_SPOT)&&(1 ))&&((data.irPosition==15)||(data.irPosition==16))) ){ if(data.ping[L_PING]<WhiteToWallPlus[X_PING]){ data.lnStay[X_LINE]=0; } else{ data.lnStay[X_LINE]=1; } if(data.lnRepeat>=LINE_REPEAT){ data.lnStay[X_LINE]=0; } data.lnStayNow[X_LINE]=1; } else{ data.lnStay[X_LINE]=1; } } //x2 if((data.lnStay[X_LINE]==0)&&(data.lnStay[Y_LINE]==1)){ if( ((pow_y>0)&&((data.lnRawOrderLog1[0]==A_SPOT)&&(data.lnRawOrderLog1[1]==C_SPOT))&&((data.irPosition== 9)||(data.irPosition==10)))|| ((pow_y>0)&&((data.lnRawOrderLog1[0]==B_SPOT)&&(data.lnRawOrderLog1[1]==C_SPOT))&&((data.irPosition==12)||(data.irPosition==13))) ){ if(data.ping[F_PING]<WhiteToWallPlus[Y_PING]){ data.lnStay[Y_LINE]=0; } else{ data.lnStay[Y_LINE]=1; } if(data.lnRepeat>=LINE_REPEAT){ data.lnStay[Y_LINE]=0; } data.lnStayNow[Y_LINE]=1; } else{ data.lnStay[Y_LINE]=1; } if( ((pow_y<0)&&((data.lnRawOrderLog1[0]==A_SPOT)&&(data.lnRawOrderLog1[1]==C_SPOT))&&((data.irPosition==18)||(data.irPosition==19)))|| ((pow_y<0)&&((data.lnRawOrderLog1[0]==B_SPOT)&&(data.lnRawOrderLog1[1]==C_SPOT))&&((data.irPosition==15)||(data.irPosition==16))) ){ if(data.ping[B_PING]<WhiteToWallPlus[Y_PING]){ data.lnStay[Y_LINE]=0; } else{ data.lnStay[Y_LINE]=1; } if(data.lnRepeat>=LINE_REPEAT){ data.lnStay[Y_LINE]=0; } data.lnStayNow[Y_LINE]=1; } else{ data.lnStay[Y_LINE]=1; } } if( (data.lnRepeat>=2) ){ if( ((pow_y>0)&&((data.ping[F_PING]<40)&&(1)))|| ((pow_y<0)&&((data.ping[B_PING]<40)&&(1))) ){ data.lnStay[Y_LINE]=0; } if( ((pow_x>0)&&((data.ping[R_PING]<40)&&(1)))|| ((pow_x<0)&&((data.ping[L_PING]<40)&&(1))) ){ data.lnStay[X_LINE]=0; } } } } else{ data.lnStay[X_LINE]=data.lnStay[Y_LINE]=1; } } void JudgeInSide(void){ data.FieldSpot = LINE_INSIDE; data.NonWall[L_LINE] = data.NonWall[R_LINE] = data.NonWall[F_LINE] = data.NonWall[B_LINE] = 0; LineLiberate(); LineRankClear(); //Line_home.detach(); }