Dependencies:   PID Serialservo TCS3200 XQ_servo encoder encoder2 mbed moter

Fork of nhk_2018_undercarry_test09 by ケンタ ミヤザキ

Committer:
kenken0721
Date:
Sun Apr 15 00:36:15 2018 +0000
Revision:
10:01aa50804d85
Parent:
9:0c1fce6d8094

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenken0721 0:f6828b914b1c 1 #include "mbed.h"
kenken0721 0:f6828b914b1c 2 #include "config.h"
kenken0721 0:f6828b914b1c 3 #include "moter.h"
kenken0721 0:f6828b914b1c 4 #include "PID.h"
kenken0721 1:f4dbd6b9cc27 5 #include "encoder.h"
kenken0721 4:eabb7a738ff8 6 #include "encoder2.h"
kenken0721 4:eabb7a738ff8 7 #include "Serialservo.h"
kenken0721 4:eabb7a738ff8 8 #include "XQ_servo.h"
kenken0721 0:f6828b914b1c 9
kenken0721 0:f6828b914b1c 10 Serial pc(USBTX, USBRX);
kenken0721 0:f6828b914b1c 11 Serial kbtpc(PC_12 ,PD_2);//serial5
kenken0721 0:f6828b914b1c 12 I2C master(sda, scl);
kenken0721 4:eabb7a738ff8 13 DigitalOut led2(LED2);//チェック用
kenken0721 0:f6828b914b1c 14 PID S_pid(SP, SI, SD, 0.0);
kenken0721 2:c5996dd62e9c 15 PID R_pid(RP, RI, RD, 0.0);
kenken0721 2:c5996dd62e9c 16 PID L_pid(LP, LI, LD, 0.0);
kenken0721 4:eabb7a738ff8 17
kenken0721 2:c5996dd62e9c 18 Encoder Enc_Carry_Y(PA_15,PA_14,PC_1);
kenken0721 2:c5996dd62e9c 19 Encoder Enc_Carry_X(PA_4,PB_0,PB_7);
kenken0721 4:eabb7a738ff8 20 Encoder2 Enc_Arm(PF_1,PA_0,PA_1);
kenken0721 4:eabb7a738ff8 21
kenken0721 3:aaa2fde4fafd 22 DigitalOut buzzer(PA_10);
kenken0721 3:aaa2fde4fafd 23 DigitalOut lamp(PC_3);
kenken0721 3:aaa2fde4fafd 24 Timer timer;
kenken0721 4:eabb7a738ff8 25 Serialservo servo1(PC_10, PC_11);//アームの肘
kenken0721 4:eabb7a738ff8 26 Serialservo servo2(PC_10, PC_11);//回転軸
kenken0721 4:eabb7a738ff8 27 XQ_servo servo_hand(PB_5);
kenken0721 6:ff7fd6556a81 28 DigitalOut throwing_relay(PC_9);
kenken0721 4:eabb7a738ff8 29 DigitalIn distance(PC_2);
kenken0721 4:eabb7a738ff8 30 DigitalIn redIn(PC_4);
kenken0721 4:eabb7a738ff8 31 DigitalIn blueIn(PB_2);
kenken0721 4:eabb7a738ff8 32 DigitalIn micro_switch(PC_0);
kenken0721 4:eabb7a738ff8 33 DigitalOut air(PB_4);
kenken0721 4:eabb7a738ff8 34
kenken0721 7:f1a924244b76 35 DigitalOut motor_dir1(PA_8);
kenken0721 4:eabb7a738ff8 36 DigitalOut motor_dir2(PA_9);
kenken0721 4:eabb7a738ff8 37 PwmOut motor_pwm(PB_3);
kenken0721 4:eabb7a738ff8 38
kenken0721 0:f6828b914b1c 39 PwmOut pwm_pins[] = {
kenken0721 0:f6828b914b1c 40 PwmOut( PC_8 ),
kenken0721 0:f6828b914b1c 41 PwmOut( PC_6 ),
kenken0721 0:f6828b914b1c 42 PwmOut( PB_14 ),
kenken0721 0:f6828b914b1c 43 PwmOut( PB_13 )
kenken0721 0:f6828b914b1c 44 };
kenken0721 0:f6828b914b1c 45
kenken0721 0:f6828b914b1c 46 DigitalOut dir_pins_1[] = {
kenken0721 0:f6828b914b1c 47 DigitalOut( PC_5 ),
kenken0721 0:f6828b914b1c 48 DigitalOut( PA_7 ),
kenken0721 2:c5996dd62e9c 49 DigitalOut( PB_6 ),
kenken0721 2:c5996dd62e9c 50 DigitalOut( PB_1)
kenken0721 0:f6828b914b1c 51 };
kenken0721 0:f6828b914b1c 52
kenken0721 0:f6828b914b1c 53 DigitalOut dir_pins_2[] = {
kenken0721 0:f6828b914b1c 54 DigitalOut( PB_12 ),
kenken0721 0:f6828b914b1c 55 DigitalOut( PA_6 ),
kenken0721 2:c5996dd62e9c 56 DigitalOut( PC_7 ),
kenken0721 2:c5996dd62e9c 57 DigitalOut( PB_15)
kenken0721 0:f6828b914b1c 58 };
kenken0721 0:f6828b914b1c 59
kenken0721 6:ff7fd6556a81 60
kenken0721 6:ff7fd6556a81 61 void linecheck(char *buff ,int data[2]);
kenken0721 6:ff7fd6556a81 62 void LineCheck(int dmode);
kenken0721 7:f1a924244b76 63 void Linecount(void);
kenken0721 6:ff7fd6556a81 64 void syokikanomai(void);
kenken0721 6:ff7fd6556a81 65 void syokikanomai2(void);
kenken0721 6:ff7fd6556a81 66 void touteki(float armpower, int pos, bool thro_mode);
kenken0721 9:0c1fce6d8094 67 void yellow_throwing(void);
kenken0721 9:0c1fce6d8094 68 void Linecount2(void);
kenken0721 6:ff7fd6556a81 69
kenken0721 9:0c1fce6d8094 70 bool set_pos_flag_2 = false;
kenken0721 8:91a72648f312 71 bool set_pos_flag = false;
kenken0721 8:91a72648f312 72 bool redthrowing = false;
kenken0721 7:f1a924244b76 73 bool yellow_throw_flag = false;
kenken0721 7:f1a924244b76 74 bool taiki_flag = false;
kenken0721 2:c5996dd62e9c 75 int crosscount = 0;
kenken0721 0:f6828b914b1c 76 bool mode = true;//trueでラジコン、falseでオート
kenken0721 0:f6828b914b1c 77 bool stopflag = true;//trueで機体停止
kenken0721 0:f6828b914b1c 78 double power = POWER;
kenken0721 0:f6828b914b1c 79 int kbtread = 0;
kenken0721 0:f6828b914b1c 80 int count = 0;
kenken0721 0:f6828b914b1c 81 int counter = 0;
kenken0721 2:c5996dd62e9c 82 int linedata_1[2] = {0};
kenken0721 2:c5996dd62e9c 83 int linedata_2[2] = {0};
kenken0721 2:c5996dd62e9c 84 int linedata_3[2] = {0};
kenken0721 0:f6828b914b1c 85 int prelinedata = 0;
kenken0721 0:f6828b914b1c 86 double output = 0.0;
kenken0721 1:f4dbd6b9cc27 87 char buff1[2];
kenken0721 1:f4dbd6b9cc27 88 char buff2[2];
kenken0721 1:f4dbd6b9cc27 89 char buff3[2];
kenken0721 1:f4dbd6b9cc27 90 float x_dist = 0.0;
kenken0721 1:f4dbd6b9cc27 91 float y_dist = 0.0;
kenken0721 2:c5996dd62e9c 92 float tar_x_dist = 0.0;
kenken0721 7:f1a924244b76 93 float tar_x_dist_2 = 0.0;
kenken0721 9:0c1fce6d8094 94 float tar_x_dist_3 = 0.0;
kenken0721 2:c5996dd62e9c 95 float tar_y_dist = 0.0;
kenken0721 2:c5996dd62e9c 96 bool ontheline = false;
kenken0721 2:c5996dd62e9c 97 int directmode = STRAIGHT;
kenken0721 3:aaa2fde4fafd 98 int state = START;
kenken0721 3:aaa2fde4fafd 99 int times = 0;
kenken0721 4:eabb7a738ff8 100 int redcount = 0;
kenken0721 4:eabb7a738ff8 101 int bluecount = 0;
kenken0721 4:eabb7a738ff8 102 int yellowcount = 0;
kenken0721 4:eabb7a738ff8 103 bool syokika_flag=false;
kenken0721 4:eabb7a738ff8 104 bool set_flag = false;
kenken0721 4:eabb7a738ff8 105 int encoder_count = 1000;
kenken0721 7:f1a924244b76 106 int linecountcheck = false;
kenken0721 4:eabb7a738ff8 107
kenken0721 3:aaa2fde4fafd 108 int main() {
kenken0721 3:aaa2fde4fafd 109 timer.reset();
kenken0721 3:aaa2fde4fafd 110 timer.stop();
kenken0721 6:ff7fd6556a81 111 throwing_relay=0;
kenken0721 4:eabb7a738ff8 112 lamp=1;
kenken0721 9:0c1fce6d8094 113 air=0.0;
kenken0721 4:eabb7a738ff8 114 buzzer = 0.0;
kenken0721 4:eabb7a738ff8 115 micro_switch.mode(PullUp);
kenken0721 4:eabb7a738ff8 116 motor_pwm=0;
kenken0721 6:ff7fd6556a81 117 motor_dir1=1;
kenken0721 4:eabb7a738ff8 118 motor_dir2=1;
kenken0721 6:ff7fd6556a81 119 servo1.init(0);//アーム
kenken0721 6:ff7fd6556a81 120 servo2.init(1);//回転軸
kenken0721 1:f4dbd6b9cc27 121 S_pid.init();
kenken0721 3:aaa2fde4fafd 122 R_pid.init();
kenken0721 3:aaa2fde4fafd 123 L_pid.init();
kenken0721 1:f4dbd6b9cc27 124 pwm_pins[0].period(0.00005);
kenken0721 1:f4dbd6b9cc27 125 pwm_pins[1].period(0.00005);
kenken0721 1:f4dbd6b9cc27 126 pwm_pins[2].period(0.00005);
kenken0721 1:f4dbd6b9cc27 127 pwm_pins[3].period(0.00005);
kenken0721 4:eabb7a738ff8 128 motor_pwm.period(0.00005);
kenken0721 6:ff7fd6556a81 129 //------通信スピード----------------------------------------------
kenken0721 3:aaa2fde4fafd 130 pc.baud(115200);
kenken0721 2:c5996dd62e9c 131 kbtpc.baud(9600);
kenken0721 2:c5996dd62e9c 132 master.frequency(100000);
kenken0721 6:ff7fd6556a81 133 lamp = 1.0;
kenken0721 6:ff7fd6556a81 134 //-------初期化-------------------------------------------------
kenken0721 10:01aa50804d85 135 syokikanomai();//初期位置
kenken0721 4:eabb7a738ff8 136 buzzer = 0;
kenken0721 6:ff7fd6556a81 137 //-----------メインループ----------------------------------------
kenken0721 1:f4dbd6b9cc27 138 while (true) {
kenken0721 7:f1a924244b76 139 if(directmode == STRAIGHT){
kenken0721 7:f1a924244b76 140 master.read(addr1,buff1,2);
kenken0721 7:f1a924244b76 141 linecheck(buff1,linedata_1);
kenken0721 7:f1a924244b76 142 }else if(directmode == RIGHT){
kenken0721 7:f1a924244b76 143 master.read(addr2,buff2,2);
kenken0721 7:f1a924244b76 144 linecheck(buff2,linedata_2);
kenken0721 7:f1a924244b76 145 }else if(directmode == LEFT){
kenken0721 7:f1a924244b76 146 master.read(addr3,buff3,2);
kenken0721 7:f1a924244b76 147 linecheck(buff3,linedata_3);
kenken0721 7:f1a924244b76 148 }
kenken0721 7:f1a924244b76 149
kenken0721 2:c5996dd62e9c 150 x_dist = Enc_Carry_X.read_rotate();
kenken0721 2:c5996dd62e9c 151 y_dist = Enc_Carry_Y.read_rotate();
kenken0721 10:01aa50804d85 152
kenken0721 10:01aa50804d85 153 //PCからの命令
kenken0721 3:aaa2fde4fafd 154 kbtpc.putc(state);
kenken0721 1:f4dbd6b9cc27 155 if(kbtpc.readable()){
kenken0721 1:f4dbd6b9cc27 156 kbtread = kbtpc.getc();
kenken0721 1:f4dbd6b9cc27 157 }
kenken0721 1:f4dbd6b9cc27 158 if(kbtread == 255){
kenken0721 10:01aa50804d85 159 mode = true;//
kenken0721 1:f4dbd6b9cc27 160 }else if(kbtread == 150){
kenken0721 1:f4dbd6b9cc27 161 mode = false;
kenken0721 1:f4dbd6b9cc27 162 }else if(kbtread == 100){
kenken0721 1:f4dbd6b9cc27 163 stopflag = true;
kenken0721 1:f4dbd6b9cc27 164 }else if(kbtread == 200){
kenken0721 1:f4dbd6b9cc27 165 stopflag = false;
kenken0721 2:c5996dd62e9c 166 }else if(kbtread == STRAIGHT){
kenken0721 2:c5996dd62e9c 167 directmode = STRAIGHT;
kenken0721 2:c5996dd62e9c 168 }else if(kbtread == RIGHT){
kenken0721 2:c5996dd62e9c 169 directmode = RIGHT;
kenken0721 2:c5996dd62e9c 170 }else if(kbtread == LEFT){
kenken0721 2:c5996dd62e9c 171 directmode = LEFT;
kenken0721 3:aaa2fde4fafd 172 }else if(kbtread == START){
kenken0721 3:aaa2fde4fafd 173 state = START;
kenken0721 8:91a72648f312 174 }else if(kbtread == STAND_BY_1){
kenken0721 8:91a72648f312 175 state = STAND_BY_1;
kenken0721 8:91a72648f312 176 }else if(kbtread == YELLOW_RECEIVE){
kenken0721 8:91a72648f312 177 state = YELLOW_RECEIVE;
kenken0721 8:91a72648f312 178 crosscount = 5;
kenken0721 9:0c1fce6d8094 179 air = 1.0;
kenken0721 9:0c1fce6d8094 180 }else if(kbtread == STAND_BY_2){
kenken0721 9:0c1fce6d8094 181 state = STAND_BY_2;
kenken0721 9:0c1fce6d8094 182 crosscount = 0;;
kenken0721 1:f4dbd6b9cc27 183 }
kenken0721 8:91a72648f312 184
kenken0721 1:f4dbd6b9cc27 185 //--------------手動--------------------------------------
kenken0721 1:f4dbd6b9cc27 186 if(mode == true){
kenken0721 1:f4dbd6b9cc27 187 led2 = 1.0;
kenken0721 2:c5996dd62e9c 188 if(kbtread == STRAIGHT){
kenken0721 1:f4dbd6b9cc27 189 Straight(power, power, pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 2:c5996dd62e9c 190 }else if(kbtread == BACK){
kenken0721 1:f4dbd6b9cc27 191 Back(power, power, pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 2:c5996dd62e9c 192 }else if(kbtread == RIGHT){
kenken0721 1:f4dbd6b9cc27 193 Right(power, power, pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 2:c5996dd62e9c 194 }else if(kbtread == LEFT){
kenken0721 1:f4dbd6b9cc27 195 Left(power, power, pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 1:f4dbd6b9cc27 196 }else{
kenken0721 1:f4dbd6b9cc27 197 Stop(pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 1:f4dbd6b9cc27 198 }
kenken0721 1:f4dbd6b9cc27 199 //--------------自動---------------------------------
kenken0721 1:f4dbd6b9cc27 200 }else if(mode == false){
kenken0721 1:f4dbd6b9cc27 201 led2 = 0.0;
kenken0721 1:f4dbd6b9cc27 202 if(stopflag == true){
kenken0721 1:f4dbd6b9cc27 203 Stop(pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 1:f4dbd6b9cc27 204 }else{
kenken0721 2:c5996dd62e9c 205 LineCheck(directmode);
kenken0721 3:aaa2fde4fafd 206 switch(state){
kenken0721 4:eabb7a738ff8 207 //------------------初期位置から待機位置1------------------------------------------
kenken0721 3:aaa2fde4fafd 208 case START:
kenken0721 3:aaa2fde4fafd 209 if(crosscount == 0){
kenken0721 9:0c1fce6d8094 210 directmode = LEFT;
kenken0721 9:0c1fce6d8094 211 Linecount2();
kenken0721 9:0c1fce6d8094 212 }else if(crosscount == 1){
kenken0721 3:aaa2fde4fafd 213 directmode = STRAIGHT;
kenken0721 9:0c1fce6d8094 214 }else if(crosscount == 2){
kenken0721 6:ff7fd6556a81 215 if(directmode == STRAIGHT){
kenken0721 6:ff7fd6556a81 216 directmode = LEFT;
kenken0721 6:ff7fd6556a81 217 prelinedata = 0;
kenken0721 6:ff7fd6556a81 218 }else if(directmode == LEFT){
kenken0721 6:ff7fd6556a81 219 directmode = LEFT;
kenken0721 7:f1a924244b76 220 Linecount();
kenken0721 6:ff7fd6556a81 221 }
kenken0721 9:0c1fce6d8094 222 }else if(crosscount == 3){
kenken0721 3:aaa2fde4fafd 223 directmode = STOP;
kenken0721 3:aaa2fde4fafd 224 state = STAND_BY_1;
kenken0721 3:aaa2fde4fafd 225 crosscount = 0;
kenken0721 3:aaa2fde4fafd 226 prelinedata = 0;
kenken0721 3:aaa2fde4fafd 227 }
kenken0721 3:aaa2fde4fafd 228 break;
kenken0721 4:eabb7a738ff8 229 //------------------待機位置1----------------------------------------------------
kenken0721 3:aaa2fde4fafd 230 case STAND_BY_1:
kenken0721 3:aaa2fde4fafd 231 crosscount = 0;
kenken0721 3:aaa2fde4fafd 232 directmode = STOP;
kenken0721 9:0c1fce6d8094 233
kenken0721 4:eabb7a738ff8 234 if(distance == 1.0){
kenken0721 8:91a72648f312 235 if(redthrowing == false){
kenken0721 8:91a72648f312 236 if(redIn == 1.0){
kenken0721 8:91a72648f312 237 buzzer = 1.0;
kenken0721 8:91a72648f312 238 redcount++;
kenken0721 8:91a72648f312 239 }else {
kenken0721 8:91a72648f312 240 buzzer = 0.0;
kenken0721 8:91a72648f312 241 }
kenken0721 8:91a72648f312 242 }else if(redthrowing == true){
kenken0721 8:91a72648f312 243 if(redIn == 1.0){
kenken0721 8:91a72648f312 244 buzzer = 1.0;
kenken0721 8:91a72648f312 245 bluecount++;
kenken0721 8:91a72648f312 246 }else {
kenken0721 8:91a72648f312 247 buzzer = 0.0;
kenken0721 8:91a72648f312 248 }
kenken0721 4:eabb7a738ff8 249 }
kenken0721 9:0c1fce6d8094 250 if(redcount >= 200 ){
kenken0721 8:91a72648f312 251 buzzer = 0;
kenken0721 4:eabb7a738ff8 252 servo_hand.move(hand_tsukami_degree);
kenken0721 4:eabb7a738ff8 253 servo1.move(hiji_tsukami_degree);
kenken0721 6:ff7fd6556a81 254 servo1.move(hiji_tsukami_degree);
kenken0721 9:0c1fce6d8094 255 }else if(bluecount >= 200){
kenken0721 4:eabb7a738ff8 256 servo_hand.move(hand_tsukami_degree);
kenken0721 4:eabb7a738ff8 257 servo1.move(hiji_tsukami_degree);
kenken0721 6:ff7fd6556a81 258 servo1.move(hiji_tsukami_degree);
kenken0721 9:0c1fce6d8094 259 }
kenken0721 9:0c1fce6d8094 260 }
kenken0721 9:0c1fce6d8094 261 if(distance == 0.0 && redcount >= 200){
kenken0721 9:0c1fce6d8094 262 led2 = 1.0;
kenken0721 8:91a72648f312 263 servo2.move(koshi_red_nage_degree);
kenken0721 8:91a72648f312 264 servo2.move(koshi_red_nage_degree);
kenken0721 3:aaa2fde4fafd 265 state = RED_RECEIVE;
kenken0721 4:eabb7a738ff8 266 directmode = STOP;
kenken0721 4:eabb7a738ff8 267 redcount = 0;
kenken0721 4:eabb7a738ff8 268 crosscount = 0;
kenken0721 9:0c1fce6d8094 269 }else if(distance == 0.0 && bluecount >= 200){
kenken0721 8:91a72648f312 270 servo2.move(koshi_blue_nage_degree);
kenken0721 8:91a72648f312 271 servo2.move(koshi_blue_nage_degree);
kenken0721 4:eabb7a738ff8 272 state = BLUE_RECEIVE_1;
kenken0721 4:eabb7a738ff8 273 directmode = STOP;
kenken0721 4:eabb7a738ff8 274 bluecount = 0;
kenken0721 4:eabb7a738ff8 275 crosscount = 0;
kenken0721 4:eabb7a738ff8 276 }
kenken0721 3:aaa2fde4fafd 277 break;
kenken0721 4:eabb7a738ff8 278 //------------------待機位置1から投てき位置1----------------------------------------
kenken0721 3:aaa2fde4fafd 279 case RED_RECEIVE:
kenken0721 9:0c1fce6d8094 280 led2 = 1.0;
kenken0721 3:aaa2fde4fafd 281 if(crosscount == 0){
kenken0721 3:aaa2fde4fafd 282 directmode = LEFT;
kenken0721 4:eabb7a738ff8 283 }else if(crosscount == 1){
kenken0721 3:aaa2fde4fafd 284 directmode = STOP;
kenken0721 3:aaa2fde4fafd 285 prelinedata = 0;
kenken0721 10:01aa50804d85 286 touteki(1.0,RED_TOUTEKI,0);
kenken0721 7:f1a924244b76 287 //syokikanomai2();
kenken0721 4:eabb7a738ff8 288 if(set_flag == false){
kenken0721 3:aaa2fde4fafd 289 directmode = RIGHT;
kenken0721 8:91a72648f312 290 Linecount();
kenken0721 3:aaa2fde4fafd 291 }
kenken0721 3:aaa2fde4fafd 292 }else if(crosscount == 2){
kenken0721 3:aaa2fde4fafd 293 directmode = STOP;
kenken0721 4:eabb7a738ff8 294 syokikanomai2();
kenken0721 4:eabb7a738ff8 295 if(set_flag == true){
kenken0721 4:eabb7a738ff8 296 state = STAND_BY_1;
kenken0721 7:f1a924244b76 297 //taiki_flag = false;
kenken0721 4:eabb7a738ff8 298 crosscount = 0;
kenken0721 8:91a72648f312 299 redthrowing = true;
kenken0721 4:eabb7a738ff8 300 }
kenken0721 3:aaa2fde4fafd 301 }
kenken0721 3:aaa2fde4fafd 302 break;
kenken0721 4:eabb7a738ff8 303 //------------------待機位置1から投てき位置2----------------------------------------
kenken0721 3:aaa2fde4fafd 304 case BLUE_RECEIVE_1:
kenken0721 3:aaa2fde4fafd 305 if(crosscount == 0){
kenken0721 3:aaa2fde4fafd 306 directmode = RIGHT;
kenken0721 3:aaa2fde4fafd 307 }else if(crosscount == 1){
kenken0721 3:aaa2fde4fafd 308 directmode = STRAIGHT;
kenken0721 3:aaa2fde4fafd 309 }else if(crosscount == 2){
kenken0721 3:aaa2fde4fafd 310 directmode = LEFT;
kenken0721 7:f1a924244b76 311 Linecount();
kenken0721 3:aaa2fde4fafd 312 }else if(crosscount == 3){
kenken0721 3:aaa2fde4fafd 313 directmode = STOP;
kenken0721 3:aaa2fde4fafd 314 prelinedata = 0;
kenken0721 4:eabb7a738ff8 315 state = BLUE_RECEIVE_2;
kenken0721 3:aaa2fde4fafd 316 crosscount = 0;
kenken0721 3:aaa2fde4fafd 317 }
kenken0721 3:aaa2fde4fafd 318 break;
kenken0721 4:eabb7a738ff8 319 //------------------待機位置2----------------------------------------------------
kenken0721 3:aaa2fde4fafd 320 case STAND_BY_2:
kenken0721 3:aaa2fde4fafd 321 crosscount = 0;
kenken0721 4:eabb7a738ff8 322 directmode = STOP;
kenken0721 4:eabb7a738ff8 323 if(distance == 1.0){
kenken0721 9:0c1fce6d8094 324 if(redIn == 1.0 && micro_switch == 1){
kenken0721 4:eabb7a738ff8 325 buzzer = 1.0;
kenken0721 4:eabb7a738ff8 326 bluecount++;
kenken0721 7:f1a924244b76 327 }else if(micro_switch == 0.0){
kenken0721 4:eabb7a738ff8 328 buzzer = 1.0;
kenken0721 4:eabb7a738ff8 329 yellowcount++;
kenken0721 4:eabb7a738ff8 330 }else{
kenken0721 4:eabb7a738ff8 331 buzzer = 0.0;
kenken0721 4:eabb7a738ff8 332 }
kenken0721 9:0c1fce6d8094 333 if(bluecount >= 200){
kenken0721 5:c5a2a5cf600d 334 servo_hand.move(hand_tsukami_degree);
kenken0721 5:c5a2a5cf600d 335 servo1.move(hiji_tsukami_degree);
kenken0721 6:ff7fd6556a81 336 servo1.move(hiji_tsukami_degree);
kenken0721 4:eabb7a738ff8 337 }else if(yellowcount >= 500){
kenken0721 9:0c1fce6d8094 338 air = 1.0;
kenken0721 4:eabb7a738ff8 339 }
kenken0721 9:0c1fce6d8094 340 }else if(distance == 0.0 && bluecount >= 200){
kenken0721 8:91a72648f312 341 servo2.move(koshi_blue_nage_degree);
kenken0721 8:91a72648f312 342 servo2.move(koshi_blue_nage_degree);
kenken0721 4:eabb7a738ff8 343 state = BLUE_RECEIVE_2;
kenken0721 4:eabb7a738ff8 344 directmode = STOP;
kenken0721 4:eabb7a738ff8 345 bluecount = 0;
kenken0721 4:eabb7a738ff8 346 crosscount = 0;
kenken0721 9:0c1fce6d8094 347 buzzer = 0.0;
kenken0721 9:0c1fce6d8094 348 }
kenken0721 9:0c1fce6d8094 349 if(yellowcount >= 1000){
kenken0721 7:f1a924244b76 350 state = YELLOW_RECEIVE;
kenken0721 8:91a72648f312 351 buzzer = 0.0;
kenken0721 7:f1a924244b76 352 directmode = STOP;
kenken0721 7:f1a924244b76 353 yellowcount = 0;
kenken0721 7:f1a924244b76 354 crosscount = 0;
kenken0721 4:eabb7a738ff8 355 }
kenken0721 3:aaa2fde4fafd 356 break;
kenken0721 4:eabb7a738ff8 357 //------------------投てき位置2---------------------------------------------------
kenken0721 3:aaa2fde4fafd 358 case BLUE_RECEIVE_2:
kenken0721 3:aaa2fde4fafd 359 if(crosscount == 0){
kenken0721 3:aaa2fde4fafd 360 directmode = LEFT;
kenken0721 3:aaa2fde4fafd 361 }else if(crosscount == 1){
kenken0721 5:c5a2a5cf600d 362 directmode = STOP;
kenken0721 5:c5a2a5cf600d 363 prelinedata = 0;
kenken0721 10:01aa50804d85 364 touteki(1.0,BLUE_TOUTEKI,1);
kenken0721 7:f1a924244b76 365 //syokikanomai2();
kenken0721 5:c5a2a5cf600d 366 if(set_flag == false){
kenken0721 5:c5a2a5cf600d 367 directmode = RIGHT;
kenken0721 7:f1a924244b76 368 Linecount();
kenken0721 3:aaa2fde4fafd 369 }
kenken0721 3:aaa2fde4fafd 370 }else if(crosscount == 2){
kenken0721 3:aaa2fde4fafd 371 directmode = STOP;
kenken0721 5:c5a2a5cf600d 372 syokikanomai2();
kenken0721 5:c5a2a5cf600d 373 if(set_flag == true){
kenken0721 5:c5a2a5cf600d 374 state = STAND_BY_2;
kenken0721 7:f1a924244b76 375 //taiki_flag = false;
kenken0721 5:c5a2a5cf600d 376 crosscount = 0;
kenken0721 5:c5a2a5cf600d 377 }
kenken0721 7:f1a924244b76 378 }
kenken0721 3:aaa2fde4fafd 379 break;
kenken0721 4:eabb7a738ff8 380 //------------------投てき位置3---------------------------------------------------
kenken0721 3:aaa2fde4fafd 381 case YELLOW_RECEIVE:
kenken0721 7:f1a924244b76 382 if(crosscount != 5){
kenken0721 3:aaa2fde4fafd 383 directmode = LEFT;
kenken0721 9:0c1fce6d8094 384 servo2.move(koshi_uke_degree);
kenken0721 9:0c1fce6d8094 385 power = POWER + 0.1;
kenken0721 3:aaa2fde4fafd 386 }else{
kenken0721 3:aaa2fde4fafd 387 directmode = STOP;
kenken0721 7:f1a924244b76 388 if(yellow_throw_flag == false){
kenken0721 7:f1a924244b76 389 yellow_throwing();
kenken0721 7:f1a924244b76 390 }else{
kenken0721 10:01aa50804d85 391 touteki(1.0,YELLOW_TOUTEKI,1.0);
kenken0721 7:f1a924244b76 392 syokikanomai2();
kenken0721 7:f1a924244b76 393 }
kenken0721 3:aaa2fde4fafd 394 }
kenken0721 3:aaa2fde4fafd 395 break;
kenken0721 3:aaa2fde4fafd 396 default:
kenken0721 3:aaa2fde4fafd 397 break;
kenken0721 3:aaa2fde4fafd 398 }
kenken0721 4:eabb7a738ff8 399 //--------------進行方向---------------------------------------------------------
kenken0721 3:aaa2fde4fafd 400 switch(directmode){
kenken0721 2:c5996dd62e9c 401 case STOP:
kenken0721 2:c5996dd62e9c 402 Stop(pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 2:c5996dd62e9c 403 break;
kenken0721 2:c5996dd62e9c 404 case STRAIGHT:
kenken0721 2:c5996dd62e9c 405 output = S_pid.compute((double)linedata_1[0]);
kenken0721 2:c5996dd62e9c 406 if(output >= 0){
kenken0721 7:f1a924244b76 407 Straight(power, power + output, pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 2:c5996dd62e9c 408 }else {
kenken0721 7:f1a924244b76 409 Straight(power + (-1 * output), power, pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 2:c5996dd62e9c 410 }
kenken0721 2:c5996dd62e9c 411 break;
kenken0721 2:c5996dd62e9c 412 case RIGHT:
kenken0721 2:c5996dd62e9c 413 output = R_pid.compute((double)linedata_2[0]);
kenken0721 1:f4dbd6b9cc27 414 if(output >= 0){
kenken0721 7:f1a924244b76 415 Right(power, power + output, pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 1:f4dbd6b9cc27 416 }else {
kenken0721 7:f1a924244b76 417 Right(power + (-1 * output), power, pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 2:c5996dd62e9c 418 }
kenken0721 2:c5996dd62e9c 419 break;
kenken0721 2:c5996dd62e9c 420 case LEFT:
kenken0721 2:c5996dd62e9c 421 output = L_pid.compute((double)linedata_3[0]);
kenken0721 2:c5996dd62e9c 422 if(output >= 0){
kenken0721 7:f1a924244b76 423 Left(power, power + output, pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 2:c5996dd62e9c 424 }else {
kenken0721 7:f1a924244b76 425 Left(power + (-1 * output), power, pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 2:c5996dd62e9c 426 }
kenken0721 2:c5996dd62e9c 427 break;
kenken0721 2:c5996dd62e9c 428 default:
kenken0721 2:c5996dd62e9c 429 break;
kenken0721 1:f4dbd6b9cc27 430 }
kenken0721 1:f4dbd6b9cc27 431 }
kenken0721 1:f4dbd6b9cc27 432 }
kenken0721 4:eabb7a738ff8 433 pc.printf("xdist = %f \r",x_dist);
kenken0721 4:eabb7a738ff8 434 pc.printf("ydist = %f \r",y_dist);
kenken0721 1:f4dbd6b9cc27 435 pc.printf("output = %lf \n" ,output);
kenken0721 1:f4dbd6b9cc27 436 }
kenken0721 1:f4dbd6b9cc27 437 }
kenken0721 1:f4dbd6b9cc27 438
kenken0721 7:f1a924244b76 439 //---------------初期化----------------------------------------------------------
kenken0721 7:f1a924244b76 440
kenken0721 7:f1a924244b76 441 void yellow_throwing(){
kenken0721 7:f1a924244b76 442 if(yellow_throw_flag == false){
kenken0721 7:f1a924244b76 443 timer.start();
kenken0721 7:f1a924244b76 444 }
kenken0721 7:f1a924244b76 445 int times = timer.read();
kenken0721 8:91a72648f312 446 if(times >= 2.0 && times < 3.0){
kenken0721 8:91a72648f312 447 servo_hand.move(hand_uke_degree);
kenken0721 8:91a72648f312 448 }else if(times >= 3.0 && times < 4.0){
kenken0721 9:0c1fce6d8094 449 servo1.move(hiji_yellow_uke_degree);
kenken0721 8:91a72648f312 450 }else if(times >= 4.0 && times < 5.0){
kenken0721 7:f1a924244b76 451 servo_hand.move(hand_tsukami_degree);
kenken0721 8:91a72648f312 452 }else if(times >=5.0 && times <5.5){
kenken0721 7:f1a924244b76 453 servo2.move(koshi_nage_degree);
kenken0721 8:91a72648f312 454 }else if(times >= 5.5){
kenken0721 7:f1a924244b76 455 yellow_throw_flag = true;
kenken0721 7:f1a924244b76 456 timer.stop();
kenken0721 7:f1a924244b76 457 timer.reset();
kenken0721 7:f1a924244b76 458 }
kenken0721 7:f1a924244b76 459 }
kenken0721 7:f1a924244b76 460
kenken0721 4:eabb7a738ff8 461 void syokikanomai(void){
kenken0721 4:eabb7a738ff8 462 syokika_flag = false;
kenken0721 4:eabb7a738ff8 463 while (set_flag==false) {
kenken0721 4:eabb7a738ff8 464 encoder_count= Enc_Arm.read_rotate();
kenken0721 4:eabb7a738ff8 465 servo_hand.move(hand_uke_degree);
kenken0721 4:eabb7a738ff8 466 servo1.move(hiji_nage_degree);//退避
kenken0721 4:eabb7a738ff8 467 servo2.move(koshi_uke_degree);
kenken0721 6:ff7fd6556a81 468 servo1.move(hiji_nage_degree);//退避
kenken0721 6:ff7fd6556a81 469 servo2.move(koshi_uke_degree);
kenken0721 4:eabb7a738ff8 470 motor_dir1=0;
kenken0721 4:eabb7a738ff8 471 motor_dir2=1;
kenken0721 8:91a72648f312 472 motor_pwm=0.12;
kenken0721 7:f1a924244b76 473 if(Enc_Arm.read_z() == 1){
kenken0721 4:eabb7a738ff8 474 syokika_flag=true;
kenken0721 4:eabb7a738ff8 475 buzzer = 1.0;
kenken0721 4:eabb7a738ff8 476 }
kenken0721 4:eabb7a738ff8 477
kenken0721 4:eabb7a738ff8 478 if (syokika_flag==true) {
kenken0721 10:01aa50804d85 479 if(encoder_count == SYOKIITI){
kenken0721 4:eabb7a738ff8 480 motor_pwm=0;
kenken0721 4:eabb7a738ff8 481 motor_dir1=1;
kenken0721 4:eabb7a738ff8 482 motor_dir2=1;
kenken0721 4:eabb7a738ff8 483 set_flag=true; //投てき後,falseにする.
kenken0721 4:eabb7a738ff8 484 }
kenken0721 4:eabb7a738ff8 485 }
kenken0721 4:eabb7a738ff8 486 }
kenken0721 4:eabb7a738ff8 487 servo1.move(hiji_uke_degree);
kenken0721 4:eabb7a738ff8 488 servo1.move(hiji_uke_degree);
kenken0721 4:eabb7a738ff8 489 }
kenken0721 4:eabb7a738ff8 490
kenken0721 4:eabb7a738ff8 491 void syokikanomai2(void){
kenken0721 4:eabb7a738ff8 492 if(set_flag==false) {
kenken0721 7:f1a924244b76 493 encoder_count= Enc_Arm.read_rotate();
kenken0721 8:91a72648f312 494 servo_hand.move(hand_uke_degree);
kenken0721 8:91a72648f312 495 servo1.move(hiji_nage_degree);//退避
kenken0721 8:91a72648f312 496 servo1.move(hiji_nage_degree);//退避
kenken0721 8:91a72648f312 497 if(yellow_throw_flag == false){
kenken0721 8:91a72648f312 498 servo2.move(koshi_uke_degree);
kenken0721 8:91a72648f312 499 servo2.move(koshi_uke_degree);
kenken0721 7:f1a924244b76 500 }
kenken0721 4:eabb7a738ff8 501 motor_dir1=0;
kenken0721 4:eabb7a738ff8 502 motor_dir2=1;
kenken0721 8:91a72648f312 503 motor_pwm=0.12;
kenken0721 4:eabb7a738ff8 504 if(Enc_Arm.read_z() == 1) {
kenken0721 4:eabb7a738ff8 505 syokika_flag = true;
kenken0721 4:eabb7a738ff8 506 buzzer = 1.0;
kenken0721 4:eabb7a738ff8 507 }
kenken0721 9:0c1fce6d8094 508 if(syokika_flag==true) {
kenken0721 8:91a72648f312 509 int set_pos;
kenken0721 10:01aa50804d85 510 if(yellow_throw_flag == true) set_pos = YELLOW_SYOKIITI;
kenken0721 10:01aa50804d85 511 else set_pos = SYOKIITI;
kenken0721 8:91a72648f312 512 if(encoder_count == set_pos){
kenken0721 9:0c1fce6d8094 513 buzzer = 0.0;
kenken0721 4:eabb7a738ff8 514 motor_pwm=0;
kenken0721 4:eabb7a738ff8 515 motor_dir1=1;
kenken0721 4:eabb7a738ff8 516 motor_dir2=1;
kenken0721 8:91a72648f312 517 if(yellow_throw_flag == false){
kenken0721 8:91a72648f312 518 servo_hand.move(hand_uke_degree);
kenken0721 8:91a72648f312 519 servo1.move(hiji_uke_degree);
kenken0721 8:91a72648f312 520 servo1.move(hiji_uke_degree);
kenken0721 9:0c1fce6d8094 521 servo1.move(hiji_uke_degree);
kenken0721 9:0c1fce6d8094 522 servo1.move(hiji_uke_degree);
kenken0721 8:91a72648f312 523 }else{
kenken0721 8:91a72648f312 524 servo_hand.move(hand_tsukami_degree);
kenken0721 8:91a72648f312 525 servo2.move(koshi_uke_degree);
kenken0721 8:91a72648f312 526 servo2.move(koshi_uke_degree);
kenken0721 8:91a72648f312 527 }
kenken0721 4:eabb7a738ff8 528 set_flag = true; //投てき後,falseにする.
kenken0721 7:f1a924244b76 529 taiki_flag = true;
kenken0721 7:f1a924244b76 530 yellow_throw_flag = false;
kenken0721 4:eabb7a738ff8 531 }
kenken0721 4:eabb7a738ff8 532 }
kenken0721 4:eabb7a738ff8 533 }
kenken0721 4:eabb7a738ff8 534 }
kenken0721 4:eabb7a738ff8 535
kenken0721 6:ff7fd6556a81 536 void touteki(float armpower ,int pos, bool throwing_mode){
kenken0721 4:eabb7a738ff8 537 if(set_flag == true){
kenken0721 4:eabb7a738ff8 538 timer.start();
kenken0721 4:eabb7a738ff8 539 }
kenken0721 9:0c1fce6d8094 540 int times = timer.read();
kenken0721 9:0c1fce6d8094 541 if(times >= 1.0 && times < 4.0){
kenken0721 9:0c1fce6d8094 542 if(yellow_throw_flag == true){
kenken0721 9:0c1fce6d8094 543 if(set_pos_flag_2 == false){
kenken0721 9:0c1fce6d8094 544 if(Enc_Arm.read_rotate() < 180) {
kenken0721 9:0c1fce6d8094 545 motor_dir1 = 0;
kenken0721 9:0c1fce6d8094 546 motor_dir2 = 1;
kenken0721 9:0c1fce6d8094 547 motor_pwm = 0.15;
kenken0721 9:0c1fce6d8094 548 }else{
kenken0721 9:0c1fce6d8094 549 motor_dir1=1;
kenken0721 9:0c1fce6d8094 550 motor_dir2=1;
kenken0721 9:0c1fce6d8094 551 motor_pwm=0;
kenken0721 9:0c1fce6d8094 552 set_pos_flag_2 = true;
kenken0721 9:0c1fce6d8094 553 }
kenken0721 9:0c1fce6d8094 554 }
kenken0721 9:0c1fce6d8094 555 }
kenken0721 9:0c1fce6d8094 556 }
kenken0721 9:0c1fce6d8094 557 if(times >= 4.0 && times < 5.0){
kenken0721 4:eabb7a738ff8 558 servo_hand.move(hand_uke_degree);
kenken0721 6:ff7fd6556a81 559 }
kenken0721 9:0c1fce6d8094 560 if(times >= 5.0 && times < 6.0){
kenken0721 7:f1a924244b76 561 servo1.move(hiji_nage_degree);
kenken0721 4:eabb7a738ff8 562 servo1.move(hiji_nage_degree);
kenken0721 4:eabb7a738ff8 563 }
kenken0721 9:0c1fce6d8094 564 if(times >= 6.0 && times < 9.0){
kenken0721 4:eabb7a738ff8 565 lamp = 0.0;
kenken0721 8:91a72648f312 566 if(set_pos_flag == false){
kenken0721 8:91a72648f312 567 if(Enc_Arm.read_rotate() < pos) {
kenken0721 8:91a72648f312 568 motor_dir1 = 0;
kenken0721 8:91a72648f312 569 motor_dir2 = 1;
kenken0721 8:91a72648f312 570 motor_pwm = 0.15;
kenken0721 8:91a72648f312 571 }else{
kenken0721 8:91a72648f312 572 motor_dir1=1;
kenken0721 8:91a72648f312 573 motor_dir2=1;
kenken0721 8:91a72648f312 574 motor_pwm=0;
kenken0721 8:91a72648f312 575 set_pos_flag = true;
kenken0721 8:91a72648f312 576 }
kenken0721 4:eabb7a738ff8 577 }
kenken0721 4:eabb7a738ff8 578 }
kenken0721 7:f1a924244b76 579
kenken0721 4:eabb7a738ff8 580 //----投てき-------------------------
kenken0721 6:ff7fd6556a81 581 if(throwing_mode == 0.0){
kenken0721 9:0c1fce6d8094 582 if(times >= 9.0 && times < 10.0){
kenken0721 5:c5a2a5cf600d 583 motor_dir1 = 0;
kenken0721 5:c5a2a5cf600d 584 motor_dir2 = 1;
kenken0721 5:c5a2a5cf600d 585 motor_pwm = armpower;
kenken0721 5:c5a2a5cf600d 586 }
kenken0721 6:ff7fd6556a81 587 }else if(throwing_mode == 1.0){
kenken0721 9:0c1fce6d8094 588 if(times >= 9.0 && times < 9.1){
kenken0721 6:ff7fd6556a81 589 throwing_relay = 1.0;
kenken0721 5:c5a2a5cf600d 590 }else{
kenken0721 8:91a72648f312 591 throwing_relay = 0.0;
kenken0721 5:c5a2a5cf600d 592 }
kenken0721 4:eabb7a738ff8 593 }
kenken0721 9:0c1fce6d8094 594 if(times >= 10.0 && times <11.0){
kenken0721 4:eabb7a738ff8 595 motor_pwm = 0.0;
kenken0721 8:91a72648f312 596 motor_dir1 = 1;
kenken0721 8:91a72648f312 597 motor_dir2 = 1;
kenken0721 4:eabb7a738ff8 598 buzzer = 0;
kenken0721 4:eabb7a738ff8 599 lamp = 1.0;
kenken0721 9:0c1fce6d8094 600 syokika_flag = false;
kenken0721 9:0c1fce6d8094 601 }else if(times >= 11.0){
kenken0721 4:eabb7a738ff8 602 set_flag = false;
kenken0721 8:91a72648f312 603 set_pos_flag = false;
kenken0721 9:0c1fce6d8094 604 set_pos_flag_2 = false;
kenken0721 4:eabb7a738ff8 605 timer.reset();
kenken0721 4:eabb7a738ff8 606 timer.stop();
kenken0721 4:eabb7a738ff8 607 }
kenken0721 4:eabb7a738ff8 608 }
kenken0721 4:eabb7a738ff8 609
kenken0721 7:f1a924244b76 610 void Linecount(void){
kenken0721 7:f1a924244b76 611 if(directmode == RIGHT){
kenken0721 7:f1a924244b76 612 if(linecountcheck == false){
kenken0721 7:f1a924244b76 613 tar_x_dist_2 = x_dist;
kenken0721 7:f1a924244b76 614 linecountcheck = true;
kenken0721 7:f1a924244b76 615 }else{
kenken0721 7:f1a924244b76 616 if((x_dist - tar_x_dist_2) > X_STOP_DIST_3){
kenken0721 7:f1a924244b76 617 crosscount++;
kenken0721 7:f1a924244b76 618 linecountcheck = false;
kenken0721 7:f1a924244b76 619 }
kenken0721 7:f1a924244b76 620 }
kenken0721 7:f1a924244b76 621 }else if(directmode == LEFT){
kenken0721 7:f1a924244b76 622 if(linecountcheck == false){
kenken0721 7:f1a924244b76 623 tar_x_dist_2 = x_dist;
kenken0721 7:f1a924244b76 624 linecountcheck = true;
kenken0721 7:f1a924244b76 625 }else{
kenken0721 7:f1a924244b76 626 if((tar_x_dist_2 - x_dist) >= X_STOP_DIST_2){
kenken0721 7:f1a924244b76 627 crosscount++;
kenken0721 7:f1a924244b76 628 linecountcheck = false;
kenken0721 7:f1a924244b76 629 }
kenken0721 7:f1a924244b76 630 }
kenken0721 7:f1a924244b76 631 }
kenken0721 7:f1a924244b76 632 }
kenken0721 7:f1a924244b76 633
kenken0721 9:0c1fce6d8094 634 void Linecount2(void){
kenken0721 9:0c1fce6d8094 635 if(directmode == LEFT){
kenken0721 9:0c1fce6d8094 636 if(linecountcheck == false){
kenken0721 9:0c1fce6d8094 637 tar_x_dist_3 = x_dist;
kenken0721 9:0c1fce6d8094 638 linecountcheck = true;
kenken0721 9:0c1fce6d8094 639 }else{
kenken0721 9:0c1fce6d8094 640 if((tar_x_dist_3 - x_dist) >= X_STOP_DIST_4){
kenken0721 9:0c1fce6d8094 641 crosscount++;
kenken0721 9:0c1fce6d8094 642 linecountcheck = false;
kenken0721 9:0c1fce6d8094 643 }
kenken0721 9:0c1fce6d8094 644 }
kenken0721 9:0c1fce6d8094 645 }
kenken0721 9:0c1fce6d8094 646 }
kenken0721 2:c5996dd62e9c 647 void LineCheck(int dmode){
kenken0721 2:c5996dd62e9c 648 if(dmode == STRAIGHT){
kenken0721 2:c5996dd62e9c 649 if(linedata_1[1] == 1){
kenken0721 2:c5996dd62e9c 650 ontheline = true;
kenken0721 2:c5996dd62e9c 651 tar_y_dist = y_dist;
kenken0721 2:c5996dd62e9c 652 }
kenken0721 2:c5996dd62e9c 653 if(ontheline == true){
kenken0721 3:aaa2fde4fafd 654 if((y_dist - tar_y_dist) >= Y_STOP_DIST){
kenken0721 2:c5996dd62e9c 655 ontheline = false;
kenken0721 2:c5996dd62e9c 656 crosscount++;
kenken0721 2:c5996dd62e9c 657 }
kenken0721 2:c5996dd62e9c 658 }
kenken0721 2:c5996dd62e9c 659 }else if(dmode == RIGHT){
kenken0721 3:aaa2fde4fafd 660 if(linedata_2[1] == 1){
kenken0721 3:aaa2fde4fafd 661 ontheline = true;
kenken0721 3:aaa2fde4fafd 662 tar_x_dist = x_dist;
kenken0721 3:aaa2fde4fafd 663 }
kenken0721 2:c5996dd62e9c 664 if(ontheline == true){
kenken0721 3:aaa2fde4fafd 665 if((x_dist - tar_x_dist) >= X_STOP_DIST){
kenken0721 2:c5996dd62e9c 666 ontheline = false;
kenken0721 2:c5996dd62e9c 667 crosscount++;
kenken0721 2:c5996dd62e9c 668 }
kenken0721 2:c5996dd62e9c 669 }
kenken0721 2:c5996dd62e9c 670 }else if(dmode == LEFT){
kenken0721 3:aaa2fde4fafd 671 if(linedata_3[1] == 1){
kenken0721 3:aaa2fde4fafd 672 ontheline = true;
kenken0721 3:aaa2fde4fafd 673 tar_x_dist = x_dist;
kenken0721 3:aaa2fde4fafd 674 }
kenken0721 2:c5996dd62e9c 675 if(ontheline == true){
kenken0721 3:aaa2fde4fafd 676 if((tar_x_dist - x_dist) >= X_STOP_DIST){
kenken0721 2:c5996dd62e9c 677 ontheline = false;
kenken0721 2:c5996dd62e9c 678 crosscount++;
kenken0721 2:c5996dd62e9c 679 }
kenken0721 2:c5996dd62e9c 680 }
kenken0721 2:c5996dd62e9c 681 }
kenken0721 2:c5996dd62e9c 682 }
kenken0721 0:f6828b914b1c 683
kenken0721 2:c5996dd62e9c 684 void linecheck(char *buff, int data[2]){
kenken0721 0:f6828b914b1c 685 if(buff[0] == 24){
kenken0721 2:c5996dd62e9c 686 data[0] = 0;
kenken0721 2:c5996dd62e9c 687 data[1] = 0;
kenken0721 0:f6828b914b1c 688 }else if(buff[0] == 56){
kenken0721 2:c5996dd62e9c 689 data[0] = 1;
kenken0721 2:c5996dd62e9c 690 data[1] = 0;
kenken0721 0:f6828b914b1c 691 }else if(buff[0] == 48){
kenken0721 2:c5996dd62e9c 692 data[0] = 2;
kenken0721 2:c5996dd62e9c 693 data[1] = 0;
kenken0721 0:f6828b914b1c 694 }else if(buff[0] == 112){
kenken0721 2:c5996dd62e9c 695 data[0] = 3;
kenken0721 2:c5996dd62e9c 696 data[1] = 0;
kenken0721 0:f6828b914b1c 697 }else if(buff[0] == 96){
kenken0721 2:c5996dd62e9c 698 data[0] = 4;
kenken0721 2:c5996dd62e9c 699 data[1] = 0;
kenken0721 0:f6828b914b1c 700 }else if(buff[0] == 224){
kenken0721 2:c5996dd62e9c 701 data[0] = 5;
kenken0721 2:c5996dd62e9c 702 data[1] = 0;
kenken0721 0:f6828b914b1c 703 }else if(buff[0] == 192){
kenken0721 2:c5996dd62e9c 704 data[0] = 6;
kenken0721 2:c5996dd62e9c 705 data[1] = 0;
kenken0721 0:f6828b914b1c 706 }else if(buff[0] == 128){
kenken0721 2:c5996dd62e9c 707 data[0] = 7;
kenken0721 2:c5996dd62e9c 708 data[1] = 0;
kenken0721 0:f6828b914b1c 709 }else if(buff[0] == 28){
kenken0721 2:c5996dd62e9c 710 data[0] = -1;
kenken0721 2:c5996dd62e9c 711 data[1] = 0;
kenken0721 0:f6828b914b1c 712 }else if(buff[0] == 12){
kenken0721 2:c5996dd62e9c 713 data[0] = -2;
kenken0721 2:c5996dd62e9c 714 data[1] = 0;
kenken0721 0:f6828b914b1c 715 }else if(buff[0] == 14){
kenken0721 2:c5996dd62e9c 716 data[0] = -3;
kenken0721 2:c5996dd62e9c 717 data[1] = 0;
kenken0721 0:f6828b914b1c 718 }else if(buff[0] == 6){
kenken0721 2:c5996dd62e9c 719 data[0] = -4;
kenken0721 2:c5996dd62e9c 720 data[1] = 0;
kenken0721 0:f6828b914b1c 721 }else if(buff[0] == 7){
kenken0721 2:c5996dd62e9c 722 data[0] = -5;
kenken0721 2:c5996dd62e9c 723 data[1] = 0;
kenken0721 0:f6828b914b1c 724 }else if(buff[0] == 3){
kenken0721 2:c5996dd62e9c 725 data[0] = -6;
kenken0721 2:c5996dd62e9c 726 data[1] = 0;
kenken0721 0:f6828b914b1c 727 }else if(buff[0] == 1){
kenken0721 2:c5996dd62e9c 728 data[0] = -7;
kenken0721 2:c5996dd62e9c 729 data[1] = 0;
kenken0721 2:c5996dd62e9c 730 }else if(buff[0] == 255){
kenken0721 2:c5996dd62e9c 731 data[0] = prelinedata;
kenken0721 2:c5996dd62e9c 732 data[1] = 1;
kenken0721 2:c5996dd62e9c 733 }else if(buff[0] == 0){
kenken0721 2:c5996dd62e9c 734 data[0] = prelinedata;
kenken0721 2:c5996dd62e9c 735 data[1] = 0;
kenken0721 0:f6828b914b1c 736 }else{
kenken0721 2:c5996dd62e9c 737 data[0] = prelinedata;
kenken0721 2:c5996dd62e9c 738 data[1] = 0;
kenken0721 0:f6828b914b1c 739 }
kenken0721 2:c5996dd62e9c 740 prelinedata = data[0];
kenken0721 3:aaa2fde4fafd 741 }