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

Dependencies:   mbed AQM1602 HMC6352 PID

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers LineProcess.cpp Source File

LineProcess.cpp

00001 #include "mbed.h"
00002 #include "extern.h"
00003 
00004 void LineJudgeSlow(double pow_x, double pow_y, double *x, double *y){
00005     uint8_t LineState;
00006     uint8_t LineSum;
00007     
00008     //line
00009     LineState = 0;
00010     
00011     LineSum = ((data.lnHold>>2)&0x1)+((data.lnHold>>1)&0x1)+((data.lnHold>>0)&0x1);
00012     if((LineSum==3)||(data.FieldSpot==LINE_OUTSIDE)){
00013         LineState = 3;
00014     }
00015     else if(LineSum==2){
00016         LineState = 2;
00017     }
00018     else if(LineSum==1){
00019         LineState = 1;
00020     }
00021     else if(LineSum==0){
00022         LineState = 0;
00023     }
00024     
00025     
00026     if(pow_x>=0){
00027         if(data.ping[R_PING]<WhiteToWall[X_PING]) (*x)=LineDecline[LineState];
00028         else *x=1;
00029     }
00030     else{
00031         if(data.ping[L_PING]<WhiteToWall[X_PING]) (*x)=LineDecline[LineState];
00032         else *x=1;
00033     }
00034     
00035     if(pow_y>=0){
00036         if(data.ping[F_PING]<WhiteToWall[Y_PING]) (*y)=LineDecline[LineState];
00037         else *y=1;
00038     }
00039     else{
00040         if(data.ping[B_PING]<WhiteToWall[Y_PING]) (*y)=LineDecline[LineState];
00041         else *y=1;
00042     }
00043 }
00044 void LineJudgeSlow2(double pow_x, double pow_y, double *x, double *y, uint8_t *px, uint8_t *py){
00045     uint8_t LineState;
00046     uint8_t LineSum;
00047     
00048     //line
00049     LineState = 0;
00050     
00051     LineSum = (data.lnRawOrder[0]!=LINE_EMPTY)+(data.lnRawOrder[1]!=LINE_EMPTY)+(data.lnRawOrder[2]!=LINE_EMPTY);
00052     if(LineSum==3){
00053         LineState = 3;
00054     }
00055     else if(LineSum==2){
00056         LineState = 2;
00057     }
00058     else if(LineSum==1){
00059         LineState = 1;
00060     }
00061     else if(LineSum==0){
00062         LineState = 0;
00063     }
00064     
00065     if(LineSum>0){
00066         if(pow_x>=0){
00067             if((data.ping[R_PING]<WhiteToWall[X_PING])&&((*px)>LineDecrease[LineState])) (*px)=LineDecrease[LineState];
00068         }
00069         else{
00070             if((data.ping[L_PING]<WhiteToWall[X_PING])&&((*px)>LineDecrease[LineState])) (*px)=LineDecrease[LineState];
00071         }
00072         
00073         if(pow_y>=0){
00074             if((data.ping[F_PING]<WhiteToWall[Y_PING])&&((*py)>LineDecrease[LineState])) (*py)=LineDecrease[LineState];
00075         }
00076         else{
00077             if((data.ping[B_PING]<WhiteToWall[Y_PING])&&((*py)>LineDecrease[LineState])) (*py)=LineDecrease[LineState];
00078         }
00079     }
00080     else if(LineSum==0){
00081         ////超音波による減速
00082         if(pow_x>=0){
00083             if((data.ping[R_PING]<GoalEdgeToWall[X_PING])&&((*px)>LineDecrease[LineState])) (*px)=LineDecrease[LineState];
00084         }
00085         else{
00086             if((data.ping[L_PING]<GoalEdgeToWall[X_PING])&&((*px)>LineDecrease[LineState])) (*px)=LineDecrease[LineState];
00087         }
00088         
00089         if(pow_y>=0){
00090             //if((data.ping[F_PING]<15)&&((*py)>LineDecrease[LineState])) (*py)=LineDecrease[LineState];
00091         }
00092         else{
00093             if((data.ping[B_PING]<15)&&((*py)>LineDecrease[LineState])) (*py)=LineDecrease[LineState];
00094         }
00095     }
00096     
00097     if((data.lnStayNow[X_LINE]==1)&&((*px)>15)){
00098         (*px)=15;
00099     }
00100     if((data.lnStayNow[Y_LINE]==1)&&((*py)>15)){
00101         (*py)=15;
00102     }
00103     
00104     ////超音波による減速
00105     if(pow_x>=0){
00106         if((data.ping[R_PING]<GoalEdgeToWall[X_PING])&&((*px)>20)){
00107             (*px)=20;
00108             if((*py)>30) (*py)=30;
00109         }
00110     }
00111     else{
00112         if((data.ping[L_PING]<GoalEdgeToWall[X_PING])&&((*px)>20)){
00113             (*px)=20;
00114             if((*py)>30) (*py)=30;
00115         }
00116     }
00117     
00118     if(pow_y>=0){
00119         if((data.ping[F_PING]<WhiteToWallPlus[Y_PING])&&((*py)>25)) (*py)=25;
00120     }
00121     else{
00122         if((data.ping[B_PING]<WhiteToWallPlus[Y_PING])&&((*py)>25)) (*py)=25;
00123     }
00124     
00125     *x=1;
00126     *y=1;
00127 }
00128 void LineJudgeReturn(double pow_x, double pow_y, double *x, double *y){
00129     const int8_t static LineReturn[5] = {0, 0, 0, 0, 20};
00130     uint8_t LinePingState[4];
00131     //◎ボールを追う力とラインから離れる力の向きが違うならばラインから離れる力が優先される.
00132     //◎ボールを追う力とラインから離れる力の向きが同じならばボールを追う力が優先される.
00133     //◎ラインセンサ全てが場外になるまではボールを追う力は作用しない.ボールを追う力は場内に出るまで作用する.
00134     //×ラインのほぼ場外では常時ラインから離れる力が優先される.
00135     //※場外判定を行うには再び場内に戻る必要がある.
00136     
00137     if(data.FieldSpot==LINE_OUTSIDE){
00138         
00139         LinePingState[L_PING]=(data.ping[L_PING]<WhiteToWall[X_PING]);
00140         LinePingState[R_PING]=(data.ping[R_PING]<WhiteToWall[X_PING]);
00141         LinePingState[F_PING]=(data.ping[F_PING]<WhiteToWall[Y_PING]);
00142         LinePingState[B_PING]=(data.ping[B_PING]<WhiteToWall[Y_PING]);
00143         
00144         //line間際の復帰力以外の力を作用させるか否か
00145         data.lnStop[X_LINE]=1;
00146         data.lnStop[Y_LINE]=1;
00147         
00148         data.ReturnDir[X_LINE]=LINE_EMPTY;
00149         data.ReturnDir[Y_LINE]=LINE_EMPTY;
00150         
00151         //x
00152         if(data.ReturnDir[X_LINE]==L_LINE){
00153             if(pow_x<0){
00154               *x = 0;
00155               data.lnStop[X_LINE]=1;
00156             }
00157             else{
00158               *x = -LineReturn[4];
00159               data.lnStop[X_LINE]=0;
00160             }
00161         }
00162         else if(data.ReturnDir[X_LINE]==R_LINE){
00163             if(pow_x>0){
00164               *x = 0;
00165               data.lnStop[X_LINE]=1;
00166             }
00167             else{
00168               *x = LineReturn[4];
00169               data.lnStop[X_LINE]=0;
00170             }
00171         }
00172         else if(data.ReturnDir[X_LINE]==LINE_EMPTY){
00173             if((LinePingState[L_PING]==0)&&(LinePingState[R_PING]==0)){
00174                 /*if(pow_x>0){
00175                   *x = -pow_x*(1-0.75);
00176                 }
00177                 else{
00178                   *x = pow_x*(1-0.75);
00179                 }*/
00180                 data.lnStop[X_LINE]=1;
00181             }
00182             if((LinePingState[L_PING]==0)&&(LinePingState[R_PING]==1)){
00183                 
00184                 data.ReturnDir[X_LINE]=L_LINE;
00185                 
00186                 /*if(pow_x<0){
00187                   *x = 0;
00188                   data.lnStop[X_LINE]=1;
00189                 }
00190                 else{
00191                   *x = -LineReturn[4];
00192                   data.lnStop[X_LINE]=0;
00193                 }*/
00194                 *x = -LineReturn[4];
00195                 data.lnStop[X_LINE]=0;
00196             }
00197             if((LinePingState[L_PING]==1)&&(LinePingState[R_PING]==0)){
00198                 
00199                 data.ReturnDir[X_LINE]=R_LINE;
00200                 
00201                 /*if(pow_x>0){
00202                   *x = 0;
00203                   data.lnStop[X_LINE]=1;
00204                 }
00205                 else{
00206                   *x = LineReturn[4];
00207                   data.lnStop[X_LINE]=0;
00208                 }*/
00209                 *x = LineReturn[4];
00210                 data.lnStop[X_LINE]=0;
00211             }
00212             if((LinePingState[L_PING]==1)&&(LinePingState[R_PING]==1)){
00213                 
00214                 if(
00215                     (data.lnOrder[0]==A_SPOT)&&(data.lnOrder[1]==C_SPOT)&&(data.lnOrder[2]==B_SPOT)
00216                 ){
00217                     *x = -LineReturn[4];
00218                     data.lnStop[X_LINE]=0;
00219                 }
00220                 else if(
00221                     (data.lnOrder[0]==B_SPOT)&&(data.lnOrder[1]==C_SPOT)&&(data.lnOrder[2]==A_SPOT)
00222                 ){
00223                     *x = LineReturn[4];
00224                     data.lnStop[X_LINE]=0;
00225                 }
00226                 else{
00227                     *x = 0;
00228                     data.lnStop[X_LINE]=0;
00229                 }
00230             }
00231         }
00232         //y
00233         if(data.ReturnDir[Y_LINE]==F_LINE){
00234             if(pow_y>0){
00235               *y = 0;
00236               data.lnStop[Y_LINE]=1;
00237             }
00238             else{
00239               *y = LineReturn[4];
00240               data.lnStop[Y_LINE]=0;
00241             }
00242         }
00243         else if(data.ReturnDir[Y_LINE]==B_LINE){
00244             if(pow_y<0){
00245               *y = 0;
00246               data.lnStop[Y_LINE]=1;
00247             }
00248             else{
00249               *y = -LineReturn[4];
00250               data.lnStop[Y_LINE]=0;
00251             }
00252         }
00253         else if(data.ReturnDir[Y_LINE]==LINE_EMPTY){
00254             if((LinePingState[B_PING]==0)&&(LinePingState[F_PING]==0)){
00255                 /*if(pow_y>0){
00256                   *y = -pow_y*(1-0.75);
00257                 }
00258                 else{
00259                   *y = pow_y*(1-0.75);
00260                 }*/
00261                 data.lnStop[Y_LINE]=1;
00262             }
00263             if((LinePingState[B_PING]==0)&&(LinePingState[F_PING]==1)){
00264                 
00265                 data.ReturnDir[Y_LINE]=B_LINE;
00266                 
00267                 if(pow_y<0){
00268                   *y = 0;
00269                   data.lnStop[Y_LINE]=1;
00270                 }
00271                 else{
00272                   *y = -LineReturn[4];
00273                   data.lnStop[Y_LINE]=0;
00274                 }
00275             }
00276             if((LinePingState[B_PING]==1)&&(LinePingState[F_PING]==0)){
00277                 
00278                 data.ReturnDir[Y_LINE]=F_LINE;
00279                 
00280                 if(pow_y>0){
00281                   *y = 0;
00282                   data.lnStop[Y_LINE]=1;
00283                 }
00284                 else{
00285                   *y = LineReturn[4];
00286                   data.lnStop[Y_LINE]=0;
00287                 }
00288             }
00289             if((LinePingState[B_PING]==1)&&(LinePingState[F_PING]==1)){
00290                 if(
00291                     (data.lnOrder[0]==C_SPOT)&&(data.lnOrder[1]==A_SPOT)&&(data.lnOrder[2]==B_SPOT)||
00292                     (data.lnOrder[0]==C_SPOT)&&(data.lnOrder[1]==B_SPOT)&&(data.lnOrder[2]==A_SPOT)
00293                 ){
00294                     *y = LineReturn[4];
00295                     data.lnStop[Y_LINE]=0;
00296                 }
00297                 else if(
00298                     (data.lnOrder[0]==A_SPOT)&&(data.lnOrder[1]==B_SPOT)&&(data.lnOrder[2]==C_SPOT)||
00299                     (data.lnOrder[0]==B_SPOT)&&(data.lnOrder[1]==A_SPOT)&&(data.lnOrder[2]==C_SPOT)
00300                 ){
00301                     *y = -LineReturn[4];
00302                     data.lnStop[Y_LINE]=0;
00303                 }
00304                 else{
00305                     *y = 0;
00306                     data.lnStop[Y_LINE]=0;
00307                 }
00308             }
00309         }
00310         //none
00311         if((LinePingState[L_PING]==1)&&(LinePingState[R_PING]==1)&&(LinePingState[F_PING]==1)&&(LinePingState[B_PING]==1)){
00312             //turn!
00313         }
00314         
00315     }
00316     else{//data.FieldSpot==LINE_INSIDE
00317     
00318         data.ReturnDir[X_LINE]=LINE_EMPTY;
00319         data.ReturnDir[Y_LINE]=LINE_EMPTY;
00320         
00321         *x = 0;
00322         *y = 0;
00323         
00324         //line間際の復帰力以外の力を作用させるか否か
00325         data.lnStop[X_LINE]=1;
00326         data.lnStop[Y_LINE]=1;
00327        /* 
00328         if(
00329             (data.lnRawMemory[A_SPOT]==1)&&
00330             (data.lnRawMemory[B_SPOT]==1)&&
00331             (data.lnRawMemory[C_SPOT]==0)
00332         ){
00333             data.lnStop[Y_LINE]=0;
00334             *y = -LineReturn[4];
00335         }
00336         else if(
00337             (data.lnRawMemory[A_SPOT]==0)&&
00338             (data.lnRawMemory[B_SPOT]==0)&&
00339             (data.lnRawMemory[C_SPOT]==1)
00340         ){
00341             data.lnStop[Y_LINE]=0;
00342             *y = LineReturn[4];
00343         }*/
00344     }
00345 }
00346 void LineJudgeReturn2(double pow_x, double pow_y, double *x, double *y){
00347     const int8_t static LineReturn[5] = {0, 0, 0, 0, 20};
00348     uint8_t LinePingState[4];
00349     //JSO2
00350     static uint8_t lnRawReturn1 = 0;
00351     //◎ボールを追う力とラインから離れる力の向きが違うならばラインから離れる力が優先される.
00352     //◎ボールを追う力とラインから離れる力の向きが同じならばボールを追う力が優先される.
00353     //◎ラインセンサ全てが場外になるまではボールを追う力は作用しない.ボールを追う力は場内に出るまで作用する.
00354     //×ラインのほぼ場外では常時ラインから離れる力が優先される.
00355     //※場外判定を行うには再び場内に戻る必要がある.
00356     
00357     data.FieldSpot=LINE_INSIDE;
00358     
00359     if(data.FieldSpot==LINE_OUTSIDE){
00360     }
00361     else{//data.FieldSpot==LINE_INSIDE
00362     
00363         data.ReturnDir[X_LINE]=LINE_EMPTY;
00364         data.ReturnDir[Y_LINE]=LINE_EMPTY;
00365         
00366         *x = 0;
00367         *y = 0;
00368         
00369         //line間際の復帰力以外の力を作用させるか否か
00370         data.lnStop[X_LINE]=1;
00371         data.lnStop[Y_LINE]=1;
00372         
00373         if(//y
00374             ((data.lnRawOrder[0]==A_SPOT)&&(data.lnRawOrder[1]==B_SPOT)&&(1))||
00375             ((data.lnRawOrder[0]==B_SPOT)&&(data.lnRawOrder[1]==A_SPOT)&&(1))
00376         ){
00377             data.lnStop[Y_LINE]=0;
00378             *y = -LineReturn[4];
00379             //JSO1
00380             if(
00381                 (data.ping[F_PING]<45)&&
00382                 (data.lnRawReturn==1)//JSO2
00383             ){
00384                 data.lnStop[X_LINE]=0;
00385             }
00386             //JSO2
00387             if(
00388                 (
00389                     ((Line[A_SPOT].read()==1)&&(Line[B_SPOT].read()==0))||
00390                     ((LineHolding[A_SPOT].read()==1)&&(LineHolding[B_SPOT].read()==0))
00391                 )&&
00392                 (data.ping[F_PING]>45)&&
00393                 (data.ping[F_PING]<200)&&
00394                 (data.ping[R_PING]<25)&&
00395                 (data.ping[L_PING]>40)
00396             ){
00397                 *x = -LineReturn[4];
00398                 data.lnStop[X_LINE]=0;
00399             }
00400             if(
00401                 (
00402                     ((Line[A_SPOT].read()==0)&&(Line[B_SPOT].read()==1))||
00403                     ((LineHolding[A_SPOT].read()==0)&&(LineHolding[B_SPOT].read()==1))
00404                 )&&
00405                 (data.ping[F_PING]>45)&&
00406                 (data.ping[F_PING]<200)&&
00407                 (data.ping[L_PING]<25)&&
00408                 (data.ping[R_PING]>40)
00409             ){
00410                 *x = LineReturn[4];
00411                 data.lnStop[X_LINE]=0;
00412             }
00413         }
00414         else if(
00415             ((data.lnRawOrder[0]==C_SPOT)&&(1)&&(1))
00416         ){
00417             data.lnStop[Y_LINE]=0;
00418             *y = LineReturn[4];
00419             
00420             //JSO1
00421             if(
00422                 (data.ping[B_PING]<45)&&
00423                 (data.lnRawReturn==1)
00424             ){
00425                 data.lnStop[X_LINE]=0;
00426             }
00427         }
00428         else if(//x
00429             ((data.lnRawOrder[0]==A_SPOT)&&(data.lnRawOrder[1]==C_SPOT)&&(1))
00430         ){
00431             *x = -LineReturn[4];
00432             data.lnStop[X_LINE]=0;
00433         }
00434         else if(
00435             ((data.lnRawOrder[0]==B_SPOT)&&(data.lnRawOrder[1]==C_SPOT)&&(1))
00436         ){
00437             *x = LineReturn[4];
00438             data.lnStop[X_LINE]=0;
00439         }
00440         
00441         if(
00442             ((*x)!=0)||
00443             ((*y)!=0)
00444         ){
00445             
00446             data.lnRawReturn=1;
00447             
00448             LinePingState[L_PING]=(data.ping[L_PING]<WhiteToWallPlus[X_PING]);
00449             LinePingState[R_PING]=(data.ping[R_PING]<WhiteToWallPlus[X_PING]);
00450             LinePingState[F_PING]=(data.ping[F_PING]<WhiteToWallPlus[Y_PING]);
00451             LinePingState[B_PING]=(data.ping[B_PING]<WhiteToWallPlus[Y_PING]);
00452             //x
00453             if(data.lnStop[X_LINE]==1){
00454                 if((LinePingState[L_PING]==0)&&(LinePingState[R_PING]==1)){
00455                     *x = -LineReturn[4];
00456                     data.lnStop[X_LINE]=0;
00457                 }
00458                 if((LinePingState[L_PING]==1)&&(LinePingState[R_PING]==0)){
00459                     *x = LineReturn[4];
00460                     data.lnStop[X_LINE]=0;
00461                 }
00462                 if((LinePingState[L_PING]==1)&&(LinePingState[R_PING]==1)){
00463                     *x = 0;
00464                     data.lnStop[X_LINE]=0;
00465                 }
00466             }
00467             //y
00468             if(data.lnStop[Y_LINE]==1){
00469                 if((LinePingState[B_PING]==0)&&(LinePingState[F_PING]==1)){
00470                     if(pow_y<0){
00471                       *y = 0;
00472                       data.lnStop[Y_LINE]=1;
00473                     }
00474                     else{
00475                       *y = -LineReturn[4];
00476                       data.lnStop[Y_LINE]=0;
00477                     }
00478                 }
00479                 //JSO2
00480                 if((LineHolding[A_SPOT].read()==1)&&(LineHolding[B_SPOT].read()==1)&&(LineHolding[C_SPOT].read()==0)&&(data.lnRawReturn==1)){
00481                     *y = -LineReturn[4];
00482                     data.lnStop[Y_LINE]=0;
00483                 }
00484                 
00485                 if((LinePingState[B_PING]==1)&&(LinePingState[F_PING]==0)){
00486                     if(pow_y>0){
00487                       *y = 0;
00488                       data.lnStop[Y_LINE]=1;
00489                     }
00490                     else{
00491                       *y = LineReturn[4];
00492                       data.lnStop[Y_LINE]=0;
00493                     }
00494                 }
00495                 if((LinePingState[B_PING]==1)&&(LinePingState[F_PING]==1)){
00496                     *y = 0;
00497                     data.lnStop[Y_LINE]=0;
00498                 }
00499             }
00500         }
00501         else{
00502             data.lnRawReturn=0;
00503             
00504             //JSO3
00505             if((data.lnOrder[0]==A_SPOT)&&(data.lnOrder[1]==LINE_EMPTY)&&(pow_x>0)){
00506                 data.lnStop[X_LINE]=0;
00507             }
00508             if((data.lnOrder[0]==B_SPOT)&&(data.lnOrder[1]==LINE_EMPTY)&&(pow_x<0)){
00509                 data.lnStop[X_LINE]=0;
00510             }
00511             //JSO3
00512             if((Line[C_SPOT].read()==1)&&(1)&&(pow_y>0)){
00513                 data.lnStop[Y_LINE]=0;
00514             }
00515         }
00516         //JSO3
00517         if((Line[C_SPOT].read()==1)&&(1)&&(pow_y>0)){
00518             data.lnStop[Y_LINE]=0;
00519         }
00520         //JSO1
00521         if(data.lnRawReturn==1){
00522             //JSO2
00523             if((lnRawReturn1==0)){
00524                 LineLiberate();
00525                 lnRawReturn1=1;
00526             }
00527             
00528             if(
00529                 (
00530                     ((data.lnRawOrder[0]==A_SPOT)&&(data.lnRawOrder[1]==C_SPOT)&&(1))||
00531                     ((data.lnRawOrder[0]==B_SPOT)&&(data.lnRawOrder[1]==C_SPOT)&&(1))
00532                 )&&
00533                 //((Line[A_SPOT].read()==1)&&(Line[B_SPOT].read()==1))&&//JSO1
00534                 ((LineHolding[A_SPOT].read()==1)&&(LineHolding[B_SPOT].read()==1))&&//JSO2
00535                 ((data.ping[F_PING]<45)&&(1))&&//JSO2
00536                 //(!((data.ping[B_PING]<40)&&(data.ping[B_PING]>25)))&&//JSO2
00537                 ((data.lnRawOrder[0]!=C_SPOT)&&(data.lnRawOrderLog1[0]!=C_SPOT)&&(data.lnRawOrderLog2[0]!=C_SPOT))
00538                 
00539             ){
00540                 *y = -LineReturn[4];
00541                 data.lnStop[Y_LINE]=0;//JSO2
00542             }
00543         }
00544         else{
00545             lnRawReturn1=0;
00546             
00547             
00548             if((LinePingState[L_PING]==0)&&(LinePingState[R_PING]==1)){
00549                 *x = -LineReturn[4];
00550                 data.lnStop[X_LINE]=0;
00551             }
00552             if((LinePingState[L_PING]==1)&&(LinePingState[R_PING]==0)){
00553                 *x = LineReturn[4];
00554                 data.lnStop[X_LINE]=0;
00555             }
00556             
00557         }
00558         
00559     }
00560 }
00561 void LineJudgeReset(double pow_x, double pow_y, double *x, double *y){
00562     //static uint8_t NewLineCorner[4]={LINE_EMPTY, LINE_EMPTY, LINE_EMPTY, LINE_EMPTY};
00563     //static uint8_t LastLineCorner[4]={LINE_EMPTY, LINE_EMPTY, LINE_EMPTY, LINE_EMPTY};
00564     static uint8_t NewLineCorner[4]={LINE_EMPTY, LINE_EMPTY, LINE_EMPTY, LINE_EMPTY};
00565     static uint8_t LastLineCorner[4]={LINE_EMPTY, LINE_EMPTY, LINE_EMPTY, LINE_EMPTY};
00566     
00567     if((/*data.lnRaw==0*/1)&&(data.lnHold==7)){
00568         if(data.FieldSpot==LINE_INSIDE){
00569             
00570             data.lnCorner[L_LINE] = (data.ping[L_PING]<OutToWall[X_PING]);
00571             data.lnCorner[R_LINE] = (data.ping[R_PING]<OutToWall[X_PING]);
00572             data.lnCorner[F_LINE] = (data.ping[F_PING]<OutToWall[Y_PING]);
00573             data.lnCorner[B_LINE] = (data.ping[B_PING]<OutToWall[Y_PING]);
00574             if(
00575                 (data.lnCorner[L_LINE])||
00576                 (data.lnCorner[R_LINE])||
00577                 (data.lnCorner[F_LINE])||
00578                 (data.lnCorner[B_LINE])
00579             ){
00580                 
00581                 data.NonWall[L_LINE] = (data.ping[L_PING]>WhiteToWall[X_PING]);
00582                 data.NonWall[R_LINE] = (data.ping[R_PING]>WhiteToWall[X_PING]);
00583                 data.NonWall[F_LINE] = (data.ping[F_PING]>WhiteToWall[Y_PING]);
00584                 data.NonWall[B_LINE] = (data.ping[B_PING]>WhiteToWall[Y_PING]);
00585                 
00586                 
00587                 
00588                 ///*
00589                 LastLineCorner[L_LINE]=NewLineCorner[L_LINE];
00590                 LastLineCorner[R_LINE]=NewLineCorner[R_LINE];
00591                 LastLineCorner[F_LINE]=NewLineCorner[F_LINE];
00592                 LastLineCorner[B_LINE]=NewLineCorner[B_LINE];
00593                 
00594                 NewLineCorner[L_LINE]=data.lnCorner[L_LINE];
00595                 NewLineCorner[R_LINE]=data.lnCorner[R_LINE];
00596                 NewLineCorner[F_LINE]=data.lnCorner[F_LINE];
00597                 NewLineCorner[B_LINE]=data.lnCorner[B_LINE];
00598                 
00599                 if(
00600                     (LastLineCorner[L_LINE]==NewLineCorner[L_LINE])&&
00601                     (LastLineCorner[R_LINE]==NewLineCorner[R_LINE])&&
00602                     (LastLineCorner[F_LINE]==NewLineCorner[F_LINE])&&
00603                     (LastLineCorner[B_LINE]==NewLineCorner[B_LINE])
00604                 ){
00605                     data.lnRepeat++;
00606                 }
00607                 else{
00608                     data.lnRepeat=0;
00609                 }
00610                 //*/
00611                 
00612                 data.FieldSpot = LINE_OUTSIDE;
00613                 LineLiberate();
00614             }
00615         }
00616         else if(data.FieldSpot==LINE_OUTSIDE){
00617             if(data.lnRaw==0){
00618                 data.FieldSpot = LINE_INSIDE;
00619                 data.NonWall[L_LINE] = data.NonWall[R_LINE] = data.NonWall[F_LINE] = data.NonWall[B_LINE] = 0;
00620                 LineLiberate();
00621                 LineRankClear();
00622             }
00623         }
00624     }
00625     if(data.FieldSpot == LINE_OUTSIDE){
00626         if(
00627             (
00628                 (data.ping[L_PING]>=WhiteToWall[X_PING])||
00629                 (data.NonWall[L_LINE]==1)||
00630                 ((data.lnOrder[0]==A_SPOT)&&(data.lnOrder[1]==C_SPOT))
00631                 //(data.lnOrder[0]==A_SPOT)
00632             )&&
00633             (
00634                 (data.ping[R_PING]>=WhiteToWall[X_PING])||
00635                 (data.NonWall[R_LINE]==1)||
00636                 ((data.lnOrder[0]==B_SPOT)&&(data.lnOrder[1]==C_SPOT))
00637                 //(data.lnOrder[0]==B_SPOT)
00638             )&&
00639             (
00640                 (data.ping[F_PING]>=WhiteToWall[Y_PING])||
00641                 (data.NonWall[F_LINE]==1)||
00642                 ((data.lnOrder[0]==C_SPOT)&&(data.lnOrder[1]==A_SPOT))||
00643                 ((data.lnOrder[0]==C_SPOT)&&(data.lnOrder[1]==B_SPOT))
00644             )&&
00645                 ((data.ping[B_PING]>=WhiteToWall[Y_PING])||
00646                 (data.NonWall[B_LINE]==1)||
00647                 ((data.lnOrder[0]==A_SPOT)&&(data.lnOrder[1]==B_SPOT))||
00648                 ((data.lnOrder[0]==B_SPOT)&&(data.lnOrder[1]==A_SPOT))
00649             )
00650         ){
00651             data.FieldSpot = LINE_INSIDE;
00652             data.NonWall[L_LINE] = data.NonWall[R_LINE] = data.NonWall[F_LINE] = data.NonWall[B_LINE] = 0;
00653             LineLiberate();
00654             LineRankClear();
00655         }
00656     }
00657     if((data.FieldSpot == LINE_INSIDE)&&(0<data.lnHold)&&(data.lnHold<7)&&(data.lnRaw==0)){
00658         if(
00659             (
00660                 (
00661                     (data.ping[L_PING]>=WhiteToWall[X_PING])||
00662                     ((data.lnOrder[0]==A_SPOT)&&(data.lnOrder[1]==C_SPOT))
00663                     //(data.lnOrder[0]==A_SPOT)
00664                 )&&
00665                 (
00666                     (data.ping[R_PING]>=WhiteToWall[X_PING])||
00667                     ((data.lnOrder[0]==B_SPOT)&&(data.lnOrder[1]==C_SPOT))
00668                     //(data.lnOrder[0]==B_SPOT)
00669                 )&&
00670                 (
00671                     (data.ping[F_PING]>=WhiteToWall[Y_PING])||
00672                     ((data.lnOrder[0]==C_SPOT)&&(data.lnOrder[1]==A_SPOT))||
00673                     ((data.lnOrder[0]==C_SPOT)&&(data.lnOrder[1]==B_SPOT))
00674                 )&&
00675                 (
00676                     (data.ping[B_PING]>=WhiteToWall[Y_PING])||
00677                     ((data.lnOrder[0]==A_SPOT)&&(data.lnOrder[1]==B_SPOT))||
00678                     ((data.lnOrder[0]==B_SPOT)&&(data.lnOrder[1]==A_SPOT))
00679                 )
00680             )
00681             ||
00682             (
00683                 (data.ping[L_PING]>=GoalEdgeToWall[X_PING])&&
00684                 (data.ping[R_PING]>=GoalEdgeToWall[X_PING])
00685             )
00686         ){
00687             data.NonWall[L_LINE] = data.NonWall[R_LINE] = data.NonWall[F_LINE] = data.NonWall[B_LINE] = 0;
00688             LineLiberate();
00689         }
00690     }
00691     ///*
00692     if(
00693         (data.irNotice==IR_NONE)||
00694         (data.irNotice==IR_FAR)||
00695         (
00696             (data.ping[L_PING]>=GoalEdgeToWall[X_PING])&&
00697             (data.ping[R_PING]>=GoalEdgeToWall[X_PING])
00698         )
00699     ){
00700         data.lnRepeat = 0;
00701         
00702         NewLineCorner[L_LINE]=LINE_EMPTY;
00703         NewLineCorner[R_LINE]=LINE_EMPTY;
00704         NewLineCorner[F_LINE]=LINE_EMPTY;
00705         NewLineCorner[B_LINE]=LINE_EMPTY;
00706         
00707         LastLineCorner[L_LINE]=LINE_EMPTY;
00708         LastLineCorner[R_LINE]=LINE_EMPTY;
00709         LastLineCorner[F_LINE]=LINE_EMPTY;
00710         LastLineCorner[B_LINE]=LINE_EMPTY;
00711     }
00712     //data.lnRepeat=0;
00713     if((data.lnRepeat>0)&&(data.FieldSpot == LINE_INSIDE)){
00714         //x
00715         if(
00716             ((pow_x>=0)&&(NewLineCorner[R_LINE]))||
00717             ((pow_x<0)&&(NewLineCorner[L_LINE]))
00718         ){
00719             data.lnStay[X_LINE]=0;
00720         }
00721         else{
00722             data.lnStay[X_LINE]=1;
00723         }
00724         //y
00725         if(
00726             ((pow_y>=0)&&(NewLineCorner[F_LINE]))||
00727             ((pow_y<0)&&(NewLineCorner[B_LINE]))
00728         ){
00729             data.lnStay[Y_LINE]=0;
00730         }
00731         else{
00732             data.lnStay[Y_LINE]=1;
00733         }
00734     }
00735     else{
00736         data.lnStay[X_LINE]=data.lnStay[Y_LINE]=1;
00737     }
00738     //*/
00739     
00740 }
00741 void LineJudgeReset2(double pow_x, double pow_y, double *x, double *y){
00742     
00743     if(data.lnRepeat==0){
00744         data.lnStayNow[X_LINE]=0;
00745         data.lnStayNow[Y_LINE]=0;
00746     }
00747     data.lnStay[X_LINE]=1;
00748     data.lnStay[Y_LINE]=1;
00749     
00750     if((data.irNotice==IR_FAR)&&(data.lnRepeat>1)){
00751         data.lnRepeat=1;
00752     }
00753     
00754     if(
00755         (data.irNotice==IR_NONE)||
00756         //(data.irNotice==IR_FAR)||
00757         //(data.irLastPosition<=7)||
00758         (
00759             (!(
00760                 (data.irPosition==data.irLastPosition)||
00761                 (data.irPosition==(ir_posi_s[(data.irLastPosition-8+24+1)%12]))||
00762                 (data.irPosition==(ir_posi_s[(data.irLastPosition-8+24-1)%12]))||
00763                 (data.irPosition==(ir_posi_s[(data.irLastPosition-8+24+2)%12]))||
00764                 (data.irPosition==(ir_posi_s[(data.irLastPosition-8+24-2)%12]))
00765                 //((data.irPosition==(ir_posi_s[(data.irLastPosition-8+24+3)%12]))&&(cmps_set.GoalDeg==0))||
00766                 //((data.irPosition==(ir_posi_s[(data.irLastPosition-8+24-3)%12]))&&(cmps_set.GoalDeg==0))
00767             ))&&(
00768                 (data.irLastNotice==IR_CLOSE)||
00769                 (data.irLastNotice==IR_CLOSER)
00770             )
00771         )
00772     ){
00773         data.lnRepeat = 0;
00774         
00775         LineRawLogReset();
00776     }
00777     //data.lnRepeat=0;
00778     //if((data.lnRepeat==1)&&((data.lnRawOrder[0]==LINE_EMPTY)&&(data.lnRawOrder[1]==LINE_EMPTY)&&(data.lnRawOrder[2]==LINE_EMPTY))){
00779     if(
00780         (data.lnRepeat>=1)&&
00781         (data.lnRawOrder[0]==LINE_EMPTY)/*&&
00782         (
00783             (
00784                 (data.irPosition==data.irLastPosition)||
00785                 (data.irPosition==(data.irLastPosition+1))||
00786                 (data.irPosition==(data.irLastPosition-1))||
00787                 (data.irPosition==(data.irLastPosition+11))||
00788                 (data.irPosition==(data.irLastPosition-11))
00789             )&&
00790             (
00791                 (data.irNotice==IR_CLOSE)||
00792                 (data.irNotice==IR_CLOSER)
00793             )
00794         )*/
00795     ){
00796         //y
00797         if(
00798             ((pow_y>0)&&((data.lnRawOrderLog1[0]==A_SPOT)&&(data.lnRawOrderLog1[1]==B_SPOT)&&(1)))||
00799             ((pow_y>0)&&((data.lnRawOrderLog1[0]==B_SPOT)&&(data.lnRawOrderLog1[1]==A_SPOT)&&(1)))
00800         ){
00801             if(data.ping[F_PING]<WhiteToWallPlus[Y_PING]){
00802                 data.lnStay[Y_LINE]=0;
00803             }
00804             else{
00805                 data.lnStay[Y_LINE]=1;
00806             }
00807             data.lnStay[Y_LINE]=0;
00808             data.lnStayNow[Y_LINE]=1;
00809         }
00810         else{
00811             data.lnStay[Y_LINE]=1;
00812         }
00813         if(
00814             ((pow_y<0)&&((data.lnRawOrderLog1[0]==C_SPOT)&&(1)&&(1)))
00815         ){
00816             if(data.ping[B_PING]<WhiteToWallPlus[Y_PING]){
00817                 data.lnStay[Y_LINE]=0;
00818             }
00819             else{
00820                 data.lnStay[Y_LINE]=1;
00821             }
00822             data.lnStay[Y_LINE]=0;
00823             data.lnStayNow[Y_LINE]=1;
00824         }
00825         else{
00826             data.lnStay[Y_LINE]=1;
00827         }
00828         //x
00829         if(
00830             ((pow_x>0)&&((data.lnRawOrderLog1[0]==A_SPOT)&&(data.lnRawOrderLog1[1]==C_SPOT)&&(1)))
00831         ){
00832             if(data.ping[R_PING]<WhiteToWallPlus[X_PING]){
00833                 data.lnStay[X_LINE]=0;
00834             }
00835             else{
00836                 data.lnStay[X_LINE]=1;
00837             }
00838             data.lnStay[X_LINE]=0;
00839             data.lnStayNow[X_LINE]=1;
00840         }
00841         else{
00842             data.lnStay[X_LINE]=1;
00843         }
00844         if(
00845             ((pow_x<0)&&((data.lnRawOrderLog1[0]==B_SPOT)&&(data.lnRawOrderLog1[1]==C_SPOT)&&(1)))
00846         ){
00847             if(data.ping[L_PING]<WhiteToWallPlus[X_PING]){
00848                 data.lnStay[X_LINE]=0;
00849             }
00850             else{
00851                 data.lnStay[X_LINE]=1;
00852             }
00853             data.lnStay[X_LINE]=0;
00854             data.lnStayNow[X_LINE]=1;
00855         }
00856         else{
00857             data.lnStay[X_LINE]=1;
00858         }
00859         if((data.irNotice==IR_CLOSE)||(data.irNotice==IR_CLOSER)){
00860             //y2
00861             if((data.lnStay[X_LINE]==1)&&(data.lnStay[Y_LINE]==0)){
00862                 if( 
00863                     ((pow_x>0)&&((data.lnRawOrderLog1[0]==A_SPOT)&&(data.lnRawOrderLog1[1]==B_SPOT))&&((data.irPosition== 9)||(data.irPosition==10)))||
00864                     ((pow_x>0)&&((data.lnRawOrderLog1[0]==B_SPOT)&&(data.lnRawOrderLog1[1]==A_SPOT))&&((data.irPosition== 9)||(data.irPosition==10)))||
00865                     ((pow_x>0)&&((data.lnRawOrderLog1[0]==C_SPOT)&&(1                             ))&&((data.irPosition==18)||(data.irPosition==19)))
00866                 ){
00867                     if(data.ping[R_PING]<WhiteToWallPlus[X_PING]){
00868                         data.lnStay[X_LINE]=0;
00869                     }
00870                     else{
00871                         data.lnStay[X_LINE]=1;
00872                     }
00873                     if(data.lnRepeat>=LINE_REPEAT){
00874                         data.lnStay[X_LINE]=0;
00875                     }
00876                     data.lnStayNow[X_LINE]=1;
00877                 }
00878                 else{
00879                     data.lnStay[X_LINE]=1;
00880                 }
00881             }
00882             if((data.lnStay[X_LINE]==1)&&(data.lnStay[Y_LINE]==0)){
00883                 if( 
00884                     ((pow_x<0)&&((data.lnRawOrderLog1[0]==A_SPOT)&&(data.lnRawOrderLog1[1]==B_SPOT))&&((data.irPosition==12)||(data.irPosition==13)))||
00885                     ((pow_x<0)&&((data.lnRawOrderLog1[0]==B_SPOT)&&(data.lnRawOrderLog1[1]==A_SPOT))&&((data.irPosition==12)||(data.irPosition==13)))||
00886                     ((pow_x<0)&&((data.lnRawOrderLog1[0]==C_SPOT)&&(1                             ))&&((data.irPosition==15)||(data.irPosition==16)))
00887                 ){
00888                     if(data.ping[L_PING]<WhiteToWallPlus[X_PING]){
00889                         data.lnStay[X_LINE]=0;
00890                     }
00891                     else{
00892                         data.lnStay[X_LINE]=1;
00893                     }
00894                     if(data.lnRepeat>=LINE_REPEAT){
00895                         data.lnStay[X_LINE]=0;
00896                     }
00897                     data.lnStayNow[X_LINE]=1;
00898                 }
00899                 else{
00900                     data.lnStay[X_LINE]=1;
00901                 }
00902             }
00903             //x2
00904             if((data.lnStay[X_LINE]==0)&&(data.lnStay[Y_LINE]==1)){
00905                 if(
00906                     ((pow_y>0)&&((data.lnRawOrderLog1[0]==A_SPOT)&&(data.lnRawOrderLog1[1]==C_SPOT))&&((data.irPosition== 9)||(data.irPosition==10)))||
00907                     ((pow_y>0)&&((data.lnRawOrderLog1[0]==B_SPOT)&&(data.lnRawOrderLog1[1]==C_SPOT))&&((data.irPosition==12)||(data.irPosition==13)))
00908                 ){
00909                     if(data.ping[F_PING]<WhiteToWallPlus[Y_PING]){
00910                         data.lnStay[Y_LINE]=0;
00911                     }
00912                     else{
00913                         data.lnStay[Y_LINE]=1;
00914                     }
00915                     if(data.lnRepeat>=LINE_REPEAT){
00916                         data.lnStay[Y_LINE]=0;
00917                     }
00918                     data.lnStayNow[Y_LINE]=1;
00919                 }
00920                 else{
00921                     data.lnStay[Y_LINE]=1;
00922                 }
00923                 
00924                 if(
00925                     ((pow_y<0)&&((data.lnRawOrderLog1[0]==A_SPOT)&&(data.lnRawOrderLog1[1]==C_SPOT))&&((data.irPosition==18)||(data.irPosition==19)))||
00926                     ((pow_y<0)&&((data.lnRawOrderLog1[0]==B_SPOT)&&(data.lnRawOrderLog1[1]==C_SPOT))&&((data.irPosition==15)||(data.irPosition==16)))
00927                 ){
00928                     if(data.ping[B_PING]<WhiteToWallPlus[Y_PING]){
00929                         data.lnStay[Y_LINE]=0;
00930                     }
00931                     else{
00932                         data.lnStay[Y_LINE]=1;
00933                     }
00934                     if(data.lnRepeat>=LINE_REPEAT){
00935                         data.lnStay[Y_LINE]=0;
00936                     }
00937                     data.lnStayNow[Y_LINE]=1;
00938                 }
00939                 else{
00940                     data.lnStay[Y_LINE]=1;
00941                 }
00942             }
00943             if(
00944                 (data.lnRepeat>=2)
00945             ){
00946                 if(
00947                     ((pow_y>0)&&((data.ping[F_PING]<40)&&(1)))||
00948                     ((pow_y<0)&&((data.ping[B_PING]<40)&&(1)))
00949                 ){
00950                     data.lnStay[Y_LINE]=0;
00951                 }
00952                 if(
00953                     ((pow_x>0)&&((data.ping[R_PING]<40)&&(1)))||
00954                     ((pow_x<0)&&((data.ping[L_PING]<40)&&(1)))
00955                 ){
00956                     data.lnStay[X_LINE]=0;
00957                 }
00958             }
00959         }
00960         
00961         
00962     }
00963     else{
00964         data.lnStay[X_LINE]=data.lnStay[Y_LINE]=1;
00965     }
00966     
00967 }
00968 void LineJudgeReset3(double pow_x, double pow_y, double *x, double *y){
00969     
00970     if(data.lnRepeat==0){
00971         data.lnStayNow[X_LINE]=0;
00972         data.lnStayNow[Y_LINE]=0;
00973     }
00974     data.lnStay[X_LINE]=1;
00975     data.lnStay[Y_LINE]=1;
00976     
00977     if((data.irNotice==IR_FAR)&&(data.lnRepeat>1)){
00978         data.lnRepeat=1;
00979     }
00980     
00981     if(
00982         (data.irNotice==IR_NONE)||
00983         (data.irNotice==IR_FAR)||
00984         //(data.irLastPosition<=7)||
00985         (
00986             (!(
00987                 (data.irPosition==data.irLastPosition)||
00988                 (data.irPosition==(ir_posi_s[(data.irLastPosition-8+24+1)%12]))||
00989                 (data.irPosition==(ir_posi_s[(data.irLastPosition-8+24-1)%12]))
00990                 //(data.irPosition==(ir_posi_s[(data.irLastPosition-8+24+2)%12]))||
00991                 //(data.irPosition==(ir_posi_s[(data.irLastPosition-8+24-2)%12]))
00992                 //((data.irPosition==(ir_posi_s[(data.irLastPosition-8+24+3)%12]))&&(cmps_set.GoalDeg==0))||
00993                 //((data.irPosition==(ir_posi_s[(data.irLastPosition-8+24-3)%12]))&&(cmps_set.GoalDeg==0))
00994             ))&&(
00995                 (data.irLastNotice==IR_CLOSE)||
00996                 (data.irLastNotice==IR_CLOSER)
00997             )
00998         )
00999     ){
01000         data.lnRepeat = 0;
01001         
01002         LineRawLogReset();
01003     }
01004     //data.lnRepeat=0;
01005     //if((data.lnRepeat==1)&&((data.lnRawOrder[0]==LINE_EMPTY)&&(data.lnRawOrder[1]==LINE_EMPTY)&&(data.lnRawOrder[2]==LINE_EMPTY))){
01006     if(
01007         (data.lnRepeat>=1)&&
01008         (data.lnRawOrder[0]==LINE_EMPTY)/*&&
01009         (
01010             (
01011                 (data.irPosition==data.irLastPosition)||
01012                 (data.irPosition==(data.irLastPosition+1))||
01013                 (data.irPosition==(data.irLastPosition-1))||
01014                 (data.irPosition==(data.irLastPosition+11))||
01015                 (data.irPosition==(data.irLastPosition-11))
01016             )&&
01017             (
01018                 (data.irNotice==IR_CLOSE)||
01019                 (data.irNotice==IR_CLOSER)
01020             )
01021         )*/
01022     ){
01023         //y
01024         if(
01025             ((pow_y>0)&&((data.lnRawOrderLog1[0]==A_SPOT)&&(data.lnRawOrderLog1[1]==B_SPOT)&&(1)))||
01026             ((pow_y>0)&&((data.lnRawOrderLog1[0]==B_SPOT)&&(data.lnRawOrderLog1[1]==A_SPOT)&&(1)))
01027         ){
01028             if(data.ping[F_PING]<WhiteToWallPlus[Y_PING]){
01029                 data.lnStay[Y_LINE]=0;
01030             }
01031             else{
01032                 data.lnStay[Y_LINE]=1;
01033             }
01034             data.lnStay[Y_LINE]=0;
01035             data.lnStayNow[Y_LINE]=1;
01036         }
01037         else{
01038             data.lnStay[Y_LINE]=1;
01039         }
01040         if(
01041             ((pow_y<0)&&((data.lnRawOrderLog1[0]==C_SPOT)&&(1)&&(1)))
01042         ){
01043             if(data.ping[B_PING]<WhiteToWallPlus[Y_PING]){
01044                 data.lnStay[Y_LINE]=0;
01045             }
01046             else{
01047                 data.lnStay[Y_LINE]=1;
01048             }
01049             data.lnStay[Y_LINE]=0;
01050             data.lnStayNow[Y_LINE]=1;
01051         }
01052         else{
01053             data.lnStay[Y_LINE]=1;
01054         }
01055         //x
01056         if(
01057             ((pow_x>0)&&((data.lnRawOrderLog1[0]==A_SPOT)&&(data.lnRawOrderLog1[1]==C_SPOT)&&(1)))
01058         ){
01059             if(data.ping[R_PING]<WhiteToWallPlus[X_PING]){
01060                 data.lnStay[X_LINE]=0;
01061             }
01062             else{
01063                 data.lnStay[X_LINE]=1;
01064             }
01065             data.lnStay[X_LINE]=0;
01066             data.lnStayNow[X_LINE]=1;
01067         }
01068         else{
01069             data.lnStay[X_LINE]=1;
01070         }
01071         if(
01072             ((pow_x<0)&&((data.lnRawOrderLog1[0]==B_SPOT)&&(data.lnRawOrderLog1[1]==C_SPOT)&&(1)))
01073         ){
01074             if(data.ping[L_PING]<WhiteToWallPlus[X_PING]){
01075                 data.lnStay[X_LINE]=0;
01076             }
01077             else{
01078                 data.lnStay[X_LINE]=1;
01079             }
01080             data.lnStay[X_LINE]=0;
01081             data.lnStayNow[X_LINE]=1;
01082         }
01083         else{
01084             data.lnStay[X_LINE]=1;
01085         }
01086         if((data.irNotice==IR_CLOSE)||(data.irNotice==IR_CLOSER)){
01087             //y2
01088             if((data.lnStay[X_LINE]==1)&&(data.lnStay[Y_LINE]==0)){
01089                 if( 
01090                     ((pow_x>0)&&((data.lnRawOrderLog1[0]==A_SPOT)&&(data.lnRawOrderLog1[1]==B_SPOT))&&((data.irPosition== 9)||(data.irPosition==10)))||
01091                     ((pow_x>0)&&((data.lnRawOrderLog1[0]==B_SPOT)&&(data.lnRawOrderLog1[1]==A_SPOT))&&((data.irPosition== 9)||(data.irPosition==10)))||
01092                     ((pow_x>0)&&((data.lnRawOrderLog1[0]==C_SPOT)&&(1                             ))&&((data.irPosition==18)||(data.irPosition==19)))
01093                 ){
01094                     if(data.ping[R_PING]<WhiteToWallPlus[X_PING]){
01095                         data.lnStay[X_LINE]=0;
01096                     }
01097                     else{
01098                         data.lnStay[X_LINE]=1;
01099                     }
01100                     if(data.lnRepeat>=LINE_REPEAT){
01101                         data.lnStay[X_LINE]=0;
01102                     }
01103                     data.lnStayNow[X_LINE]=1;
01104                 }
01105                 else{
01106                     data.lnStay[X_LINE]=1;
01107                 }
01108             }
01109             if((data.lnStay[X_LINE]==1)&&(data.lnStay[Y_LINE]==0)){
01110                 if( 
01111                     ((pow_x<0)&&((data.lnRawOrderLog1[0]==A_SPOT)&&(data.lnRawOrderLog1[1]==B_SPOT))&&((data.irPosition==12)||(data.irPosition==13)))||
01112                     ((pow_x<0)&&((data.lnRawOrderLog1[0]==B_SPOT)&&(data.lnRawOrderLog1[1]==A_SPOT))&&((data.irPosition==12)||(data.irPosition==13)))||
01113                     ((pow_x<0)&&((data.lnRawOrderLog1[0]==C_SPOT)&&(1                             ))&&((data.irPosition==15)||(data.irPosition==16)))
01114                 ){
01115                     if(data.ping[L_PING]<WhiteToWallPlus[X_PING]){
01116                         data.lnStay[X_LINE]=0;
01117                     }
01118                     else{
01119                         data.lnStay[X_LINE]=1;
01120                     }
01121                     if(data.lnRepeat>=LINE_REPEAT){
01122                         data.lnStay[X_LINE]=0;
01123                     }
01124                     data.lnStayNow[X_LINE]=1;
01125                 }
01126                 else{
01127                     data.lnStay[X_LINE]=1;
01128                 }
01129             }
01130             //x2
01131             if((data.lnStay[X_LINE]==0)&&(data.lnStay[Y_LINE]==1)){
01132                 if(
01133                     ((pow_y>0)&&((data.lnRawOrderLog1[0]==A_SPOT)&&(data.lnRawOrderLog1[1]==C_SPOT))&&((data.irPosition== 9)||(data.irPosition==10)))||
01134                     ((pow_y>0)&&((data.lnRawOrderLog1[0]==B_SPOT)&&(data.lnRawOrderLog1[1]==C_SPOT))&&((data.irPosition==12)||(data.irPosition==13)))
01135                 ){
01136                     if(data.ping[F_PING]<WhiteToWallPlus[Y_PING]){
01137                         data.lnStay[Y_LINE]=0;
01138                     }
01139                     else{
01140                         data.lnStay[Y_LINE]=1;
01141                     }
01142                     if(data.lnRepeat>=LINE_REPEAT){
01143                         data.lnStay[Y_LINE]=0;
01144                     }
01145                     data.lnStayNow[Y_LINE]=1;
01146                 }
01147                 else{
01148                     data.lnStay[Y_LINE]=1;
01149                 }
01150                 
01151                 if(
01152                     ((pow_y<0)&&((data.lnRawOrderLog1[0]==A_SPOT)&&(data.lnRawOrderLog1[1]==C_SPOT))&&((data.irPosition==18)||(data.irPosition==19)))||
01153                     ((pow_y<0)&&((data.lnRawOrderLog1[0]==B_SPOT)&&(data.lnRawOrderLog1[1]==C_SPOT))&&((data.irPosition==15)||(data.irPosition==16)))
01154                 ){
01155                     if(data.ping[B_PING]<WhiteToWallPlus[Y_PING]){
01156                         data.lnStay[Y_LINE]=0;
01157                     }
01158                     else{
01159                         data.lnStay[Y_LINE]=1;
01160                     }
01161                     if(data.lnRepeat>=LINE_REPEAT){
01162                         data.lnStay[Y_LINE]=0;
01163                     }
01164                     data.lnStayNow[Y_LINE]=1;
01165                 }
01166                 else{
01167                     data.lnStay[Y_LINE]=1;
01168                 }
01169             }
01170             if(
01171                 (data.lnRepeat>=2)
01172             ){
01173                 if(
01174                     ((pow_y>0)&&((data.ping[F_PING]<40)&&(1)))||
01175                     ((pow_y<0)&&((data.ping[B_PING]<40)&&(1)))
01176                 ){
01177                     data.lnStay[Y_LINE]=0;
01178                 }
01179                 if(
01180                     ((pow_x>0)&&((data.ping[R_PING]<40)&&(1)))||
01181                     ((pow_x<0)&&((data.ping[L_PING]<40)&&(1)))
01182                 ){
01183                     data.lnStay[X_LINE]=0;
01184                 }
01185             }
01186         }
01187         
01188         
01189     }
01190     else{
01191         data.lnStay[X_LINE]=data.lnStay[Y_LINE]=1;
01192     }
01193     
01194 }
01195 void JudgeInSide(void){
01196     data.FieldSpot = LINE_INSIDE;
01197     data.NonWall[L_LINE] = data.NonWall[R_LINE] = data.NonWall[F_LINE] = data.NonWall[B_LINE] = 0;
01198     LineLiberate();
01199     LineRankClear();
01200     //Line_home.detach();
01201 }