CatPot 2015-2016 / Mbed 2 deprecated CatPot_2v10_T_Main

Dependencies:   mbed AQM1602 HMC6352 PID

Committer:
lilac0112_1
Date:
Tue Mar 15 12:03:51 2016 +0000
Revision:
18:3a42a931c95a
Parent:
17:cc862ecf9812
Child:
19:967207de919d
LINE NAOSITA

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lilac0112_1 0:ea35c18c85fc 1 #include "mbed.h"
lilac0112_1 0:ea35c18c85fc 2 #include "extern.h"
lilac0112_1 0:ea35c18c85fc 3
lilac0112_1 0:ea35c18c85fc 4 //Atk
lilac0112_1 18:3a42a931c95a 5
lilac0112_1 14:b510adcb6065 6 void LineJudgeSlow(double pow_x, double pow_y, double *x, double *y){
lilac0112_1 11:3efae754e6ef 7 uint8_t LineState;
lilac0112_1 16:4fadb7a87497 8 uint8_t LineSum;
lilac0112_1 11:3efae754e6ef 9
lilac0112_1 11:3efae754e6ef 10 //line
lilac0112_1 11:3efae754e6ef 11 LineState = 0;
lilac0112_1 16:4fadb7a87497 12
lilac0112_1 16:4fadb7a87497 13 LineSum = ((data.lnHold>>2)&0x1)+((data.lnHold>>1)&0x1)+((data.lnHold>>0)&0x1);
lilac0112_1 16:4fadb7a87497 14 if((LineSum==3)||(data.FieldSpot==LINE_OUTSIDE)){
lilac0112_1 16:4fadb7a87497 15 LineState = 3;
lilac0112_1 16:4fadb7a87497 16 }
lilac0112_1 16:4fadb7a87497 17 else if(LineSum==2){
lilac0112_1 16:4fadb7a87497 18 LineState = 2;
lilac0112_1 16:4fadb7a87497 19 }
lilac0112_1 16:4fadb7a87497 20 else if(LineSum==1){
lilac0112_1 16:4fadb7a87497 21 LineState = 1;
lilac0112_1 16:4fadb7a87497 22 }
lilac0112_1 16:4fadb7a87497 23 else if(LineSum==0){
lilac0112_1 16:4fadb7a87497 24 LineState = 0;
lilac0112_1 16:4fadb7a87497 25 }
lilac0112_1 13:b20921316f3c 26
lilac0112_1 11:3efae754e6ef 27
lilac0112_1 14:b510adcb6065 28 if(pow_x>=0){
lilac0112_1 11:3efae754e6ef 29 if(data.ping[R_PING]<WhiteToWall[X_PING]) (*x)=LineDecline[LineState];
lilac0112_1 11:3efae754e6ef 30 else *x=1;
lilac0112_1 11:3efae754e6ef 31 }
lilac0112_1 11:3efae754e6ef 32 else{
lilac0112_1 11:3efae754e6ef 33 if(data.ping[L_PING]<WhiteToWall[X_PING]) (*x)=LineDecline[LineState];
lilac0112_1 11:3efae754e6ef 34 else *x=1;
lilac0112_1 11:3efae754e6ef 35 }
lilac0112_1 11:3efae754e6ef 36
lilac0112_1 14:b510adcb6065 37 if(pow_y>=0){
lilac0112_1 11:3efae754e6ef 38 if(data.ping[F_PING]<WhiteToWall[Y_PING]) (*y)=LineDecline[LineState];
lilac0112_1 11:3efae754e6ef 39 else *y=1;
lilac0112_1 11:3efae754e6ef 40 }
lilac0112_1 11:3efae754e6ef 41 else{
lilac0112_1 11:3efae754e6ef 42 if(data.ping[B_PING]<WhiteToWall[Y_PING]) (*y)=LineDecline[LineState];
lilac0112_1 11:3efae754e6ef 43 else *y=1;
lilac0112_1 11:3efae754e6ef 44 }
lilac0112_1 11:3efae754e6ef 45 }
lilac0112_1 13:b20921316f3c 46 void LineJudgeReturn(double pow_x, double pow_y, double *x, double *y){
lilac0112_1 17:cc862ecf9812 47 const int8_t static LineReturn[5] = {0, 0, 0, 0, 20};
lilac0112_1 12:bee8f883c33a 48 uint8_t LinePingState[4];
lilac0112_1 12:bee8f883c33a 49 //◎ボールを追う力とラインから離れる力の向きが違うならばラインから離れる力が優先される.
lilac0112_1 12:bee8f883c33a 50 //◎ボールを追う力とラインから離れる力の向きが同じならばボールを追う力が優先される.
lilac0112_1 12:bee8f883c33a 51 //◎ラインセンサ全てが場外になるまではボールを追う力は作用しない.ボールを追う力は場内に出るまで作用する.
lilac0112_1 12:bee8f883c33a 52 //×ラインのほぼ場外では常時ラインから離れる力が優先される.
lilac0112_1 12:bee8f883c33a 53 //※場外判定を行うには再び場内に戻る必要がある.
lilac0112_1 12:bee8f883c33a 54
lilac0112_1 17:cc862ecf9812 55 if(data.FieldSpot==LINE_OUTSIDE){
lilac0112_1 12:bee8f883c33a 56
lilac0112_1 12:bee8f883c33a 57 LinePingState[L_PING]=(data.ping[L_PING]<WhiteToWall[X_PING]);
lilac0112_1 12:bee8f883c33a 58 LinePingState[R_PING]=(data.ping[R_PING]<WhiteToWall[X_PING]);
lilac0112_1 12:bee8f883c33a 59 LinePingState[F_PING]=(data.ping[F_PING]<WhiteToWall[Y_PING]);
lilac0112_1 12:bee8f883c33a 60 LinePingState[B_PING]=(data.ping[B_PING]<WhiteToWall[Y_PING]);
lilac0112_1 12:bee8f883c33a 61
lilac0112_1 12:bee8f883c33a 62 //line間際の復帰力以外の力を作用させるか否か
lilac0112_1 12:bee8f883c33a 63 data.lnStop[X_LINE]=1;
lilac0112_1 12:bee8f883c33a 64 data.lnStop[Y_LINE]=1;
lilac0112_1 17:cc862ecf9812 65
lilac0112_1 17:cc862ecf9812 66 data.ReturnDir[X_LINE]=LINE_EMPTY;
lilac0112_1 17:cc862ecf9812 67 data.ReturnDir[Y_LINE]=LINE_EMPTY;
lilac0112_1 17:cc862ecf9812 68
lilac0112_1 12:bee8f883c33a 69 //x
lilac0112_1 17:cc862ecf9812 70 if(data.ReturnDir[X_LINE]==L_LINE){
lilac0112_1 13:b20921316f3c 71 if(pow_x<0){
lilac0112_1 13:b20921316f3c 72 *x = 0;
lilac0112_1 13:b20921316f3c 73 data.lnStop[X_LINE]=1;
lilac0112_1 13:b20921316f3c 74 }
lilac0112_1 13:b20921316f3c 75 else{
lilac0112_1 13:b20921316f3c 76 *x = -LineReturn[4];
lilac0112_1 13:b20921316f3c 77 data.lnStop[X_LINE]=0;
lilac0112_1 13:b20921316f3c 78 }
lilac0112_1 12:bee8f883c33a 79 }
lilac0112_1 17:cc862ecf9812 80 else if(data.ReturnDir[X_LINE]==R_LINE){
lilac0112_1 13:b20921316f3c 81 if(pow_x>0){
lilac0112_1 13:b20921316f3c 82 *x = 0;
lilac0112_1 13:b20921316f3c 83 data.lnStop[X_LINE]=1;
lilac0112_1 13:b20921316f3c 84 }
lilac0112_1 13:b20921316f3c 85 else{
lilac0112_1 13:b20921316f3c 86 *x = LineReturn[4];
lilac0112_1 13:b20921316f3c 87 data.lnStop[X_LINE]=0;
lilac0112_1 13:b20921316f3c 88 }
lilac0112_1 12:bee8f883c33a 89 }
lilac0112_1 17:cc862ecf9812 90 else if(data.ReturnDir[X_LINE]==LINE_EMPTY){
lilac0112_1 17:cc862ecf9812 91 if((LinePingState[L_PING]==0)&&(LinePingState[R_PING]==0)){
lilac0112_1 17:cc862ecf9812 92 /*if(pow_x>0){
lilac0112_1 17:cc862ecf9812 93 *x = -pow_x*(1-0.75);
lilac0112_1 17:cc862ecf9812 94 }
lilac0112_1 17:cc862ecf9812 95 else{
lilac0112_1 17:cc862ecf9812 96 *x = pow_x*(1-0.75);
lilac0112_1 17:cc862ecf9812 97 }*/
lilac0112_1 17:cc862ecf9812 98 data.lnStop[X_LINE]=1;
lilac0112_1 17:cc862ecf9812 99 }
lilac0112_1 17:cc862ecf9812 100 if((LinePingState[L_PING]==0)&&(LinePingState[R_PING]==1)){
lilac0112_1 17:cc862ecf9812 101
lilac0112_1 17:cc862ecf9812 102 data.ReturnDir[X_LINE]=L_LINE;
lilac0112_1 17:cc862ecf9812 103
lilac0112_1 18:3a42a931c95a 104 /*if(pow_x<0){
lilac0112_1 17:cc862ecf9812 105 *x = 0;
lilac0112_1 17:cc862ecf9812 106 data.lnStop[X_LINE]=1;
lilac0112_1 17:cc862ecf9812 107 }
lilac0112_1 17:cc862ecf9812 108 else{
lilac0112_1 17:cc862ecf9812 109 *x = -LineReturn[4];
lilac0112_1 17:cc862ecf9812 110 data.lnStop[X_LINE]=0;
lilac0112_1 18:3a42a931c95a 111 }*/
lilac0112_1 18:3a42a931c95a 112 *x = -LineReturn[4];
lilac0112_1 18:3a42a931c95a 113 data.lnStop[X_LINE]=0;
lilac0112_1 17:cc862ecf9812 114 }
lilac0112_1 17:cc862ecf9812 115 if((LinePingState[L_PING]==1)&&(LinePingState[R_PING]==0)){
lilac0112_1 17:cc862ecf9812 116
lilac0112_1 17:cc862ecf9812 117 data.ReturnDir[X_LINE]=R_LINE;
lilac0112_1 17:cc862ecf9812 118
lilac0112_1 18:3a42a931c95a 119 /*if(pow_x>0){
lilac0112_1 17:cc862ecf9812 120 *x = 0;
lilac0112_1 17:cc862ecf9812 121 data.lnStop[X_LINE]=1;
lilac0112_1 17:cc862ecf9812 122 }
lilac0112_1 17:cc862ecf9812 123 else{
lilac0112_1 17:cc862ecf9812 124 *x = LineReturn[4];
lilac0112_1 17:cc862ecf9812 125 data.lnStop[X_LINE]=0;
lilac0112_1 18:3a42a931c95a 126 }*/
lilac0112_1 18:3a42a931c95a 127 *x = LineReturn[4];
lilac0112_1 18:3a42a931c95a 128 data.lnStop[X_LINE]=0;
lilac0112_1 17:cc862ecf9812 129 }
lilac0112_1 17:cc862ecf9812 130 if((LinePingState[L_PING]==1)&&(LinePingState[R_PING]==1)){
lilac0112_1 17:cc862ecf9812 131 *x = 0;
lilac0112_1 17:cc862ecf9812 132 data.lnStop[X_LINE]=0;
lilac0112_1 17:cc862ecf9812 133 }
lilac0112_1 12:bee8f883c33a 134 }
lilac0112_1 12:bee8f883c33a 135 //y
lilac0112_1 17:cc862ecf9812 136 if(data.ReturnDir[Y_LINE]==F_LINE){
lilac0112_1 13:b20921316f3c 137 if(pow_y>0){
lilac0112_1 17:cc862ecf9812 138 *y = 0;
lilac0112_1 17:cc862ecf9812 139 data.lnStop[Y_LINE]=1;
lilac0112_1 13:b20921316f3c 140 }
lilac0112_1 13:b20921316f3c 141 else{
lilac0112_1 17:cc862ecf9812 142 *y = LineReturn[4];
lilac0112_1 17:cc862ecf9812 143 data.lnStop[Y_LINE]=0;
lilac0112_1 13:b20921316f3c 144 }
lilac0112_1 12:bee8f883c33a 145 }
lilac0112_1 17:cc862ecf9812 146 else if(data.ReturnDir[Y_LINE]==B_LINE){
lilac0112_1 13:b20921316f3c 147 if(pow_y<0){
lilac0112_1 13:b20921316f3c 148 *y = 0;
lilac0112_1 13:b20921316f3c 149 data.lnStop[Y_LINE]=1;
lilac0112_1 13:b20921316f3c 150 }
lilac0112_1 13:b20921316f3c 151 else{
lilac0112_1 13:b20921316f3c 152 *y = -LineReturn[4];
lilac0112_1 13:b20921316f3c 153 data.lnStop[Y_LINE]=0;
lilac0112_1 13:b20921316f3c 154 }
lilac0112_1 12:bee8f883c33a 155 }
lilac0112_1 17:cc862ecf9812 156 else if(data.ReturnDir[Y_LINE]==LINE_EMPTY){
lilac0112_1 17:cc862ecf9812 157 if((LinePingState[B_PING]==0)&&(LinePingState[F_PING]==0)){
lilac0112_1 17:cc862ecf9812 158 /*if(pow_y>0){
lilac0112_1 17:cc862ecf9812 159 *y = -pow_y*(1-0.75);
lilac0112_1 17:cc862ecf9812 160 }
lilac0112_1 17:cc862ecf9812 161 else{
lilac0112_1 17:cc862ecf9812 162 *y = pow_y*(1-0.75);
lilac0112_1 17:cc862ecf9812 163 }*/
lilac0112_1 17:cc862ecf9812 164 data.lnStop[Y_LINE]=1;
lilac0112_1 13:b20921316f3c 165 }
lilac0112_1 17:cc862ecf9812 166 if((LinePingState[B_PING]==0)&&(LinePingState[F_PING]==1)){
lilac0112_1 17:cc862ecf9812 167
lilac0112_1 17:cc862ecf9812 168 data.ReturnDir[Y_LINE]=B_LINE;
lilac0112_1 17:cc862ecf9812 169
lilac0112_1 17:cc862ecf9812 170 if(pow_y<0){
lilac0112_1 17:cc862ecf9812 171 *y = 0;
lilac0112_1 17:cc862ecf9812 172 data.lnStop[Y_LINE]=1;
lilac0112_1 17:cc862ecf9812 173 }
lilac0112_1 17:cc862ecf9812 174 else{
lilac0112_1 17:cc862ecf9812 175 *y = -LineReturn[4];
lilac0112_1 17:cc862ecf9812 176 data.lnStop[Y_LINE]=0;
lilac0112_1 17:cc862ecf9812 177 }
lilac0112_1 17:cc862ecf9812 178 }
lilac0112_1 17:cc862ecf9812 179 if((LinePingState[B_PING]==1)&&(LinePingState[F_PING]==0)){
lilac0112_1 17:cc862ecf9812 180
lilac0112_1 17:cc862ecf9812 181 data.ReturnDir[Y_LINE]=F_LINE;
lilac0112_1 17:cc862ecf9812 182
lilac0112_1 17:cc862ecf9812 183 if(pow_y>0){
lilac0112_1 17:cc862ecf9812 184 *y = 0;
lilac0112_1 17:cc862ecf9812 185 data.lnStop[Y_LINE]=1;
lilac0112_1 17:cc862ecf9812 186 }
lilac0112_1 17:cc862ecf9812 187 else{
lilac0112_1 17:cc862ecf9812 188 *y = LineReturn[4];
lilac0112_1 17:cc862ecf9812 189 data.lnStop[Y_LINE]=0;
lilac0112_1 17:cc862ecf9812 190 }
lilac0112_1 17:cc862ecf9812 191 }
lilac0112_1 17:cc862ecf9812 192 if((LinePingState[B_PING]==1)&&(LinePingState[F_PING]==1)){
lilac0112_1 17:cc862ecf9812 193 *y = 0;
lilac0112_1 17:cc862ecf9812 194 data.lnStop[Y_LINE]=0;
lilac0112_1 13:b20921316f3c 195 }
lilac0112_1 12:bee8f883c33a 196 }
lilac0112_1 17:cc862ecf9812 197 //none
lilac0112_1 17:cc862ecf9812 198 if((LinePingState[L_PING]==1)&&(LinePingState[R_PING]==1)&&(LinePingState[F_PING]==1)&&(LinePingState[B_PING]==1)){
lilac0112_1 17:cc862ecf9812 199 //turn!
lilac0112_1 12:bee8f883c33a 200 }
lilac0112_1 13:b20921316f3c 201
lilac0112_1 17:cc862ecf9812 202 }
lilac0112_1 17:cc862ecf9812 203 else{//data.FieldSpot==LINE_INSIDE
lilac0112_1 17:cc862ecf9812 204
lilac0112_1 17:cc862ecf9812 205 data.ReturnDir[X_LINE]=LINE_EMPTY;
lilac0112_1 17:cc862ecf9812 206 data.ReturnDir[Y_LINE]=LINE_EMPTY;
lilac0112_1 13:b20921316f3c 207
lilac0112_1 12:bee8f883c33a 208 *x = 0;
lilac0112_1 12:bee8f883c33a 209 *y = 0;
lilac0112_1 12:bee8f883c33a 210
lilac0112_1 12:bee8f883c33a 211 //line間際の復帰力以外の力を作用させるか否か
lilac0112_1 12:bee8f883c33a 212 data.lnStop[X_LINE]=1;
lilac0112_1 12:bee8f883c33a 213 data.lnStop[Y_LINE]=1;
lilac0112_1 12:bee8f883c33a 214 }
lilac0112_1 12:bee8f883c33a 215 }
lilac0112_1 18:3a42a931c95a 216 void LineJudgeReset(double pow_x, double pow_y, double *x, double *y){
lilac0112_1 18:3a42a931c95a 217 //static uint8_t NewLineCorner[4]={LINE_EMPTY, LINE_EMPTY, LINE_EMPTY, LINE_EMPTY};
lilac0112_1 18:3a42a931c95a 218 //static uint8_t LastLineCorner[4]={LINE_EMPTY, LINE_EMPTY, LINE_EMPTY, LINE_EMPTY};
lilac0112_1 18:3a42a931c95a 219
lilac0112_1 18:3a42a931c95a 220 if((/*data.lnRaw==0*/1)&&(data.lnHold==7)){
lilac0112_1 16:4fadb7a87497 221 if(data.FieldSpot==LINE_INSIDE){
lilac0112_1 18:3a42a931c95a 222
lilac0112_1 14:b510adcb6065 223 data.lnCorner[L_LINE] = (data.ping[L_PING]<OutToWall[X_PING]);
lilac0112_1 14:b510adcb6065 224 data.lnCorner[R_LINE] = (data.ping[R_PING]<OutToWall[X_PING]);
lilac0112_1 14:b510adcb6065 225 data.lnCorner[F_LINE] = (data.ping[F_PING]<OutToWall[Y_PING]);
lilac0112_1 14:b510adcb6065 226 data.lnCorner[B_LINE] = (data.ping[B_PING]<OutToWall[Y_PING]);
lilac0112_1 14:b510adcb6065 227 if(
lilac0112_1 14:b510adcb6065 228 (data.lnCorner[L_LINE])||
lilac0112_1 14:b510adcb6065 229 (data.lnCorner[R_LINE])||
lilac0112_1 14:b510adcb6065 230 (data.lnCorner[F_LINE])||
lilac0112_1 14:b510adcb6065 231 (data.lnCorner[B_LINE])
lilac0112_1 14:b510adcb6065 232 ){
lilac0112_1 18:3a42a931c95a 233
lilac0112_1 16:4fadb7a87497 234 data.NonWall[L_LINE] = (data.ping[L_PING]>WhiteToWall[X_PING]);
lilac0112_1 16:4fadb7a87497 235 data.NonWall[R_LINE] = (data.ping[R_PING]>WhiteToWall[X_PING]);
lilac0112_1 16:4fadb7a87497 236 data.NonWall[F_LINE] = (data.ping[F_PING]>WhiteToWall[Y_PING]);
lilac0112_1 16:4fadb7a87497 237 data.NonWall[B_LINE] = (data.ping[B_PING]>WhiteToWall[Y_PING]);
lilac0112_1 18:3a42a931c95a 238
lilac0112_1 18:3a42a931c95a 239
lilac0112_1 18:3a42a931c95a 240
lilac0112_1 18:3a42a931c95a 241 /*LastLineCorner[L_LINE]=NewLineCorner[L_LINE];
lilac0112_1 18:3a42a931c95a 242 LastLineCorner[R_LINE]=NewLineCorner[R_LINE];
lilac0112_1 18:3a42a931c95a 243 LastLineCorner[F_LINE]=NewLineCorner[F_LINE];
lilac0112_1 18:3a42a931c95a 244 LastLineCorner[B_LINE]=NewLineCorner[B_LINE];
lilac0112_1 18:3a42a931c95a 245
lilac0112_1 18:3a42a931c95a 246 NewLineCorner[L_LINE]=data.lnCorner[L_LINE];
lilac0112_1 18:3a42a931c95a 247 NewLineCorner[R_LINE]=data.lnCorner[R_LINE];
lilac0112_1 18:3a42a931c95a 248 NewLineCorner[F_LINE]=data.lnCorner[F_LINE];
lilac0112_1 18:3a42a931c95a 249 NewLineCorner[B_LINE]=data.lnCorner[B_LINE];
lilac0112_1 18:3a42a931c95a 250
lilac0112_1 18:3a42a931c95a 251 if(
lilac0112_1 18:3a42a931c95a 252 (LastLineCorner[L_LINE]==NewLineCorner[L_LINE])&&
lilac0112_1 18:3a42a931c95a 253 (LastLineCorner[R_LINE]==NewLineCorner[R_LINE])&&
lilac0112_1 18:3a42a931c95a 254 (LastLineCorner[F_LINE]==NewLineCorner[F_LINE])&&
lilac0112_1 18:3a42a931c95a 255 (LastLineCorner[B_LINE]==NewLineCorner[B_LINE])
lilac0112_1 18:3a42a931c95a 256 ){
lilac0112_1 18:3a42a931c95a 257 data.lnRepeat++;
lilac0112_1 18:3a42a931c95a 258 }
lilac0112_1 18:3a42a931c95a 259 else{
lilac0112_1 18:3a42a931c95a 260 data.lnRepeat=0;
lilac0112_1 18:3a42a931c95a 261 }*/
lilac0112_1 18:3a42a931c95a 262
lilac0112_1 16:4fadb7a87497 263 data.FieldSpot = LINE_OUTSIDE;
lilac0112_1 14:b510adcb6065 264 LineLiberate();
lilac0112_1 14:b510adcb6065 265 }
lilac0112_1 14:b510adcb6065 266 }
lilac0112_1 16:4fadb7a87497 267 else if(data.FieldSpot==LINE_OUTSIDE){
lilac0112_1 18:3a42a931c95a 268 if(data.lnRaw==0){
lilac0112_1 18:3a42a931c95a 269 data.FieldSpot = LINE_INSIDE;
lilac0112_1 18:3a42a931c95a 270 data.NonWall[L_LINE] = data.NonWall[R_LINE] = data.NonWall[F_LINE] = data.NonWall[B_LINE] = 0;
lilac0112_1 18:3a42a931c95a 271 LineLiberate();
lilac0112_1 18:3a42a931c95a 272 LineRankClear();
lilac0112_1 18:3a42a931c95a 273 }
lilac0112_1 14:b510adcb6065 274 }
lilac0112_1 14:b510adcb6065 275 }
lilac0112_1 16:4fadb7a87497 276 if(data.FieldSpot == LINE_OUTSIDE){
lilac0112_1 16:4fadb7a87497 277 if(
lilac0112_1 16:4fadb7a87497 278 (
lilac0112_1 16:4fadb7a87497 279 (data.ping[L_PING]>=WhiteToWall[X_PING])||
lilac0112_1 16:4fadb7a87497 280 (data.NonWall[L_LINE]==1)||
lilac0112_1 16:4fadb7a87497 281 ((data.lnOrder[0]==A_SPOT)&&(data.lnOrder[1]==C_SPOT))
lilac0112_1 16:4fadb7a87497 282 //(data.lnOrder[0]==A_SPOT)
lilac0112_1 16:4fadb7a87497 283 )&&
lilac0112_1 16:4fadb7a87497 284 (
lilac0112_1 16:4fadb7a87497 285 (data.ping[R_PING]>=WhiteToWall[X_PING])||
lilac0112_1 16:4fadb7a87497 286 (data.NonWall[R_LINE]==1)||
lilac0112_1 16:4fadb7a87497 287 ((data.lnOrder[0]==B_SPOT)&&(data.lnOrder[1]==C_SPOT))
lilac0112_1 16:4fadb7a87497 288 //(data.lnOrder[0]==B_SPOT)
lilac0112_1 16:4fadb7a87497 289 )&&
lilac0112_1 16:4fadb7a87497 290 (
lilac0112_1 16:4fadb7a87497 291 (data.ping[F_PING]>=WhiteToWall[Y_PING])||
lilac0112_1 16:4fadb7a87497 292 (data.NonWall[F_LINE]==1)||
lilac0112_1 16:4fadb7a87497 293 ((data.lnOrder[0]==C_SPOT)&&(data.lnOrder[1]==A_SPOT))||
lilac0112_1 16:4fadb7a87497 294 ((data.lnOrder[0]==C_SPOT)&&(data.lnOrder[1]==B_SPOT))
lilac0112_1 16:4fadb7a87497 295 )&&
lilac0112_1 16:4fadb7a87497 296 ((data.ping[B_PING]>=WhiteToWall[Y_PING])||
lilac0112_1 16:4fadb7a87497 297 (data.NonWall[B_LINE]==1)||
lilac0112_1 16:4fadb7a87497 298 ((data.lnOrder[0]==A_SPOT)&&(data.lnOrder[1]==B_SPOT))||
lilac0112_1 16:4fadb7a87497 299 ((data.lnOrder[0]==B_SPOT)&&(data.lnOrder[1]==A_SPOT))
lilac0112_1 16:4fadb7a87497 300 )
lilac0112_1 16:4fadb7a87497 301 ){
lilac0112_1 16:4fadb7a87497 302 data.FieldSpot = LINE_INSIDE;
lilac0112_1 16:4fadb7a87497 303 data.NonWall[L_LINE] = data.NonWall[R_LINE] = data.NonWall[F_LINE] = data.NonWall[B_LINE] = 0;
lilac0112_1 16:4fadb7a87497 304 LineLiberate();
lilac0112_1 16:4fadb7a87497 305 LineRankClear();
lilac0112_1 13:b20921316f3c 306 }
lilac0112_1 16:4fadb7a87497 307 }
lilac0112_1 16:4fadb7a87497 308 if((data.FieldSpot == LINE_INSIDE)&&(0<data.lnHold)&&(data.lnHold<7)&&(data.lnRaw==0)){
lilac0112_1 16:4fadb7a87497 309 if(
lilac0112_1 16:4fadb7a87497 310 (
lilac0112_1 16:4fadb7a87497 311 (data.ping[L_PING]>=WhiteToWall[X_PING])||
lilac0112_1 16:4fadb7a87497 312 ((data.lnOrder[0]==A_SPOT)&&(data.lnOrder[1]==C_SPOT))
lilac0112_1 16:4fadb7a87497 313 //(data.lnOrder[0]==A_SPOT)
lilac0112_1 16:4fadb7a87497 314 )&&
lilac0112_1 16:4fadb7a87497 315 (
lilac0112_1 16:4fadb7a87497 316 (data.ping[R_PING]>=WhiteToWall[X_PING])||
lilac0112_1 16:4fadb7a87497 317 ((data.lnOrder[0]==B_SPOT)&&(data.lnOrder[1]==C_SPOT))
lilac0112_1 16:4fadb7a87497 318 //(data.lnOrder[0]==B_SPOT)
lilac0112_1 16:4fadb7a87497 319 )&&
lilac0112_1 16:4fadb7a87497 320 (
lilac0112_1 16:4fadb7a87497 321 (data.ping[F_PING]>=WhiteToWall[Y_PING])||
lilac0112_1 16:4fadb7a87497 322 ((data.lnOrder[0]==C_SPOT)&&(data.lnOrder[1]==A_SPOT))||
lilac0112_1 16:4fadb7a87497 323 ((data.lnOrder[0]==C_SPOT)&&(data.lnOrder[1]==B_SPOT))
lilac0112_1 16:4fadb7a87497 324 )&&
lilac0112_1 16:4fadb7a87497 325 ((data.ping[B_PING]>=WhiteToWall[Y_PING])||
lilac0112_1 16:4fadb7a87497 326 ((data.lnOrder[0]==A_SPOT)&&(data.lnOrder[1]==B_SPOT))||
lilac0112_1 16:4fadb7a87497 327 ((data.lnOrder[0]==B_SPOT)&&(data.lnOrder[1]==A_SPOT))
lilac0112_1 16:4fadb7a87497 328 )
lilac0112_1 18:3a42a931c95a 329 /*||
lilac0112_1 18:3a42a931c95a 330 (
lilac0112_1 18:3a42a931c95a 331 (data.ping[L_PING]>=GoalEdgeToWall[X_PING])&&
lilac0112_1 18:3a42a931c95a 332 (data.ping[R_PING]>=GoalEdgeToWall[X_PING])
lilac0112_1 18:3a42a931c95a 333 )*/
lilac0112_1 16:4fadb7a87497 334 ){
lilac0112_1 16:4fadb7a87497 335 data.NonWall[L_LINE] = data.NonWall[R_LINE] = data.NonWall[F_LINE] = data.NonWall[B_LINE] = 0;
lilac0112_1 16:4fadb7a87497 336 LineLiberate();
lilac0112_1 13:b20921316f3c 337 }
lilac0112_1 13:b20921316f3c 338 }
lilac0112_1 18:3a42a931c95a 339 /*
lilac0112_1 18:3a42a931c95a 340 if(
lilac0112_1 18:3a42a931c95a 341 (data.irNotice==IR_NONE)||
lilac0112_1 18:3a42a931c95a 342 (data.irNotice==IR_FAR)||
lilac0112_1 18:3a42a931c95a 343 (
lilac0112_1 18:3a42a931c95a 344 (data.ping[L_PING]>=GoalEdgeToWall[X_PING])&&
lilac0112_1 18:3a42a931c95a 345 (data.ping[R_PING]>=GoalEdgeToWall[X_PING])
lilac0112_1 18:3a42a931c95a 346 )
lilac0112_1 18:3a42a931c95a 347 ){
lilac0112_1 18:3a42a931c95a 348 data.lnRepeat = 0;
lilac0112_1 18:3a42a931c95a 349
lilac0112_1 18:3a42a931c95a 350 data.lnCorner[L_LINE]=LINE_EMPTY;
lilac0112_1 18:3a42a931c95a 351 data.lnCorner[R_LINE]=LINE_EMPTY;
lilac0112_1 18:3a42a931c95a 352 data.lnCorner[F_LINE]=LINE_EMPTY;
lilac0112_1 18:3a42a931c95a 353 data.lnCorner[B_LINE]=LINE_EMPTY;
lilac0112_1 18:3a42a931c95a 354 }
lilac0112_1 18:3a42a931c95a 355 data.lnRepeat=0;
lilac0112_1 18:3a42a931c95a 356 if(data.lnRepeat>0){
lilac0112_1 18:3a42a931c95a 357 if(
lilac0112_1 18:3a42a931c95a 358 ((pow_x>=0)&&(data.lnCorner[R_LINE]))||
lilac0112_1 18:3a42a931c95a 359 ((pow_x<0)&&(data.lnCorner[L_LINE]))
lilac0112_1 18:3a42a931c95a 360 ){
lilac0112_1 18:3a42a931c95a 361 data.lnStay[X_LINE]=0;
lilac0112_1 18:3a42a931c95a 362 }
lilac0112_1 18:3a42a931c95a 363 else{
lilac0112_1 18:3a42a931c95a 364 data.lnStay[X_LINE]=1;
lilac0112_1 18:3a42a931c95a 365 }
lilac0112_1 18:3a42a931c95a 366 if(
lilac0112_1 18:3a42a931c95a 367 ((pow_y>=0)&&(data.lnCorner[F_LINE]))||
lilac0112_1 18:3a42a931c95a 368 ((pow_y<0)&&(data.lnCorner[B_LINE]))
lilac0112_1 18:3a42a931c95a 369 ){
lilac0112_1 18:3a42a931c95a 370 data.lnStay[Y_LINE]=0;
lilac0112_1 18:3a42a931c95a 371 }
lilac0112_1 18:3a42a931c95a 372 else{
lilac0112_1 18:3a42a931c95a 373 data.lnStay[Y_LINE]=1;
lilac0112_1 18:3a42a931c95a 374 }
lilac0112_1 18:3a42a931c95a 375 }
lilac0112_1 18:3a42a931c95a 376 else{
lilac0112_1 18:3a42a931c95a 377 data.lnStay[X_LINE]=data.lnStay[Y_LINE]=1;
lilac0112_1 18:3a42a931c95a 378 }*/
lilac0112_1 18:3a42a931c95a 379
lilac0112_1 12:bee8f883c33a 380 }
lilac0112_1 0:ea35c18c85fc 381 void modeAttack4(void){
lilac0112_1 10:6df631c39f9b 382 double ir_x_dir, ir_y_dir;
lilac0112_1 11:3efae754e6ef 383 double ir_x_turn, ir_y_turn;
lilac0112_1 11:3efae754e6ef 384 double ir_x, ir_y;
lilac0112_1 13:b20921316f3c 385
lilac0112_1 14:b510adcb6065 386 double LineSlowPower[2];
lilac0112_1 14:b510adcb6065 387 double LineReturnPower[2];
lilac0112_1 14:b510adcb6065 388
lilac0112_1 14:b510adcb6065 389 //double pow_x, pow_y;
lilac0112_1 10:6df631c39f9b 390 uint8_t ir_pow;
lilac0112_1 10:6df631c39f9b 391 int vx,vy,vs;
lilac0112_1 15:17502a27a60b 392 //static uint8_t data.FieldSpot;
lilac0112_1 11:3efae754e6ef 393
lilac0112_1 11:3efae754e6ef 394
lilac0112_1 10:6df631c39f9b 395 if(sys.KickOffFlag==1){
lilac0112_1 10:6df631c39f9b 396
lilac0112_1 18:3a42a931c95a 397 sys.IrBlind=0;
lilac0112_1 10:6df631c39f9b 398 sys.LineBlind=0;
lilac0112_1 10:6df631c39f9b 399 sys.PingBlind=0;
lilac0112_1 10:6df631c39f9b 400
lilac0112_1 18:3a42a931c95a 401 sys.ir_pow_table = 0;
lilac0112_1 18:3a42a931c95a 402
lilac0112_1 18:3a42a931c95a 403 data.lnCorner[L_LINE]=data.lnCorner[R_LINE]=data.lnCorner[F_LINE]=data.lnCorner[B_LINE]=LINE_EMPTY;
lilac0112_1 18:3a42a931c95a 404 data.lnRepeat = 0;
lilac0112_1 18:3a42a931c95a 405
lilac0112_1 18:3a42a931c95a 406 //data.lnStay[X_LINE]=data.lnStay[Y_LINE]=1;
lilac0112_1 18:3a42a931c95a 407 data.lnStop[X_LINE]=data.lnStop[Y_LINE]=1;
lilac0112_1 18:3a42a931c95a 408
lilac0112_1 15:17502a27a60b 409 data.FieldSpot = LINE_INSIDE;
lilac0112_1 14:b510adcb6065 410 LineLiberate();
lilac0112_1 16:4fadb7a87497 411 LineRankClear();
lilac0112_1 13:b20921316f3c 412
lilac0112_1 10:6df631c39f9b 413 sys.KickOffFlag=0;
lilac0112_1 0:ea35c18c85fc 414 }
lilac0112_1 10:6df631c39f9b 415 //data
lilac0112_1 10:6df631c39f9b 416 if(sys.IrFlag==1){ReadIr();sys.IrFlag=0;}
lilac0112_1 10:6df631c39f9b 417 if(sys.PidFlag==1){PidUpdate();sys.PidFlag=0;}
lilac0112_1 10:6df631c39f9b 418 if(sys.UswFlag==1){ReadPing();sys.UswFlag=0;}
lilac0112_1 10:6df631c39f9b 419 if(sys.UswFlag2==1){ReadPing2();sys.UswFlag2=0;}
lilac0112_1 10:6df631c39f9b 420 //if(sys.KickFlag==1){DriveSolenoid();}
lilac0112_1 11:3efae754e6ef 421 data.lnRaw = LineRaw;
lilac0112_1 11:3efae754e6ef 422 data.lnHold = LineHold;
lilac0112_1 10:6df631c39f9b 423
lilac0112_1 18:3a42a931c95a 424 if(data.ping[B_PING]<=30){
lilac0112_1 18:3a42a931c95a 425 sys.ir_pow_table=1;
lilac0112_1 18:3a42a931c95a 426 ir_x_dir = ir_move_val[1][data.irNotice][data.irPosition][IR_X_DIR];
lilac0112_1 18:3a42a931c95a 427 ir_y_dir = ir_move_val[1][data.irNotice][data.irPosition][IR_Y_DIR];
lilac0112_1 18:3a42a931c95a 428 ir_x_turn = ir_move_val[1][data.irNotice][data.irPosition][IR_X_TURN];
lilac0112_1 18:3a42a931c95a 429 ir_y_turn = ir_move_val[1][data.irNotice][data.irPosition][IR_Y_TURN];
lilac0112_1 18:3a42a931c95a 430 }
lilac0112_1 18:3a42a931c95a 431 else{
lilac0112_1 18:3a42a931c95a 432 sys.ir_pow_table=0;
lilac0112_1 18:3a42a931c95a 433 ir_x_dir = ir_move_val[0][data.irNotice][data.irPosition][IR_X_DIR];
lilac0112_1 18:3a42a931c95a 434 ir_y_dir = ir_move_val[0][data.irNotice][data.irPosition][IR_Y_DIR];
lilac0112_1 18:3a42a931c95a 435 ir_x_turn = ir_move_val[0][data.irNotice][data.irPosition][IR_X_TURN];
lilac0112_1 18:3a42a931c95a 436 ir_y_turn = ir_move_val[0][data.irNotice][data.irPosition][IR_Y_TURN];
lilac0112_1 18:3a42a931c95a 437 }
lilac0112_1 18:3a42a931c95a 438 /*
lilac0112_1 18:3a42a931c95a 439 ir_x_dir = ir_move_val[sys.ir_pow_table][data.irNotice][data.irPosition][IR_X_DIR];
lilac0112_1 18:3a42a931c95a 440 ir_y_dir = ir_move_val[sys.ir_pow_table][data.irNotice][data.irPosition][IR_Y_DIR];
lilac0112_1 18:3a42a931c95a 441 ir_x_turn = ir_move_val[sys.ir_pow_table][data.irNotice][data.irPosition][IR_X_TURN];
lilac0112_1 18:3a42a931c95a 442 ir_y_turn = ir_move_val[sys.ir_pow_table][data.irNotice][data.irPosition][IR_Y_TURN];
lilac0112_1 18:3a42a931c95a 443 */
lilac0112_1 18:3a42a931c95a 444 /*
lilac0112_1 10:6df631c39f9b 445 ir_x_dir = ir_move_val[0][data.irNotice][data.irPosition][IR_X_DIR];
lilac0112_1 10:6df631c39f9b 446 ir_y_dir = ir_move_val[0][data.irNotice][data.irPosition][IR_Y_DIR];
lilac0112_1 10:6df631c39f9b 447 ir_x_turn = ir_move_val[0][data.irNotice][data.irPosition][IR_X_TURN];
lilac0112_1 10:6df631c39f9b 448 ir_y_turn = ir_move_val[0][data.irNotice][data.irPosition][IR_Y_TURN];
lilac0112_1 18:3a42a931c95a 449 */
lilac0112_1 18:3a42a931c95a 450
lilac0112_1 18:3a42a931c95a 451 if(sys.IrBlind==1) data.irNotice=IR_NONE;
lilac0112_1 10:6df631c39f9b 452 if(data.irNotice==IR_CLOSER){
lilac0112_1 10:6df631c39f9b 453 ir_pow = sys.s_pow;
lilac0112_1 10:6df631c39f9b 454 }
lilac0112_1 10:6df631c39f9b 455 else if(data.irNotice==IR_CLOSE){
lilac0112_1 10:6df631c39f9b 456 ir_pow = sys.m_pow;
lilac0112_1 10:6df631c39f9b 457 }
lilac0112_1 10:6df631c39f9b 458 else if(data.irNotice==IR_FAR){
lilac0112_1 10:6df631c39f9b 459 ir_pow = sys.l_pow;
lilac0112_1 10:6df631c39f9b 460 }
lilac0112_1 10:6df631c39f9b 461 else{//data.irNotice==IR_NONE
lilac0112_1 10:6df631c39f9b 462 ir_pow = 0;
lilac0112_1 10:6df631c39f9b 463 }
lilac0112_1 18:3a42a931c95a 464
lilac0112_1 18:3a42a931c95a 465
lilac0112_1 18:3a42a931c95a 466 if((data.ping[R_PING]<data.ping[L_PING])&&(data.irPosition==17)){
lilac0112_1 18:3a42a931c95a 467 ir_x_turn = -ir_x_turn;
lilac0112_1 18:3a42a931c95a 468 ir_y_turn = -ir_y_turn;
lilac0112_1 18:3a42a931c95a 469 }
lilac0112_1 10:6df631c39f9b 470
lilac0112_1 11:3efae754e6ef 471 ir_x = (ir_x_dir + ir_x_turn);
lilac0112_1 11:3efae754e6ef 472 ir_y = (ir_y_dir + ir_y_turn);
lilac0112_1 11:3efae754e6ef 473
lilac0112_1 14:b510adcb6065 474 if(sys.LineBlind==1){
lilac0112_1 14:b510adcb6065 475
lilac0112_1 14:b510adcb6065 476 LineSlowPower[X_LINE] = 1.0;
lilac0112_1 14:b510adcb6065 477 LineSlowPower[Y_LINE] = 1.0;
lilac0112_1 14:b510adcb6065 478
lilac0112_1 14:b510adcb6065 479 LineReturnPower[X_LINE] = 0.0;
lilac0112_1 14:b510adcb6065 480 LineReturnPower[Y_LINE] = 0.0;
lilac0112_1 14:b510adcb6065 481
lilac0112_1 14:b510adcb6065 482 data.lnStop[X_LINE] = 1;
lilac0112_1 14:b510adcb6065 483 data.lnStop[Y_LINE] = 1;
lilac0112_1 14:b510adcb6065 484
lilac0112_1 15:17502a27a60b 485 data.FieldSpot = LINE_INSIDE;
lilac0112_1 14:b510adcb6065 486 }
lilac0112_1 14:b510adcb6065 487 else{
lilac0112_1 18:3a42a931c95a 488 LineJudgeReset(ir_x, ir_y, &LineSlowPower[X_LINE], &LineSlowPower[Y_LINE]);
lilac0112_1 16:4fadb7a87497 489
lilac0112_1 18:3a42a931c95a 490 LineJudgeSlow(ir_x, ir_y, &LineSlowPower[X_LINE], &LineSlowPower[Y_LINE]);
lilac0112_1 18:3a42a931c95a 491 LineJudgeReturn(ir_x*LineSlowPower[X_LINE], ir_y*LineSlowPower[Y_LINE], &LineReturnPower[X_LINE], &LineReturnPower[Y_LINE]);
lilac0112_1 18:3a42a931c95a 492 /*
lilac0112_1 14:b510adcb6065 493 LineSlowPower[X_LINE] = 1.0;
lilac0112_1 14:b510adcb6065 494 LineSlowPower[Y_LINE] = 1.0;
lilac0112_1 18:3a42a931c95a 495
lilac0112_1 14:b510adcb6065 496 LineReturnPower[X_LINE] = 0.0;
lilac0112_1 14:b510adcb6065 497 LineReturnPower[Y_LINE] = 0.0;
lilac0112_1 14:b510adcb6065 498
lilac0112_1 14:b510adcb6065 499 data.lnStop[X_LINE] = 1;
lilac0112_1 14:b510adcb6065 500 data.lnStop[Y_LINE] = 1;
lilac0112_1 17:cc862ecf9812 501 */
lilac0112_1 14:b510adcb6065 502
lilac0112_1 14:b510adcb6065 503 }
lilac0112_1 15:17502a27a60b 504 if(data.FieldSpot==LINE_OUTSIDE) LED = 0x9;
lilac0112_1 15:17502a27a60b 505 if(data.FieldSpot==LINE_INSIDE) LED = 0x6;
lilac0112_1 14:b510adcb6065 506
lilac0112_1 16:4fadb7a87497 507 //LED = ((data.lnOrder[0]!=LINE_EMPTY)<<2) | ((data.lnOrder[1]!=LINE_EMPTY)<<1) | ((data.lnOrder[2]!=LINE_EMPTY)<<0);
lilac0112_1 14:b510adcb6065 508
lilac0112_1 14:b510adcb6065 509 //else LED = 0xA;
lilac0112_1 14:b510adcb6065 510 //LED = LineHold;
lilac0112_1 14:b510adcb6065 511
lilac0112_1 18:3a42a931c95a 512 vx = (ir_pow*ir_x)*data.lnStop[X_LINE]*(/*data.lnStay[X_LINE]*/1)*LineSlowPower[X_LINE] + LineReturnPower[X_LINE];
lilac0112_1 18:3a42a931c95a 513 vy = (ir_pow*ir_y)*data.lnStop[Y_LINE]*(/*data.lnStay[X_LINE]*/1)*LineSlowPower[Y_LINE] + LineReturnPower[Y_LINE];
lilac0112_1 10:6df631c39f9b 514 vs = cmps_set.OutputPID;
lilac0112_1 10:6df631c39f9b 515 move(
lilac0112_1 10:6df631c39f9b 516 vx,
lilac0112_1 10:6df631c39f9b 517 vy,
lilac0112_1 10:6df631c39f9b 518 vs
lilac0112_1 10:6df631c39f9b 519 );
lilac0112_1 10:6df631c39f9b 520 if(sys.MotorFlag==1){tx_motor();sys.MotorFlag=0;}
lilac0112_1 0:ea35c18c85fc 521 if(sys.stopflag==1){
lilac0112_1 10:6df631c39f9b 522
lilac0112_1 0:ea35c18c85fc 523 //停止処理
lilac0112_1 0:ea35c18c85fc 524 }
lilac0112_1 0:ea35c18c85fc 525 return;
lilac0112_1 0:ea35c18c85fc 526 }
lilac0112_1 0:ea35c18c85fc 527 void modeAttack5(void){
lilac0112_1 0:ea35c18c85fc 528 if(sys.IrFlag==1){
lilac0112_1 0:ea35c18c85fc 529 ReadIr();
lilac0112_1 0:ea35c18c85fc 530 sys.IrFlag=0;
lilac0112_1 0:ea35c18c85fc 531 }
lilac0112_1 0:ea35c18c85fc 532 if(sys.PidFlag==1){
lilac0112_1 0:ea35c18c85fc 533 PidUpdate();
lilac0112_1 0:ea35c18c85fc 534 sys.PidFlag=0;
lilac0112_1 0:ea35c18c85fc 535 }
lilac0112_1 10:6df631c39f9b 536 move(0,0,cmps_set.OutputPID);
lilac0112_1 0:ea35c18c85fc 537 if(sys.MotorFlag==1){
lilac0112_1 14:b510adcb6065 538 //LED[0] = 1;
lilac0112_1 14:b510adcb6065 539 //LED[1] = 0;
lilac0112_1 0:ea35c18c85fc 540 tx_motor();
lilac0112_1 0:ea35c18c85fc 541 sys.MotorFlag=0;
lilac0112_1 0:ea35c18c85fc 542 }
lilac0112_1 5:5ff3a7d5d8c2 543 else{
lilac0112_1 14:b510adcb6065 544 //LED[0] = 0;
lilac0112_1 14:b510adcb6065 545 //LED[1] = 1;
lilac0112_1 5:5ff3a7d5d8c2 546 }
lilac0112_1 0:ea35c18c85fc 547 if(sys.stopflag==1){
lilac0112_1 0:ea35c18c85fc 548 //停止処理
lilac0112_1 0:ea35c18c85fc 549 }
lilac0112_1 0:ea35c18c85fc 550 return;
lilac0112_1 0:ea35c18c85fc 551 }