ロボカップ2013のジャパンオープンメインプログラム

Dependencies:   PID TextLCD mbed

Committer:
ryuna
Date:
Sun Apr 27 02:37:13 2014 +0000
Revision:
0:fb4c529248d7
update_4/27

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryuna 0:fb4c529248d7 1 #include "mbed.h"
ryuna 0:fb4c529248d7 2 //#include "HMC6352.h"
ryuna 0:fb4c529248d7 3 #include "TextLCD.h"
ryuna 0:fb4c529248d7 4 #include "common.h"
ryuna 0:fb4c529248d7 5 #include "PID.h"
ryuna 0:fb4c529248d7 6 #include <math.h>
ryuna 0:fb4c529248d7 7 #include <sstream>
ryuna 0:fb4c529248d7 8
ryuna 0:fb4c529248d7 9 #define LINE_LP 30/*line def@line_state*/
ryuna 0:fb4c529248d7 10 #define LINE_FP 40/*line def@line_State*/
ryuna 0:fb4c529248d7 11 #define LINE_ON 0x2710/*line underline*///40000
ryuna 0:fb4c529248d7 12 #define LINE_TIME 0.5/*used lineAttach*/
ryuna 0:fb4c529248d7 13
ryuna 0:fb4c529248d7 14 /****pid config *************/
ryuna 0:fb4c529248d7 15 #define RATE 0.08//52
ryuna 0:fb4c529248d7 16 #define PID_BIAS 0.2
ryuna 0:fb4c529248d7 17 #define REFERENCE 180.0
ryuna 0:fb4c529248d7 18 #define MINIMUM 0.1
ryuna 0:fb4c529248d7 19 #define MAXIMUM 360.0
ryuna 0:fb4c529248d7 20 #define PID_CYCLE 0.05 //s
ryuna 0:fb4c529248d7 21 #define P_GAIN 1.4 //0.78
ryuna 0:fb4c529248d7 22 #define I_GAIN 0.0 //0.0
ryuna 0:fb4c529248d7 23 #define D_GAIN 0.015 //0.009
ryuna 0:fb4c529248d7 24 #define OUT_LIMIT 30.0
ryuna 0:fb4c529248d7 25 #define MAX_POW 100
ryuna 0:fb4c529248d7 26 #define MIN_POW -100
ryuna 0:fb4c529248d7 27 /****pid config *************/
ryuna 0:fb4c529248d7 28
ryuna 0:fb4c529248d7 29 /*keep your distance!!*/
ryuna 0:fb4c529248d7 30 #define OFFENSE_POWER 31 /*moter power strength*/
ryuna 0:fb4c529248d7 31 #define DEFENSE_POWER 30
ryuna 0:fb4c529248d7 32
ryuna 0:fb4c529248d7 33 #define BACK_HOME_TIME 0.3
ryuna 0:fb4c529248d7 34
ryuna 0:fb4c529248d7 35 /*dash*/
ryuna 0:fb4c529248d7 36 #define DASH_TIME 0.7//about
ryuna 0:fb4c529248d7 37 #define CHARGE_DACH_TIME 0.25//about
ryuna 0:fb4c529248d7 38 #define DASH_STRENGTH 40
ryuna 0:fb4c529248d7 39
ryuna 0:fb4c529248d7 40 Serial motor(p9,p10);
ryuna 0:fb4c529248d7 41 Serial sensor(p13,p14);
ryuna 0:fb4c529248d7 42 Serial xbee(p28,p27);
ryuna 0:fb4c529248d7 43 Serial pc(USBTX, USBRX);
ryuna 0:fb4c529248d7 44
ryuna 0:fb4c529248d7 45 TextLCD lcd(p26, p25, p24, p23, p22, p21);
ryuna 0:fb4c529248d7 46 AnalogIn adcline[4] = {p17, p18, p19, p20};
ryuna 0:fb4c529248d7 47 DigitalIn start(p7);/*start switch*/
ryuna 0:fb4c529248d7 48 DigitalIn check(p8);/*Xbee chenge switch*/
ryuna 0:fb4c529248d7 49 DigitalOut myled[4] = {LED1, LED2, LED3, LED4};
ryuna 0:fb4c529248d7 50 DigitalIn kick_check(p5);
ryuna 0:fb4c529248d7 51
ryuna 0:fb4c529248d7 52 /*Compass PID SetUp*/
ryuna 0:fb4c529248d7 53 PID pid(P_GAIN,I_GAIN,D_GAIN, RATE);
ryuna 0:fb4c529248d7 54 Ticker pidUpdata;
ryuna 0:fb4c529248d7 55
ryuna 0:fb4c529248d7 56 /*XBee interrupt*/
ryuna 0:fb4c529248d7 57 Ticker xbeetx;
ryuna 0:fb4c529248d7 58 Ticker xbeerx;
ryuna 0:fb4c529248d7 59
ryuna 0:fb4c529248d7 60 /*line check,linestate*/
ryuna 0:fb4c529248d7 61 Timeout liner0;
ryuna 0:fb4c529248d7 62 Timeout liner1;
ryuna 0:fb4c529248d7 63 Timeout liner2;
ryuna 0:fb4c529248d7 64 Timeout liner3;
ryuna 0:fb4c529248d7 65
ryuna 0:fb4c529248d7 66 /*back home*/
ryuna 0:fb4c529248d7 67 Timeout home;
ryuna 0:fb4c529248d7 68 Timer timer_home;
ryuna 0:fb4c529248d7 69
ryuna 0:fb4c529248d7 70 /*ofence dash timer*/
ryuna 0:fb4c529248d7 71 Timer dash_charge;
ryuna 0:fb4c529248d7 72 Ticker dash_start;
ryuna 0:fb4c529248d7 73
ryuna 0:fb4c529248d7 74
ryuna 0:fb4c529248d7 75 extern string StringFIN;
ryuna 0:fb4c529248d7 76 extern void array(int,int,int,int);
ryuna 0:fb4c529248d7 77 extern void micon_rx(void);
ryuna 0:fb4c529248d7 78 extern void xbee_tx(void);
ryuna 0:fb4c529248d7 79 extern void xbee_rx(void);
ryuna 0:fb4c529248d7 80 extern int count;
ryuna 0:fb4c529248d7 81
ryuna 0:fb4c529248d7 82 int speed[4] = {0}; /*@move,tx_moter*/
ryuna 0:fb4c529248d7 83 uint8_t line_stop[4] = {0},home_stop = 0; /*@line_stop(number),@back_home*/
ryuna 0:fb4c529248d7 84 unsigned int compass = 0; /*relevant compass*/
ryuna 0:fb4c529248d7 85 double standTu = 0, inputPID = 180.0, compassPID = 0.0; /*relevant compass*/
ryuna 0:fb4c529248d7 86 uint8_t ping[4]={0}; /*ping_data*/
ryuna 0:fb4c529248d7 87 uint8_t ir_min = 0,ir_num = 0, ir_main = 0; /*ir_min=25~50~70(value),ir_num=0~9,ir_main=undef*/
ryuna 0:fb4c529248d7 88 //double clockL = 0;//not used
ryuna 0:fb4c529248d7 89 uint8_t dash_stop = 0;
ryuna 0:fb4c529248d7 90
ryuna 0:fb4c529248d7 91
ryuna 0:fb4c529248d7 92 void move(double vx, double vy, int vs, int vk){
ryuna 0:fb4c529248d7 93 double pwm[4] = {0};
ryuna 0:fb4c529248d7 94 uint8_t i = 0;
ryuna 0:fb4c529248d7 95 pwm[0] = (double)((vx) + vs);
ryuna 0:fb4c529248d7 96 pwm[1] = (double)((-0.5 * vx) + ((sqrt(3.0) / 2.0) * vy) + vs);
ryuna 0:fb4c529248d7 97 pwm[2] = (double)((-0.5 * vx) + ((-sqrt(3.0) / 2.0) * vy) + vs);
ryuna 0:fb4c529248d7 98 pwm[3] = vk;
ryuna 0:fb4c529248d7 99
ryuna 0:fb4c529248d7 100 for(i = 0; i < 4; i++){
ryuna 0:fb4c529248d7 101 if(pwm[i] > 100){
ryuna 0:fb4c529248d7 102 pwm[i] = 100;
ryuna 0:fb4c529248d7 103 }else if(pwm[i] < -100){
ryuna 0:fb4c529248d7 104 pwm[i] = -100;
ryuna 0:fb4c529248d7 105 }
ryuna 0:fb4c529248d7 106 speed[i] = pwm[i];
ryuna 0:fb4c529248d7 107 }
ryuna 0:fb4c529248d7 108 }
ryuna 0:fb4c529248d7 109 //通信(モータ用)
ryuna 0:fb4c529248d7 110 void tx_motor(){
ryuna 0:fb4c529248d7 111 array(speed[0],speed[1],speed[3],speed[2]);
ryuna 0:fb4c529248d7 112 motor.printf("%s",StringFIN.c_str());
ryuna 0:fb4c529248d7 113 }
ryuna 0:fb4c529248d7 114 void line_state(double *vx,double*vy,uint8_t *line){
ryuna 0:fb4c529248d7 115 /*chenge to move ,line*/
ryuna 0:fb4c529248d7 116 if(line[FRONT]){
ryuna 0:fb4c529248d7 117 *vy = -LINE_FP;
ryuna 0:fb4c529248d7 118 }
ryuna 0:fb4c529248d7 119 if(line[LEFT]){
ryuna 0:fb4c529248d7 120 *vx = LINE_LP;
ryuna 0:fb4c529248d7 121 }
ryuna 0:fb4c529248d7 122 if(line[BACK]){
ryuna 0:fb4c529248d7 123 *vy = LINE_FP;
ryuna 0:fb4c529248d7 124 }
ryuna 0:fb4c529248d7 125 if(line[RIGHT]){
ryuna 0:fb4c529248d7 126 *vx = -LINE_LP;
ryuna 0:fb4c529248d7 127 }
ryuna 0:fb4c529248d7 128 }
ryuna 0:fb4c529248d7 129 void line_stop0(){
ryuna 0:fb4c529248d7 130 line_stop[FRONT] = 0;
ryuna 0:fb4c529248d7 131 }
ryuna 0:fb4c529248d7 132 void line_stop1(){
ryuna 0:fb4c529248d7 133 line_stop[LEFT] = 0;
ryuna 0:fb4c529248d7 134 }
ryuna 0:fb4c529248d7 135 void line_stop2(){
ryuna 0:fb4c529248d7 136 line_stop[BACK] = 0;
ryuna 0:fb4c529248d7 137 }
ryuna 0:fb4c529248d7 138 void line_stop3(){
ryuna 0:fb4c529248d7 139 line_stop[RIGHT] = 0;
ryuna 0:fb4c529248d7 140 }
ryuna 0:fb4c529248d7 141 void line_check(uint8_t *line){
ryuna 0:fb4c529248d7 142 if(!line_stop[FRONT]){
ryuna 0:fb4c529248d7 143 if(adcline[FRONT].read_u16() > LINE_ON){
ryuna 0:fb4c529248d7 144 line[FRONT] = 1;
ryuna 0:fb4c529248d7 145 line_stop[FRONT] = 1;
ryuna 0:fb4c529248d7 146 line_stop[BACK] = 1;
ryuna 0:fb4c529248d7 147 myled[0] = 1;
ryuna 0:fb4c529248d7 148 liner0.attach(&line_stop0,LINE_TIME);
ryuna 0:fb4c529248d7 149 liner2.attach(&line_stop2,LINE_TIME);
ryuna 0:fb4c529248d7 150 } else {
ryuna 0:fb4c529248d7 151 line[FRONT] = 0;
ryuna 0:fb4c529248d7 152 myled[0] = 0;
ryuna 0:fb4c529248d7 153 }
ryuna 0:fb4c529248d7 154 }
ryuna 0:fb4c529248d7 155 if(!line_stop[LEFT]){
ryuna 0:fb4c529248d7 156 if(adcline[LEFT].read_u16() > LINE_ON){
ryuna 0:fb4c529248d7 157 line[LEFT] = 1;
ryuna 0:fb4c529248d7 158 line_stop[LEFT] = 1;
ryuna 0:fb4c529248d7 159 line_stop[RIGHT] = 1;
ryuna 0:fb4c529248d7 160 myled[1] = 1;
ryuna 0:fb4c529248d7 161 liner1.attach(&line_stop1,LINE_TIME);
ryuna 0:fb4c529248d7 162 liner3.attach(&line_stop3,LINE_TIME);
ryuna 0:fb4c529248d7 163 } else {
ryuna 0:fb4c529248d7 164 line[LEFT] = 0;
ryuna 0:fb4c529248d7 165 myled[1] = 0;
ryuna 0:fb4c529248d7 166 }
ryuna 0:fb4c529248d7 167 }
ryuna 0:fb4c529248d7 168 if(!line_stop[BACK]){
ryuna 0:fb4c529248d7 169 if(adcline[BACK].read_u16() > LINE_ON){
ryuna 0:fb4c529248d7 170 line[BACK] = 1;
ryuna 0:fb4c529248d7 171 line_stop[BACK] = 1;
ryuna 0:fb4c529248d7 172 line_stop[FRONT] = 1;
ryuna 0:fb4c529248d7 173 myled[2] = 1;
ryuna 0:fb4c529248d7 174 liner2.attach(&line_stop2,LINE_TIME);
ryuna 0:fb4c529248d7 175 liner0.attach(&line_stop0,LINE_TIME);
ryuna 0:fb4c529248d7 176 } else {
ryuna 0:fb4c529248d7 177 line[BACK] = 0;
ryuna 0:fb4c529248d7 178 myled[2] = 0;
ryuna 0:fb4c529248d7 179 }
ryuna 0:fb4c529248d7 180 }
ryuna 0:fb4c529248d7 181 if(!line_stop[RIGHT]){
ryuna 0:fb4c529248d7 182 if(adcline[RIGHT].read_u16() > LINE_ON){
ryuna 0:fb4c529248d7 183 line[RIGHT] = 1;
ryuna 0:fb4c529248d7 184 line_stop[RIGHT] = 1;
ryuna 0:fb4c529248d7 185 line_stop[LEFT] = 1;
ryuna 0:fb4c529248d7 186 myled[3] = 1;
ryuna 0:fb4c529248d7 187 liner3.attach(&line_stop3,LINE_TIME);
ryuna 0:fb4c529248d7 188 liner1.attach(&line_stop1,LINE_TIME);
ryuna 0:fb4c529248d7 189 } else {
ryuna 0:fb4c529248d7 190 line[RIGHT] = 0;
ryuna 0:fb4c529248d7 191 myled[3] = 0;
ryuna 0:fb4c529248d7 192 }
ryuna 0:fb4c529248d7 193 }
ryuna 0:fb4c529248d7 194 }
ryuna 0:fb4c529248d7 195 void PidUpdate()
ryuna 0:fb4c529248d7 196 {
ryuna 0:fb4c529248d7 197 pid.setSetPoint((int)((REFERENCE + standTu) / 1.0));
ryuna 0:fb4c529248d7 198 inputPID = compass;
ryuna 0:fb4c529248d7 199
ryuna 0:fb4c529248d7 200 pid.setProcessValue(inputPID);
ryuna 0:fb4c529248d7 201 compassPID = -(pid.compute());
ryuna 0:fb4c529248d7 202 }
ryuna 0:fb4c529248d7 203
ryuna 0:fb4c529248d7 204
ryuna 0:fb4c529248d7 205 void ir_defense0(double *vx, double *vy, int *k, int rateD){
ryuna 0:fb4c529248d7 206
ryuna 0:fb4c529248d7 207
ryuna 0:fb4c529248d7 208 }
ryuna 0:fb4c529248d7 209
ryuna 0:fb4c529248d7 210 void ir_defense1(double *vx, double *vy, int *k, int rateD){
ryuna 0:fb4c529248d7 211
ryuna 0:fb4c529248d7 212
ryuna 0:fb4c529248d7 213 }
ryuna 0:fb4c529248d7 214
ryuna 0:fb4c529248d7 215 void ir_defense2(double *vx, double *vy, int *k, int rateD){
ryuna 0:fb4c529248d7 216
ryuna 0:fb4c529248d7 217
ryuna 0:fb4c529248d7 218 }
ryuna 0:fb4c529248d7 219
ryuna 0:fb4c529248d7 220 void ir_defense3(double *vx, double *vy, int *k, int rateD){
ryuna 0:fb4c529248d7 221
ryuna 0:fb4c529248d7 222
ryuna 0:fb4c529248d7 223 }
ryuna 0:fb4c529248d7 224
ryuna 0:fb4c529248d7 225 void ir_defense4(double *vx, double *vy, int *k, int rateD){
ryuna 0:fb4c529248d7 226
ryuna 0:fb4c529248d7 227
ryuna 0:fb4c529248d7 228 }
ryuna 0:fb4c529248d7 229
ryuna 0:fb4c529248d7 230 void ir_defense5(double *vx, double *vy, int *k, int rateD){
ryuna 0:fb4c529248d7 231
ryuna 0:fb4c529248d7 232
ryuna 0:fb4c529248d7 233 }
ryuna 0:fb4c529248d7 234
ryuna 0:fb4c529248d7 235 void ir_defense6(double *vx, double *vy, int *k, int rateD){
ryuna 0:fb4c529248d7 236
ryuna 0:fb4c529248d7 237
ryuna 0:fb4c529248d7 238 }
ryuna 0:fb4c529248d7 239
ryuna 0:fb4c529248d7 240 void ir_defense7(double *vx, double *vy, int *k, int rateD){
ryuna 0:fb4c529248d7 241 if(ping[2]<20){
ryuna 0:fb4c529248d7 242 *vx = DEFENSE_POWER*1.2*way16[13][0];
ryuna 0:fb4c529248d7 243 *vy = DEFENSE_POWER*1.2*way16[13][1];
ryuna 0:fb4c529248d7 244 }
ryuna 0:fb4c529248d7 245 }
ryuna 0:fb4c529248d7 246
ryuna 0:fb4c529248d7 247 void ir_defense8(double *vx, double *vy, int *k, int rateD){
ryuna 0:fb4c529248d7 248 if(ping[LEFT]>ping[RIGHT]){
ryuna 0:fb4c529248d7 249 *vx = DEFENSE_POWER*(-0.8+near1[ir_num][VX]+go[ir_num][VX]);
ryuna 0:fb4c529248d7 250 *vy = DEFENSE_POWER*(0.5+near1[ir_num][VY]+go[ir_num][VY]);
ryuna 0:fb4c529248d7 251 }else if(ping[RIGHT]>ping[LEFT]){
ryuna 0:fb4c529248d7 252 *vx = DEFENSE_POWER*(0.8+near1[ir_num][VX]+go[ir_num][VX]);
ryuna 0:fb4c529248d7 253 *vy = DEFENSE_POWER*(0.5+near1[ir_num][VY]+go[ir_num][VY]);
ryuna 0:fb4c529248d7 254 }
ryuna 0:fb4c529248d7 255
ryuna 0:fb4c529248d7 256 }
ryuna 0:fb4c529248d7 257
ryuna 0:fb4c529248d7 258 void ir_defense9(double *vx, double *vy, int *k, int rateD){
ryuna 0:fb4c529248d7 259 if(ping[2]<20){
ryuna 0:fb4c529248d7 260 *vx = DEFENSE_POWER*1.2*way16[3][0];
ryuna 0:fb4c529248d7 261 *vy = DEFENSE_POWER*1.2*way16[3][1];
ryuna 0:fb4c529248d7 262 }
ryuna 0:fb4c529248d7 263
ryuna 0:fb4c529248d7 264 }
ryuna 0:fb4c529248d7 265
ryuna 0:fb4c529248d7 266 void ir_offense0(double *vx, double *vy, int *vk, int rateD){
ryuna 0:fb4c529248d7 267 dash_charge.stop();
ryuna 0:fb4c529248d7 268 dash_charge.reset();
ryuna 0:fb4c529248d7 269 /*
ryuna 0:fb4c529248d7 270 clockL = 6.50;
ryuna 0:fb4c529248d7 271 standTu = 0;
ryuna 0:fb4c529248d7 272 *vx = (ir_min+5)*way16[9][0];
ryuna 0:fb4c529248d7 273 *vy = (ir_min+5)*way16[9][1];
ryuna 0:fb4c529248d7 274 */
ryuna 0:fb4c529248d7 275
ryuna 0:fb4c529248d7 276 }
ryuna 0:fb4c529248d7 277 void ir_offense1(double *vx, double *vy, int *vk, int rateD){
ryuna 0:fb4c529248d7 278 dash_charge.stop();
ryuna 0:fb4c529248d7 279 dash_charge.reset();
ryuna 0:fb4c529248d7 280 /*
ryuna 0:fb4c529248d7 281 clockL = 7.00;
ryuna 0:fb4c529248d7 282 standTu = 0;
ryuna 0:fb4c529248d7 283 *vx = ir_min*way16[10][0];
ryuna 0:fb4c529248d7 284 *vy = ir_min*way16[10][1];
ryuna 0:fb4c529248d7 285 */
ryuna 0:fb4c529248d7 286 }
ryuna 0:fb4c529248d7 287 void ir_offense2(double *vx, double *vy, int *vk, int rateD){
ryuna 0:fb4c529248d7 288 dash_charge.stop();
ryuna 0:fb4c529248d7 289 dash_charge.reset();
ryuna 0:fb4c529248d7 290
ryuna 0:fb4c529248d7 291 /*y
ryuna 0:fb4c529248d7 292 if(rateD <= 0){
ryuna 0:fb4c529248d7 293
ryuna 0:fb4c529248d7 294 *vx = STRENGTH*1.2*way16[0][0];
ryuna 0:fb4c529248d7 295 *vy = STRENGTH*1.2*way16[0][1];
ryuna 0:fb4c529248d7 296 }
ryuna 0:fb4c529248d7 297 */
ryuna 0:fb4c529248d7 298 /*
ryuna 0:fb4c529248d7 299 clockL = 10.0;
ryuna 0:fb4c529248d7 300 *vx=-ir_min;
ryuna 0:fb4c529248d7 301 *vy = ir_min+5;
ryuna 0:fb4c529248d7 302 if(ping[LEFT]>ping[RIGHT]){
ryuna 0:fb4c529248d7 303 clockL = 10.5;
ryuna 0:fb4c529248d7 304 *vx = 35*way16[14][0];
ryuna 0:fb4c529248d7 305 *vy = 35*way16[14][1];
ryuna 0:fb4c529248d7 306 *//**vx = 0;
ryuna 0:fb4c529248d7 307 *vy =35;*/
ryuna 0:fb4c529248d7 308 /*
ryuna 0:fb4c529248d7 309 }
ryuna 0:fb4c529248d7 310 */
ryuna 0:fb4c529248d7 311 }
ryuna 0:fb4c529248d7 312 void ir_offense3(double *vx, double *vy, int *vk, int rateD){
ryuna 0:fb4c529248d7 313 /**********
ryuna 0:fb4c529248d7 314 一定時間待ち,その間変わらずir[3]が反応していたならば、ブースト直進キック
ryuna 0:fb4c529248d7 315 irの最小値の位置が移動した場合,タイマーの時間を初期化、停止
ryuna 0:fb4c529248d7 316 設定時間内に変更がなかった場合,数秒間キック直進し続ける。(ほかからの変更を拒否)
ryuna 0:fb4c529248d7 317
ryuna 0:fb4c529248d7 318 ********/
ryuna 0:fb4c529248d7 319 if(dash_charge.read() == 0){
ryuna 0:fb4c529248d7 320
ryuna 0:fb4c529248d7 321 dash_charge.start();
ryuna 0:fb4c529248d7 322 }
ryuna 0:fb4c529248d7 323 /*
ryuna 0:fb4c529248d7 324 if(rateD <=0+3){
ryuna 0:fb4c529248d7 325 *vk = 25;
ryuna 0:fb4c529248d7 326 }else {
ryuna 0:fb4c529248d7 327 *vk = 0;
ryuna 0:fb4c529248d7 328 }
ryuna 0:fb4c529248d7 329 */
ryuna 0:fb4c529248d7 330 /*
ryuna 0:fb4c529248d7 331 if(rateD <= 0){
ryuna 0:fb4c529248d7 332 *vx = STRENGTH*1.2*way16[0][0];
ryuna 0:fb4c529248d7 333 *vy = STRENGTH*1.2*way16[0][1];
ryuna 0:fb4c529248d7 334 }*/
ryuna 0:fb4c529248d7 335 /*
ryuna 0:fb4c529248d7 336 clockL = 12.0;
ryuna 0:fb4c529248d7 337 *vx = 0,*vy = 30;
ryuna 0:fb4c529248d7 338 */
ryuna 0:fb4c529248d7 339 }
ryuna 0:fb4c529248d7 340 void ir_offense4(double *vx, double *vy, int *vk, int rateD){
ryuna 0:fb4c529248d7 341 dash_charge.stop();
ryuna 0:fb4c529248d7 342 dash_charge.reset();
ryuna 0:fb4c529248d7 343
ryuna 0:fb4c529248d7 344 /*if(rateD <= 0){
ryuna 0:fb4c529248d7 345
ryuna 0:fb4c529248d7 346 *vx = STRENGTH*1.2*way16[0][0];
ryuna 0:fb4c529248d7 347 *vy = STRENGTH*1.2*way16[0][1];
ryuna 0:fb4c529248d7 348 }*/
ryuna 0:fb4c529248d7 349 /*
ryuna 0:fb4c529248d7 350 clockL = 2.00;
ryuna 0:fb4c529248d7 351 *vx=ir_min;
ryuna 0:fb4c529248d7 352 *vy = ir_min+5;
ryuna 0:fb4c529248d7 353 if(ping[RIGHT]>ping[LEFT]){
ryuna 0:fb4c529248d7 354 clockL = 2.50;
ryuna 0:fb4c529248d7 355 *vx = 35*way16[2][0];
ryuna 0:fb4c529248d7 356 *vy = 35*way16[2][1];
ryuna 0:fb4c529248d7 357 *//**vx = 0;
ryuna 0:fb4c529248d7 358 *vy = 35;*/
ryuna 0:fb4c529248d7 359 /*
ryuna 0:fb4c529248d7 360 }
ryuna 0:fb4c529248d7 361 */
ryuna 0:fb4c529248d7 362 }
ryuna 0:fb4c529248d7 363 void ir_offense5(double *vx, double *vy, int *vk, int rateD){
ryuna 0:fb4c529248d7 364 dash_charge.stop();
ryuna 0:fb4c529248d7 365 dash_charge.reset();
ryuna 0:fb4c529248d7 366 /*
ryuna 0:fb4c529248d7 367 clockL = 5.00;
ryuna 0:fb4c529248d7 368 standTu = 0;
ryuna 0:fb4c529248d7 369 *vx = ir_min*way16[6][0];
ryuna 0:fb4c529248d7 370 *vy = ir_min*way16[6][1];
ryuna 0:fb4c529248d7 371 */
ryuna 0:fb4c529248d7 372 }
ryuna 0:fb4c529248d7 373 void ir_offense6(double *vx, double *vy, int *vk, int rateD){
ryuna 0:fb4c529248d7 374 dash_charge.stop();
ryuna 0:fb4c529248d7 375 dash_charge.reset();
ryuna 0:fb4c529248d7 376 /*
ryuna 0:fb4c529248d7 377 clockL = 5.50;
ryuna 0:fb4c529248d7 378 standTu = 0;
ryuna 0:fb4c529248d7 379 *vx = (ir_min+5)*way16[7][0];
ryuna 0:fb4c529248d7 380 *vy = (ir_min+5)*way16[7][1];
ryuna 0:fb4c529248d7 381 */
ryuna 0:fb4c529248d7 382 }
ryuna 0:fb4c529248d7 383 void ir_offense7(double *vx, double *vy, int *vk, int rateD){
ryuna 0:fb4c529248d7 384 dash_charge.stop();
ryuna 0:fb4c529248d7 385 dash_charge.reset();
ryuna 0:fb4c529248d7 386 /*clockL = 6.00;
ryuna 0:fb4c529248d7 387 standTu = 0;
ryuna 0:fb4c529248d7 388 *vx = 0;
ryuna 0:fb4c529248d7 389 *vy = -(ir_min+8);
ryuna 0:fb4c529248d7 390 */
ryuna 0:fb4c529248d7 391 }
ryuna 0:fb4c529248d7 392 void ir_offense8(double *vx, double *vy, int *vk, int rateD){
ryuna 0:fb4c529248d7 393 dash_charge.stop();
ryuna 0:fb4c529248d7 394 dash_charge.reset();
ryuna 0:fb4c529248d7 395 if(rateD<(0)){
ryuna 0:fb4c529248d7 396 if(ping[LEFT]>ping[RIGHT]){
ryuna 0:fb4c529248d7 397 *vx = OFFENSE_POWER*(-1+near1[ir_num][VX]+go[ir_num][VX]);
ryuna 0:fb4c529248d7 398 *vy = OFFENSE_POWER*(1+near1[ir_num][VY]+go[ir_num][VY]);
ryuna 0:fb4c529248d7 399 }else if(ping[RIGHT]>ping[LEFT]){
ryuna 0:fb4c529248d7 400 *vx = OFFENSE_POWER*(1+near1[ir_num][VX]+go[ir_num][VX]);
ryuna 0:fb4c529248d7 401 *vy = OFFENSE_POWER*(1+near1[ir_num][VY]+go[ir_num][VY]);
ryuna 0:fb4c529248d7 402 }
ryuna 0:fb4c529248d7 403 }
ryuna 0:fb4c529248d7 404 /*standTu = 0;
ryuna 0:fb4c529248d7 405 if(ping[LEFT]>ping[RIGHT]){
ryuna 0:fb4c529248d7 406 clockL = 8.00;
ryuna 0:fb4c529248d7 407 *vx = 40*way16[11][0];
ryuna 0:fb4c529248d7 408 *vy = 40*way16[11][1];
ryuna 0:fb4c529248d7 409 }else{
ryuna 0:fb4c529248d7 410 clockL = 4.00;
ryuna 0:fb4c529248d7 411 *vx = 40*way16[5][0];
ryuna 0:fb4c529248d7 412 *vy = 40*way16[5][1];
ryuna 0:fb4c529248d7 413 }*/
ryuna 0:fb4c529248d7 414 }
ryuna 0:fb4c529248d7 415 void ir_offense9(double *vx, double *vy, int *vk, int rateD){
ryuna 0:fb4c529248d7 416 dash_charge.stop();
ryuna 0:fb4c529248d7 417 dash_charge.reset();
ryuna 0:fb4c529248d7 418 /*clockL = 6.00;
ryuna 0:fb4c529248d7 419 standTu = 0;
ryuna 0:fb4c529248d7 420 *vx = 0;
ryuna 0:fb4c529248d7 421 *vy = -(ir_min+8);*/
ryuna 0:fb4c529248d7 422 }
ryuna 0:fb4c529248d7 423
ryuna 0:fb4c529248d7 424
ryuna 0:fb4c529248d7 425 /**kick and dash function**/
ryuna 0:fb4c529248d7 426 void dash_reset(){
ryuna 0:fb4c529248d7 427 dash_stop = 0;
ryuna 0:fb4c529248d7 428 lcd.cls();
ryuna 0:fb4c529248d7 429 }
ryuna 0:fb4c529248d7 430
ryuna 0:fb4c529248d7 431 void dist_fun_DM(int *rate_dm){//used defense first junction
ryuna 0:fb4c529248d7 432 *rate_dm = ir_min - keep_ball[ir_num];//zastu
ryuna 0:fb4c529248d7 433 if(*rate_dm >0){
ryuna 0:fb4c529248d7 434 *rate_dm = 1;
ryuna 0:fb4c529248d7 435 }else if(*rate_dm <-7){
ryuna 0:fb4c529248d7 436 *rate_dm =-7;
ryuna 0:fb4c529248d7 437 }
ryuna 0:fb4c529248d7 438
ryuna 0:fb4c529248d7 439 }
ryuna 0:fb4c529248d7 440
ryuna 0:fb4c529248d7 441 void dist_fun_D(int *rate_d){//ofense action support
ryuna 0:fb4c529248d7 442 *rate_d = ir_main - keep_dist[ir_num];
ryuna 0:fb4c529248d7 443 if(*rate_d < -5){
ryuna 0:fb4c529248d7 444 *rate_d = -5;
ryuna 0:fb4c529248d7 445 }else if(*rate_d >10){
ryuna 0:fb4c529248d7 446 *rate_d = 11;
ryuna 0:fb4c529248d7 447 }
ryuna 0:fb4c529248d7 448 }
ryuna 0:fb4c529248d7 449 void dist_fun_ping(int *rate_p){//defense action support
ryuna 0:fb4c529248d7 450 rate_p[1] = ping[1] - keep_ping[1];
ryuna 0:fb4c529248d7 451 if(rate_p[1] <-10){
ryuna 0:fb4c529248d7 452 rate_p[1] = -10;
ryuna 0:fb4c529248d7 453 }else if(rate_p[1]>0){
ryuna 0:fb4c529248d7 454 rate_p[1] = 1;
ryuna 0:fb4c529248d7 455 }
ryuna 0:fb4c529248d7 456 rate_p[2] = keep_ping[2] - ping[2];
ryuna 0:fb4c529248d7 457 if(rate_p[2]<-5){
ryuna 0:fb4c529248d7 458 rate_p[2] = -5;
ryuna 0:fb4c529248d7 459 }else if(rate_p[2] >6){
ryuna 0:fb4c529248d7 460 rate_p[2] = 6;
ryuna 0:fb4c529248d7 461 }
ryuna 0:fb4c529248d7 462 rate_p[3] = ping[3] - keep_ping[3];
ryuna 0:fb4c529248d7 463 if(rate_p[3] <-10){
ryuna 0:fb4c529248d7 464 rate_p[3] = -10;
ryuna 0:fb4c529248d7 465 }else if(rate_p[3]>0){
ryuna 0:fb4c529248d7 466 rate_p[3] = 1;
ryuna 0:fb4c529248d7 467 }
ryuna 0:fb4c529248d7 468 }
ryuna 0:fb4c529248d7 469
ryuna 0:fb4c529248d7 470 void dist_fun_pingSTRONG(int *rate_p){//defense action support
ryuna 0:fb4c529248d7 471 rate_p[2] = keep_pingSTRONG[2] - ping[2];
ryuna 0:fb4c529248d7 472 if(rate_p[2]<-5){
ryuna 0:fb4c529248d7 473 rate_p[2] = -5;
ryuna 0:fb4c529248d7 474 }else if(rate_p[2] >6){
ryuna 0:fb4c529248d7 475 rate_p[2] = 6;
ryuna 0:fb4c529248d7 476 }
ryuna 0:fb4c529248d7 477 if(ping[1]+ping[3] >=155){//tyousei
ryuna 0:fb4c529248d7 478 rate_p[1] = ping[1] - keep_pingSTRONG[1];//38
ryuna 0:fb4c529248d7 479 if(rate_p[1] <-10){
ryuna 0:fb4c529248d7 480 rate_p[1] = -10;
ryuna 0:fb4c529248d7 481 }else if(rate_p[1]>0){
ryuna 0:fb4c529248d7 482 rate_p[1] = 1;
ryuna 0:fb4c529248d7 483 }
ryuna 0:fb4c529248d7 484
ryuna 0:fb4c529248d7 485 rate_p[3] = ping[3] - keep_pingSTRONG[3];///37
ryuna 0:fb4c529248d7 486 if(rate_p[3] <-10){
ryuna 0:fb4c529248d7 487 rate_p[3] = -10;
ryuna 0:fb4c529248d7 488 }else if(rate_p[3]>0){
ryuna 0:fb4c529248d7 489 rate_p[3] = 1;
ryuna 0:fb4c529248d7 490 }
ryuna 0:fb4c529248d7 491
ryuna 0:fb4c529248d7 492 }else {
ryuna 0:fb4c529248d7 493 rate_p[1] = 0;
ryuna 0:fb4c529248d7 494 rate_p[3] = 0;
ryuna 0:fb4c529248d7 495 }
ryuna 0:fb4c529248d7 496 }
ryuna 0:fb4c529248d7 497 /*
ryuna 0:fb4c529248d7 498 void dist_fun(int *rate_d,int *rate_dm,int *rate_p){*//*This is compute some length.?*/
ryuna 0:fb4c529248d7 499 /* KEEP_DISTANCE is border line, ir_main is variable
ryuna 0:fb4c529248d7 500 if ir_main> keep_dist (access)
ryuna 0:fb4c529248d7 501 else ir_main< keep_dist (out)
ryuna 0:fb4c529248d7 502 @retaD
ryuna 0:fb4c529248d7 503 */
ryuna 0:fb4c529248d7 504 /*
ryuna 0:fb4c529248d7 505 *rate_d = ir_main - keep_dist[ir_num];
ryuna 0:fb4c529248d7 506 if(*rate_d < -5){
ryuna 0:fb4c529248d7 507 *rate_d = -5;
ryuna 0:fb4c529248d7 508 }else if(*rate_d >10){
ryuna 0:fb4c529248d7 509 *rate_d = 11; //+30
ryuna 0:fb4c529248d7 510 }
ryuna 0:fb4c529248d7 511 *rate_dm = ir_min - keep_ball[ir_num];//zastu
ryuna 0:fb4c529248d7 512 rate_p[1] = ping[1] - keep_ping[1];
ryuna 0:fb4c529248d7 513 if(rate_p[1] <-10){
ryuna 0:fb4c529248d7 514 rate_p[1] = -10;
ryuna 0:fb4c529248d7 515 }else if(rate_p[1]>0){
ryuna 0:fb4c529248d7 516 rate_p[1] = 1;
ryuna 0:fb4c529248d7 517 }
ryuna 0:fb4c529248d7 518 rate_p[2] = keep_ping[2] - ping[2];
ryuna 0:fb4c529248d7 519 if(rate_p[2]<-5){
ryuna 0:fb4c529248d7 520 rate_p[2] = -5;
ryuna 0:fb4c529248d7 521 }else if(rate_p[2] >6){
ryuna 0:fb4c529248d7 522 rate_p[2] = 6;
ryuna 0:fb4c529248d7 523 }
ryuna 0:fb4c529248d7 524 rate_p[3] = ping[3] - keep_ping[3];
ryuna 0:fb4c529248d7 525 if(rate_p[3] <-10){
ryuna 0:fb4c529248d7 526 rate_p[3] = -10;
ryuna 0:fb4c529248d7 527 }else if(rate_p[3]>0){
ryuna 0:fb4c529248d7 528 rate_p[3] = 1;
ryuna 0:fb4c529248d7 529 }
ryuna 0:fb4c529248d7 530
ryuna 0:fb4c529248d7 531
ryuna 0:fb4c529248d7 532 }
ryuna 0:fb4c529248d7 533 */
ryuna 0:fb4c529248d7 534 void home_stop0(){
ryuna 0:fb4c529248d7 535 home_stop = 0;
ryuna 0:fb4c529248d7 536 }
ryuna 0:fb4c529248d7 537
ryuna 0:fb4c529248d7 538 void back_home(double *vx,double*vy){
ryuna 0:fb4c529248d7 539 *vx = 0;
ryuna 0:fb4c529248d7 540 *vy = -40;
ryuna 0:fb4c529248d7 541 if(!home_stop){
ryuna 0:fb4c529248d7 542 if(timer_home.read() ==0){
ryuna 0:fb4c529248d7 543 timer_home.start();
ryuna 0:fb4c529248d7 544 }
ryuna 0:fb4c529248d7 545 }
ryuna 0:fb4c529248d7 546 if(ping[2]<24){
ryuna 0:fb4c529248d7 547 *vy = -35;
ryuna 0:fb4c529248d7 548 }else if(ping[2]<30){
ryuna 0:fb4c529248d7 549 *vy = -25;
ryuna 0:fb4c529248d7 550 }
ryuna 0:fb4c529248d7 551 if((abs(ping[1]-ping[3]))>25){
ryuna 0:fb4c529248d7 552 if(ping[1]>ping[3]){
ryuna 0:fb4c529248d7 553 //*vy = 15;
ryuna 0:fb4c529248d7 554 *vx = -25;
ryuna 0:fb4c529248d7 555 }else if(ping[1]<ping[3]){
ryuna 0:fb4c529248d7 556 //*vy = 12;
ryuna 0:fb4c529248d7 557 *vx = 25;
ryuna 0:fb4c529248d7 558 }
ryuna 0:fb4c529248d7 559 }
ryuna 0:fb4c529248d7 560
ryuna 0:fb4c529248d7 561 //左角を抜ける方法を考える
ryuna 0:fb4c529248d7 562
ryuna 0:fb4c529248d7 563
ryuna 0:fb4c529248d7 564 if((timer_home.read()>0.6)/*||home0.read()==0*/){
ryuna 0:fb4c529248d7 565 *vy = 11;
ryuna 0:fb4c529248d7 566 *vx = 0;
ryuna 0:fb4c529248d7 567 timer_home.stop();
ryuna 0:fb4c529248d7 568 timer_home.reset();
ryuna 0:fb4c529248d7 569 home_stop = 1;
ryuna 0:fb4c529248d7 570 home.attach(&home_stop0,BACK_HOME_TIME);
ryuna 0:fb4c529248d7 571 //wait(0.1);
ryuna 0:fb4c529248d7 572 }
ryuna 0:fb4c529248d7 573 if(ping[2]<20){
ryuna 0:fb4c529248d7 574 *vx = 0;
ryuna 0:fb4c529248d7 575 *vy = 5;
ryuna 0:fb4c529248d7 576 }
ryuna 0:fb4c529248d7 577
ryuna 0:fb4c529248d7 578 }
ryuna 0:fb4c529248d7 579 int main(void){
ryuna 0:fb4c529248d7 580
ryuna 0:fb4c529248d7 581 uint8_t line[4] = {0}; /*@line_state,line_check*/
ryuna 0:fb4c529248d7 582 double vx = 0,vy = 0; /*used move(moter)*/
ryuna 0:fb4c529248d7 583 int vs = 0, vk = 0; /*used move(moter)*/
ryuna 0:fb4c529248d7 584 int rateD = 0; /*keep distance*/
ryuna 0:fb4c529248d7 585 int rateDM = 0; /*keep_distrance to boal //ir_max use*/
ryuna 0:fb4c529248d7 586 int rateP[4] = {0}; /*keep in front of goal*/
ryuna 0:fb4c529248d7 587 void (*offense[10])(double *,double *,int *,int);
ryuna 0:fb4c529248d7 588 void (*defense[10])(double *,double *,int *,int);
ryuna 0:fb4c529248d7 589
ryuna 0:fb4c529248d7 590 //dcompass.setOpMode(HMC6352_CONTINUOUS, 1, 20);
ryuna 0:fb4c529248d7 591 motor.baud(115200); //ボーレート設定
ryuna 0:fb4c529248d7 592 motor.printf("1F0002F0003F0004F000\r\n"); //モータ停止
ryuna 0:fb4c529248d7 593 motor.attach(&tx_motor,Serial::TxIrq); //送信空き割り込み(モータ用)
ryuna 0:fb4c529248d7 594 sensor.attach(&micon_rx,Serial::RxIrq); //送信空き割り込み(センサ用)
ryuna 0:fb4c529248d7 595 //compassdef = (compass / 10); //コンパス初期値保存
ryuna 0:fb4c529248d7 596 //compassdef = (dcompass.sample() / 10);
ryuna 0:fb4c529248d7 597 pid.setInputLimits(MINIMUM,MAXIMUM); //pid sed def
ryuna 0:fb4c529248d7 598 pid.setOutputLimits(-OUT_LIMIT, OUT_LIMIT); //pid sed def
ryuna 0:fb4c529248d7 599 pid.setBias(PID_BIAS); //pid sed def
ryuna 0:fb4c529248d7 600 pid.setMode(AUTO_MODE); //pid sed def
ryuna 0:fb4c529248d7 601 pid.setSetPoint(REFERENCE); //pid sed def
ryuna 0:fb4c529248d7 602 start.mode(PullDown); //digitalin pulldown
ryuna 0:fb4c529248d7 603 check.mode(PullUp); //digitalin pullup
ryuna 0:fb4c529248d7 604 kick_check.mode(PullUp);
ryuna 0:fb4c529248d7 605
ryuna 0:fb4c529248d7 606 offense[0] = ir_offense0;
ryuna 0:fb4c529248d7 607 offense[1] = ir_offense1;
ryuna 0:fb4c529248d7 608 offense[2] = ir_offense2;
ryuna 0:fb4c529248d7 609 offense[3] = ir_offense3;
ryuna 0:fb4c529248d7 610 offense[4] = ir_offense4;
ryuna 0:fb4c529248d7 611 offense[5] = ir_offense5;
ryuna 0:fb4c529248d7 612 offense[6] = ir_offense6;
ryuna 0:fb4c529248d7 613 offense[7] = ir_offense7;
ryuna 0:fb4c529248d7 614 offense[8] = ir_offense8;
ryuna 0:fb4c529248d7 615 offense[9] = ir_offense9;
ryuna 0:fb4c529248d7 616
ryuna 0:fb4c529248d7 617
ryuna 0:fb4c529248d7 618 defense[0] = ir_defense0;
ryuna 0:fb4c529248d7 619 defense[1] = ir_defense1;
ryuna 0:fb4c529248d7 620 defense[2] = ir_defense2;
ryuna 0:fb4c529248d7 621 defense[3] = ir_defense3;
ryuna 0:fb4c529248d7 622 defense[4] = ir_defense4;
ryuna 0:fb4c529248d7 623 defense[5] = ir_defense5;
ryuna 0:fb4c529248d7 624 defense[6] = ir_defense6;
ryuna 0:fb4c529248d7 625 defense[7] = ir_defense7;
ryuna 0:fb4c529248d7 626 defense[8] = ir_defense8;
ryuna 0:fb4c529248d7 627 defense[9] = ir_defense9;
ryuna 0:fb4c529248d7 628
ryuna 0:fb4c529248d7 629
ryuna 0:fb4c529248d7 630
ryuna 0:fb4c529248d7 631 pidUpdata.attach(&PidUpdate, PID_CYCLE);
ryuna 0:fb4c529248d7 632 //move(30,0,0,0);
ryuna 0:fb4c529248d7 633 count = 0;
ryuna 0:fb4c529248d7 634 if(check){// NOT use Xbee
ryuna 0:fb4c529248d7 635 myled[3] = 0;
ryuna 0:fb4c529248d7 636 count = 1;
ryuna 0:fb4c529248d7 637 //lcd.printf("NOT USE XBee\nDEFENSE\n");
ryuna 0:fb4c529248d7 638 /*
ryuna 0:fb4c529248d7 639 count = 1:defense
ryuna 0:fb4c529248d7 640 count = 0:offense
ryuna 0:fb4c529248d7 641 */
ryuna 0:fb4c529248d7 642 }else {
ryuna 0:fb4c529248d7 643 myled[3] = 1;
ryuna 0:fb4c529248d7 644 xbeerx.attach(&xbee_rx,5);
ryuna 0:fb4c529248d7 645 xbeetx.attach(&xbee_tx,5);
ryuna 0:fb4c529248d7 646 }
ryuna 0:fb4c529248d7 647 myled[0] = 1;
ryuna 0:fb4c529248d7 648 while(!start){
ryuna 0:fb4c529248d7 649 lcd.printf("comp %3d min %3dnum %3d main %3d",compass,ir_min,ir_num,ir_main);
ryuna 0:fb4c529248d7 650 if(!kick_check){
ryuna 0:fb4c529248d7 651 move(0,0,0,25);
ryuna 0:fb4c529248d7 652 }else{
ryuna 0:fb4c529248d7 653 move(0,0,0,0);
ryuna 0:fb4c529248d7 654 }
ryuna 0:fb4c529248d7 655 }
ryuna 0:fb4c529248d7 656 myled[0] = 0;
ryuna 0:fb4c529248d7 657 lcd.cls();
ryuna 0:fb4c529248d7 658 while(1){
ryuna 0:fb4c529248d7 659 vx = 0, vy = 0, vk = 0;
ryuna 0:fb4c529248d7 660 standTu = 0;
ryuna 0:fb4c529248d7 661
ryuna 0:fb4c529248d7 662 if(ir_num<10){
ryuna 0:fb4c529248d7 663 dist_fun_DM(&rateDM);//used defense first junction
ryuna 0:fb4c529248d7 664
ryuna 0:fb4c529248d7 665 if(count){/**** DEFENSE ACTION!! *******/
ryuna 0:fb4c529248d7 666 if((rateDM > 0)||(ping[2]>33)){//key point
ryuna 0:fb4c529248d7 667 dist_fun_ping(rateP);//check ping state.
ryuna 0:fb4c529248d7 668 vx = DEFENSE_POWER*(goal_state1[rateP[1]+10][0]+goal_state3[rateP[3]+10][0]+ball_state0[ir_num][0]);
ryuna 0:fb4c529248d7 669 vy = DEFENSE_POWER*(goal_state1[rateP[1]+10][1]+goal_state2[rateP[2]+5][1]+goal_state3[rateP[3]+10][1]+ball_state0[ir_num][1]);
ryuna 0:fb4c529248d7 670 if(ping[2]<28){
ryuna 0:fb4c529248d7 671
ryuna 0:fb4c529248d7 672 }else if(ping[2]<45){
ryuna 0:fb4c529248d7 673 vy = -30;
ryuna 0:fb4c529248d7 674 }else {
ryuna 0:fb4c529248d7 675 vx =0;
ryuna 0:fb4c529248d7 676 vy = -35;
ryuna 0:fb4c529248d7 677 }
ryuna 0:fb4c529248d7 678
ryuna 0:fb4c529248d7 679
ryuna 0:fb4c529248d7 680 }else{
ryuna 0:fb4c529248d7 681 dist_fun_pingSTRONG(rateP);
ryuna 0:fb4c529248d7 682 vx = DEFENSE_POWER*(apply[rateDM+7]*ball_state1[ir_num][0]+strongPing1[rateP[1]+10][0]+strongPing3[rateP[3]+10][0]);
ryuna 0:fb4c529248d7 683 vy = DEFENSE_POWER*(apply[rateDM+7]*ball_state1[ir_num][1]+strongPing1[rateP[1]+10][1]+strongPing2[rateP[2]+10][1]+strongPing3[rateP[3]+10][1]);
ryuna 0:fb4c529248d7 684 (*defense[ir_num])(&vx,&vy,&vk,rateD);
ryuna 0:fb4c529248d7 685
ryuna 0:fb4c529248d7 686 if(ir_num == 2||ir_num == 3||ir_num == 4){
ryuna 0:fb4c529248d7 687 vk=25;
ryuna 0:fb4c529248d7 688 }
ryuna 0:fb4c529248d7 689 }
ryuna 0:fb4c529248d7 690
ryuna 0:fb4c529248d7 691
ryuna 0:fb4c529248d7 692 }else{/**** OFFENSE ACTION!! *****/
ryuna 0:fb4c529248d7 693 // if count =0
ryuna 0:fb4c529248d7 694 if((rateDM > 0)&&((ir_num != 2)&&(ir_num !=3)&&(ir_num!=4))){
ryuna 0:fb4c529248d7 695 //アウトオブリーチ時後ろに下がりながらボールの直線上に移動する
ryuna 0:fb4c529248d7 696 dist_fun_ping(rateP);//check ping_state
ryuna 0:fb4c529248d7 697
ryuna 0:fb4c529248d7 698 vx = OFFENSE_POWER*(goal_state1[rateP[1]+10][0]+goal_state3[rateP[3]+10][0]+ball_state0[ir_num][0]);
ryuna 0:fb4c529248d7 699 vy = OFFENSE_POWER*(goal_state1[rateP[1]+10][1]+goal_state2[rateP[2]+5][1]+goal_state3[rateP[3]+10][1]+ball_state0[ir_num][1]);
ryuna 0:fb4c529248d7 700
ryuna 0:fb4c529248d7 701 if(ping[2]<30){
ryuna 0:fb4c529248d7 702 //stop place
ryuna 0:fb4c529248d7 703 }else if(ping[2]<50){
ryuna 0:fb4c529248d7 704 vy = -30;
ryuna 0:fb4c529248d7 705 }else {
ryuna 0:fb4c529248d7 706 vx = 0;
ryuna 0:fb4c529248d7 707 vy = -35;
ryuna 0:fb4c529248d7 708 }
ryuna 0:fb4c529248d7 709
ryuna 0:fb4c529248d7 710 }else{/**** Main offense action */
ryuna 0:fb4c529248d7 711
ryuna 0:fb4c529248d7 712 if(!dash_stop){
ryuna 0:fb4c529248d7 713 dist_fun_D(&rateD);//check ball state.
ryuna 0:fb4c529248d7 714 if(rateD > 0){
ryuna 0:fb4c529248d7 715 //dist_fun_pingSTRONG(rateP);
ryuna 0:fb4c529248d7 716 vx = OFFENSE_POWER*(near0[ir_num][0]+modulate_go[rateD+5]*go[ir_num][0]);
ryuna 0:fb4c529248d7 717 vy = OFFENSE_POWER*(near0[ir_num][1]+modulate_go[rateD+5]*go[ir_num][1]);
ryuna 0:fb4c529248d7 718
ryuna 0:fb4c529248d7 719 }else{
ryuna 0:fb4c529248d7 720 vx = OFFENSE_POWER*(modulate_near[rateD+5]*near1[ir_num][0]+go[ir_num][0]);
ryuna 0:fb4c529248d7 721 vy = OFFENSE_POWER*(modulate_near[rateD+5]*near1[ir_num][1]+go[ir_num][1]);
ryuna 0:fb4c529248d7 722 }
ryuna 0:fb4c529248d7 723
ryuna 0:fb4c529248d7 724 if(dash_charge.read()>=CHARGE_DACH_TIME){
ryuna 0:fb4c529248d7 725 dash_start.attach(&dash_reset,DASH_TIME);
ryuna 0:fb4c529248d7 726 dash_stop = 1;
ryuna 0:fb4c529248d7 727 //lcd.printf(" FALCON KICK \n\n");
ryuna 0:fb4c529248d7 728 dash_charge.stop();
ryuna 0:fb4c529248d7 729 dash_charge.reset();
ryuna 0:fb4c529248d7 730 }
ryuna 0:fb4c529248d7 731 }
ryuna 0:fb4c529248d7 732 (*offense[ir_num])(&vx,&vy,&vk,rateD);
ryuna 0:fb4c529248d7 733 if(dash_stop){
ryuna 0:fb4c529248d7 734 vk = 25;
ryuna 0:fb4c529248d7 735 vx = DASH_STRENGTH*way16[0][0];
ryuna 0:fb4c529248d7 736 vy = DASH_STRENGTH*way16[0][1];
ryuna 0:fb4c529248d7 737
ryuna 0:fb4c529248d7 738
ryuna 0:fb4c529248d7 739 }
ryuna 0:fb4c529248d7 740
ryuna 0:fb4c529248d7 741 }
ryuna 0:fb4c529248d7 742
ryuna 0:fb4c529248d7 743 }
ryuna 0:fb4c529248d7 744 }
ryuna 0:fb4c529248d7 745
ryuna 0:fb4c529248d7 746 if(ir_num >= 10){
ryuna 0:fb4c529248d7 747 back_home(&vx,&vy);
ryuna 0:fb4c529248d7 748 }
ryuna 0:fb4c529248d7 749 line_check(line);
ryuna 0:fb4c529248d7 750 line_state(&vx,&vy,line);
ryuna 0:fb4c529248d7 751 vs = compassPID;
ryuna 0:fb4c529248d7 752 move(vx,vy,vs,vk);
ryuna 0:fb4c529248d7 753 //lcd.printf("%0.2lf clock\n\n",clockL);
ryuna 0:fb4c529248d7 754 //pc.printf("compassPID:%d\t compass:%d\n",s,compass);
ryuna 0:fb4c529248d7 755 //pc.printf("%lf %lf\n",x,y);
ryuna 0:fb4c529248d7 756 //pc.printf("compass: %d\n",compass);
ryuna 0:fb4c529248d7 757 //pc.printf("ping0:%d\tping1:%d\tping2:%d\tping3:%d\n",ping[0],ping[1],ping[2],ping[3]);
ryuna 0:fb4c529248d7 758 //pc.printf("ir_min:%d\tir_num:%d\tir_main:%d\n",ir_min,ir_num,ir_main);
ryuna 0:fb4c529248d7 759 //pc.printf("line0:%d\tline1:%d\tline2:%d\tline3:%d\n",adcline[0].read_u16(),adcline[1].read_u16(),adcline[2].read_u16(),adcline[3].read_u16());
ryuna 0:fb4c529248d7 760 }
ryuna 0:fb4c529248d7 761
ryuna 0:fb4c529248d7 762
ryuna 0:fb4c529248d7 763
ryuna 0:fb4c529248d7 764
ryuna 0:fb4c529248d7 765
ryuna 0:fb4c529248d7 766
ryuna 0:fb4c529248d7 767
ryuna 0:fb4c529248d7 768 /**************************************************
ryuna 0:fb4c529248d7 769
ryuna 0:fb4c529248d7 770
ryuna 0:fb4c529248d7 771
ryuna 0:fb4c529248d7 772
ryuna 0:fb4c529248d7 773
ryuna 0:fb4c529248d7 774
ryuna 0:fb4c529248d7 775
ryuna 0:fb4c529248d7 776
ryuna 0:fb4c529248d7 777
ryuna 0:fb4c529248d7 778
ryuna 0:fb4c529248d7 779
ryuna 0:fb4c529248d7 780
ryuna 0:fb4c529248d7 781
ryuna 0:fb4c529248d7 782
ryuna 0:fb4c529248d7 783
ryuna 0:fb4c529248d7 784
ryuna 0:fb4c529248d7 785
ryuna 0:fb4c529248d7 786
ryuna 0:fb4c529248d7 787 ****************************************************/
ryuna 0:fb4c529248d7 788 /*
ryuna 0:fb4c529248d7 789 while(1){
ryuna 0:fb4c529248d7 790 vx = 0, vy = 0, vk = 0;
ryuna 0:fb4c529248d7 791 standTu = 0;
ryuna 0:fb4c529248d7 792 //dist_fun(&rateD,&rateDM,rateP);//3to-ri
ryuna 0:fb4c529248d7 793 if(ir_num<10){*/
ryuna 0:fb4c529248d7 794 /*if(rateD >= 0){//if(ir_num =2ka4) =3
ryuna 0:fb4c529248d7 795 vx = STRENGTH*(modulate_near[rateD+5]*near0[ir_num][0]+modulate_go[rateD+5]*go[ir_num][0]);
ryuna 0:fb4c529248d7 796 vy = STRENGTH*(modulate_near[rateD+5]*near0[ir_num][1]+modulate_go[rateD+5]*go[ir_num][1]);
ryuna 0:fb4c529248d7 797 }else{
ryuna 0:fb4c529248d7 798 vx = STRENGTH*(modulate_near[rateD+5]*near1[ir_num][0]+modulate_go[rateD+5]*go[ir_num][0]);
ryuna 0:fb4c529248d7 799 vy = STRENGTH*(modulate_near[rateD+5]*near1[ir_num][1]+modulate_go[rateD+5]*go[ir_num][1]);
ryuna 0:fb4c529248d7 800 }*/
ryuna 0:fb4c529248d7 801 /*
ryuna 0:fb4c529248d7 802 if(rateD >= 0){
ryuna 0:fb4c529248d7 803 vx = STRENGTH*(modulate[rateD+5]*near0[ir_num][0]+modulate[rateD+5]*go[ir_num][0]);
ryuna 0:fb4c529248d7 804 vy = STRENGTH*(modulate[rateD+5]*near0[ir_num][1]+modulate[rateD+5]*go[ir_num][1]);
ryuna 0:fb4c529248d7 805 }else{
ryuna 0:fb4c529248d7 806 vx = STRENGTH*(modulate[rateD+5]*near1[ir_num][0]+modulate_go[rateD+5]*go[ir_num][0]);
ryuna 0:fb4c529248d7 807 vy = STRENGTH*(modulate[rateD+5]*near1[ir_num][1]+modulate_go[rateD+5]*go[ir_num][1]);
ryuna 0:fb4c529248d7 808 }*/
ryuna 0:fb4c529248d7 809 /*
ryuna 0:fb4c529248d7 810 dist_fun_DM(&rateDM);//used defense first junction
ryuna 0:fb4c529248d7 811 if(count){//defense
ryuna 0:fb4c529248d7 812 if(rateDM > 0){//key point
ryuna 0:fb4c529248d7 813 dist_fun_ping(rateP);//check ping state.
ryuna 0:fb4c529248d7 814 vx = DEFENSE_POWER*(goal_state1[rateP[1]+10][0]+goal_state3[rateP[3]+10][0]+ball_state0[ir_num][0]);
ryuna 0:fb4c529248d7 815 vy = DEFENSE_POWER*(goal_state1[rateP[1]+10][1]+goal_state2[rateP[2]+5][1]+goal_state3[rateP[3]+10][1]+ball_state0[ir_num][1]);
ryuna 0:fb4c529248d7 816 if(ping[2]<35){
ryuna 0:fb4c529248d7 817
ryuna 0:fb4c529248d7 818 }else if(ping[2]<48){
ryuna 0:fb4c529248d7 819 vy = -30;
ryuna 0:fb4c529248d7 820 }else {
ryuna 0:fb4c529248d7 821 vy = 0;
ryuna 0:fb4c529248d7 822 vy = -35;
ryuna 0:fb4c529248d7 823 }
ryuna 0:fb4c529248d7 824 }else{*/
ryuna 0:fb4c529248d7 825 /*if(ir_num<7){
ryuna 0:fb4c529248d7 826 vx = DEFENSE_POWER*ball_state1[ir_num][0];
ryuna 0:fb4c529248d7 827 vy = DEFENSE_POWER*(goal_state2[rateP[2]+5][1]+ball_state1[ir_num][1]);
ryuna 0:fb4c529248d7 828 }else if(ir_num<10){
ryuna 0:fb4c529248d7 829 vx = DEFENSE_POWER*(strongPing1[rateP[1]+10][0]+strongPing3[rateP[3]+10][0]+ball_state1[ir_num][0]);
ryuna 0:fb4c529248d7 830 vx = DEFENSE_POWER*(goal_state2[rateP[2]+5][1]+ball_state1[ir_num][1]);
ryuna 0:fb4c529248d7 831 }*/
ryuna 0:fb4c529248d7 832 /*
ryuna 0:fb4c529248d7 833 dist_fun_pingSTRONG(rateP);
ryuna 0:fb4c529248d7 834 vx = DEFENSE_POWER*(apply[rateDM+7]*ball_state1[ir_num][0]+strongPing1[rateP[1]+10][0]+strongPing3[rateP[3]+10][0]);
ryuna 0:fb4c529248d7 835 vy = DEFENSE_POWER*(apply[rateDM+7]*ball_state1[ir_num][1]+strongPing1[rateP[1]+10][1]+strongPing2[rateP[2]+10][1]+strongPing3[rateP[3]+10][1]);
ryuna 0:fb4c529248d7 836 if(ir_num == 2||ir_num == 3||ir_num == 4){
ryuna 0:fb4c529248d7 837 vk=25;
ryuna 0:fb4c529248d7 838 }
ryuna 0:fb4c529248d7 839 }
ryuna 0:fb4c529248d7 840 }else{//ofense
ryuna 0:fb4c529248d7 841 if((rateDM > 0)&&((ir_num != 2)&&(ir_num !=3)&&(ir_num!=4))){
ryuna 0:fb4c529248d7 842 //アウトオブリーチ時後ろに下がりながらボールの直線上に移動する
ryuna 0:fb4c529248d7 843 dist_fun_ping(rateP);//check ping state.
ryuna 0:fb4c529248d7 844 vx = DEFENSE_POWER*(goal_state1[rateP[1]+10][0]+goal_state3[rateP[3]+10][0]+ball_state0[ir_num][0]);
ryuna 0:fb4c529248d7 845 vy = DEFENSE_POWER*(goal_state1[rateP[1]+10][1]+goal_state2[rateP[2]+5][1]+goal_state3[rateP[3]+10][1]+ball_state0[ir_num][1]);
ryuna 0:fb4c529248d7 846 if(ping[2]<35){
ryuna 0:fb4c529248d7 847
ryuna 0:fb4c529248d7 848 }else if(ping[2]<50){
ryuna 0:fb4c529248d7 849 vy = -30;
ryuna 0:fb4c529248d7 850 }else {
ryuna 0:fb4c529248d7 851 vx = 0;
ryuna 0:fb4c529248d7 852 vy = -35;
ryuna 0:fb4c529248d7 853 }
ryuna 0:fb4c529248d7 854 }else{
ryuna 0:fb4c529248d7 855
ryuna 0:fb4c529248d7 856 dist_fun_D(&rateD);//check ball state.
ryuna 0:fb4c529248d7 857 if(rateD > 0){
ryuna 0:fb4c529248d7 858 dist_fun_pingSTRONG(rateP);
ryuna 0:fb4c529248d7 859 vx = OFFENSE_POWER*(apply[rateDM+7]*near0[ir_num][0]+go[ir_num][0]);
ryuna 0:fb4c529248d7 860 vy = OFFENSE_POWER*(apply[rateDM+7]*near0[ir_num][1]+go[ir_num][1]);
ryuna 0:fb4c529248d7 861 }else{
ryuna 0:fb4c529248d7 862 vx = OFFENSE_POWER*(near1[ir_num][0]+go[ir_num][0]);
ryuna 0:fb4c529248d7 863 vy = OFFENSE_POWER*(near1[ir_num][1]+go[ir_num][1]);
ryuna 0:fb4c529248d7 864 }
ryuna 0:fb4c529248d7 865 (*offense[ir_num])(&vx,&vy,&vk,rateD);
ryuna 0:fb4c529248d7 866 }
ryuna 0:fb4c529248d7 867 }
ryuna 0:fb4c529248d7 868 }
ryuna 0:fb4c529248d7 869 if(ir_num >= 10){
ryuna 0:fb4c529248d7 870 back_home(&vx,&vy);
ryuna 0:fb4c529248d7 871 }
ryuna 0:fb4c529248d7 872 */
ryuna 0:fb4c529248d7 873 /*
ryuna 0:fb4c529248d7 874 if(ir_num<10){
ryuna 0:fb4c529248d7 875 (*offense[ir_num])(&vx,&vy,&vk);
ryuna 0:fb4c529248d7 876 //vx =25*way10[ir_num][0],vy = 25*way10[ir_num][1];
ryuna 0:fb4c529248d7 877 }else{
ryuna 0:fb4c529248d7 878 clockL = 00.0;
ryuna 0:fb4c529248d7 879 back_home(&x,&y);
ryuna 0:fb4c529248d7 880 }
ryuna 0:fb4c529248d7 881
ryuna 0:fb4c529248d7 882 */
ryuna 0:fb4c529248d7 883 /*
ryuna 0:fb4c529248d7 884 line_check(line);
ryuna 0:fb4c529248d7 885 line_state(&vx,&vy,line);
ryuna 0:fb4c529248d7 886 vs = compassPID;
ryuna 0:fb4c529248d7 887 move(vx,vy,vs,vk);
ryuna 0:fb4c529248d7 888 //lcd.printf("%0.2lf clock\n\n",clockL);
ryuna 0:fb4c529248d7 889 //pc.printf("compassPID:%d\t compass:%d\n",s,compass);
ryuna 0:fb4c529248d7 890 //pc.printf("%lf %lf\n",x,y);
ryuna 0:fb4c529248d7 891 //pc.printf("compass: %d\n",compass);
ryuna 0:fb4c529248d7 892 //pc.printf("ping0:%d\tping1:%d\tping2:%d\tping3:%d\n",ping[0],ping[1],ping[2],ping[3]);
ryuna 0:fb4c529248d7 893 //pc.printf("ir_min:%d\tir_num:%d\tir_main:%d\n",ir_min,ir_num,ir_main);
ryuna 0:fb4c529248d7 894 //pc.printf("line0:%d\tline1:%d\tline2:%d\tline3:%d\n",adcline[0].read_u16(),adcline[1].read_u16(),adcline[2].read_u16(),adcline[3].read_u16());
ryuna 0:fb4c529248d7 895
ryuna 0:fb4c529248d7 896
ryuna 0:fb4c529248d7 897
ryuna 0:fb4c529248d7 898
ryuna 0:fb4c529248d7 899
ryuna 0:fb4c529248d7 900
ryuna 0:fb4c529248d7 901
ryuna 0:fb4c529248d7 902
ryuna 0:fb4c529248d7 903
ryuna 0:fb4c529248d7 904
ryuna 0:fb4c529248d7 905
ryuna 0:fb4c529248d7 906
ryuna 0:fb4c529248d7 907
ryuna 0:fb4c529248d7 908
ryuna 0:fb4c529248d7 909
ryuna 0:fb4c529248d7 910
ryuna 0:fb4c529248d7 911 }*/
ryuna 0:fb4c529248d7 912 }