Dependencies:   PID Serialservo TCS3200 XQ_servo encoder encoder2 mbed moter

Fork of nhk_2018_undercarry_test09 by ケンタ ミヤザキ

Committer:
kenken0721
Date:
Sun Apr 08 09:56:29 2018 +0000
Revision:
9:0c1fce6d8094
Parent:
8:91a72648f312
Child:
10:01aa50804d85

        

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 4:eabb7a738ff8 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 3:aaa2fde4fafd 152 kbtpc.putc(state);
kenken0721 1:f4dbd6b9cc27 153 if(kbtpc.readable()){
kenken0721 1:f4dbd6b9cc27 154 kbtread = kbtpc.getc();
kenken0721 1:f4dbd6b9cc27 155 }
kenken0721 1:f4dbd6b9cc27 156 if(kbtread == 255){
kenken0721 1:f4dbd6b9cc27 157 mode = true;
kenken0721 1:f4dbd6b9cc27 158 }else if(kbtread == 150){
kenken0721 1:f4dbd6b9cc27 159 mode = false;
kenken0721 1:f4dbd6b9cc27 160 }else if(kbtread == 100){
kenken0721 1:f4dbd6b9cc27 161 stopflag = true;
kenken0721 1:f4dbd6b9cc27 162 }else if(kbtread == 200){
kenken0721 1:f4dbd6b9cc27 163 stopflag = false;
kenken0721 2:c5996dd62e9c 164 }else if(kbtread == STRAIGHT){
kenken0721 2:c5996dd62e9c 165 directmode = STRAIGHT;
kenken0721 2:c5996dd62e9c 166 }else if(kbtread == RIGHT){
kenken0721 2:c5996dd62e9c 167 directmode = RIGHT;
kenken0721 2:c5996dd62e9c 168 }else if(kbtread == LEFT){
kenken0721 2:c5996dd62e9c 169 directmode = LEFT;
kenken0721 3:aaa2fde4fafd 170 }else if(kbtread == START){
kenken0721 3:aaa2fde4fafd 171 state = START;
kenken0721 8:91a72648f312 172 }else if(kbtread == STAND_BY_1){
kenken0721 8:91a72648f312 173 state = STAND_BY_1;
kenken0721 8:91a72648f312 174 }else if(kbtread == YELLOW_RECEIVE){
kenken0721 8:91a72648f312 175 state = YELLOW_RECEIVE;
kenken0721 8:91a72648f312 176 crosscount = 5;
kenken0721 9:0c1fce6d8094 177 air = 1.0;
kenken0721 9:0c1fce6d8094 178 }else if(kbtread == STAND_BY_2){
kenken0721 9:0c1fce6d8094 179 state = STAND_BY_2;
kenken0721 9:0c1fce6d8094 180 crosscount = 0;;
kenken0721 1:f4dbd6b9cc27 181 }
kenken0721 8:91a72648f312 182
kenken0721 1:f4dbd6b9cc27 183 //--------------手動--------------------------------------
kenken0721 1:f4dbd6b9cc27 184 if(mode == true){
kenken0721 1:f4dbd6b9cc27 185 led2 = 1.0;
kenken0721 2:c5996dd62e9c 186 if(kbtread == STRAIGHT){
kenken0721 1:f4dbd6b9cc27 187 Straight(power, power, pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 2:c5996dd62e9c 188 }else if(kbtread == BACK){
kenken0721 1:f4dbd6b9cc27 189 Back(power, power, pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 2:c5996dd62e9c 190 }else if(kbtread == RIGHT){
kenken0721 1:f4dbd6b9cc27 191 Right(power, power, pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 2:c5996dd62e9c 192 }else if(kbtread == LEFT){
kenken0721 1:f4dbd6b9cc27 193 Left(power, power, pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 1:f4dbd6b9cc27 194 }else{
kenken0721 1:f4dbd6b9cc27 195 Stop(pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 1:f4dbd6b9cc27 196 }
kenken0721 1:f4dbd6b9cc27 197 //--------------自動---------------------------------
kenken0721 1:f4dbd6b9cc27 198 }else if(mode == false){
kenken0721 1:f4dbd6b9cc27 199 led2 = 0.0;
kenken0721 1:f4dbd6b9cc27 200 if(stopflag == true){
kenken0721 1:f4dbd6b9cc27 201 Stop(pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 1:f4dbd6b9cc27 202 }else{
kenken0721 2:c5996dd62e9c 203 LineCheck(directmode);
kenken0721 3:aaa2fde4fafd 204 switch(state){
kenken0721 4:eabb7a738ff8 205 //------------------初期位置から待機位置1------------------------------------------
kenken0721 3:aaa2fde4fafd 206 case START:
kenken0721 3:aaa2fde4fafd 207 if(crosscount == 0){
kenken0721 9:0c1fce6d8094 208 directmode = LEFT;
kenken0721 9:0c1fce6d8094 209 Linecount2();
kenken0721 9:0c1fce6d8094 210 }else if(crosscount == 1){
kenken0721 3:aaa2fde4fafd 211 directmode = STRAIGHT;
kenken0721 9:0c1fce6d8094 212 }else if(crosscount == 2){
kenken0721 6:ff7fd6556a81 213 if(directmode == STRAIGHT){
kenken0721 6:ff7fd6556a81 214 directmode = LEFT;
kenken0721 6:ff7fd6556a81 215 prelinedata = 0;
kenken0721 6:ff7fd6556a81 216 }else if(directmode == LEFT){
kenken0721 6:ff7fd6556a81 217 directmode = LEFT;
kenken0721 7:f1a924244b76 218 Linecount();
kenken0721 6:ff7fd6556a81 219 }
kenken0721 9:0c1fce6d8094 220 }else if(crosscount == 3){
kenken0721 3:aaa2fde4fafd 221 directmode = STOP;
kenken0721 3:aaa2fde4fafd 222 state = STAND_BY_1;
kenken0721 3:aaa2fde4fafd 223 crosscount = 0;
kenken0721 3:aaa2fde4fafd 224 prelinedata = 0;
kenken0721 3:aaa2fde4fafd 225 }
kenken0721 3:aaa2fde4fafd 226 break;
kenken0721 4:eabb7a738ff8 227 //------------------待機位置1----------------------------------------------------
kenken0721 3:aaa2fde4fafd 228 case STAND_BY_1:
kenken0721 3:aaa2fde4fafd 229 crosscount = 0;
kenken0721 3:aaa2fde4fafd 230 directmode = STOP;
kenken0721 9:0c1fce6d8094 231
kenken0721 4:eabb7a738ff8 232 if(distance == 1.0){
kenken0721 8:91a72648f312 233 if(redthrowing == false){
kenken0721 8:91a72648f312 234 if(redIn == 1.0){
kenken0721 8:91a72648f312 235 buzzer = 1.0;
kenken0721 8:91a72648f312 236 redcount++;
kenken0721 8:91a72648f312 237 }else {
kenken0721 8:91a72648f312 238 buzzer = 0.0;
kenken0721 8:91a72648f312 239 }
kenken0721 8:91a72648f312 240 }else if(redthrowing == true){
kenken0721 8:91a72648f312 241 if(redIn == 1.0){
kenken0721 8:91a72648f312 242 buzzer = 1.0;
kenken0721 8:91a72648f312 243 bluecount++;
kenken0721 8:91a72648f312 244 }else {
kenken0721 8:91a72648f312 245 buzzer = 0.0;
kenken0721 8:91a72648f312 246 }
kenken0721 4:eabb7a738ff8 247 }
kenken0721 9:0c1fce6d8094 248 if(redcount >= 200 ){
kenken0721 8:91a72648f312 249 buzzer = 0;
kenken0721 4:eabb7a738ff8 250 servo_hand.move(hand_tsukami_degree);
kenken0721 4:eabb7a738ff8 251 servo1.move(hiji_tsukami_degree);
kenken0721 6:ff7fd6556a81 252 servo1.move(hiji_tsukami_degree);
kenken0721 9:0c1fce6d8094 253 }else if(bluecount >= 200){
kenken0721 4:eabb7a738ff8 254 servo_hand.move(hand_tsukami_degree);
kenken0721 4:eabb7a738ff8 255 servo1.move(hiji_tsukami_degree);
kenken0721 6:ff7fd6556a81 256 servo1.move(hiji_tsukami_degree);
kenken0721 9:0c1fce6d8094 257 }
kenken0721 9:0c1fce6d8094 258 }
kenken0721 9:0c1fce6d8094 259 if(distance == 0.0 && redcount >= 200){
kenken0721 9:0c1fce6d8094 260 led2 = 1.0;
kenken0721 8:91a72648f312 261 servo2.move(koshi_red_nage_degree);
kenken0721 8:91a72648f312 262 servo2.move(koshi_red_nage_degree);
kenken0721 3:aaa2fde4fafd 263 state = RED_RECEIVE;
kenken0721 4:eabb7a738ff8 264 directmode = STOP;
kenken0721 4:eabb7a738ff8 265 redcount = 0;
kenken0721 4:eabb7a738ff8 266 crosscount = 0;
kenken0721 9:0c1fce6d8094 267 }else if(distance == 0.0 && bluecount >= 200){
kenken0721 8:91a72648f312 268 servo2.move(koshi_blue_nage_degree);
kenken0721 8:91a72648f312 269 servo2.move(koshi_blue_nage_degree);
kenken0721 4:eabb7a738ff8 270 state = BLUE_RECEIVE_1;
kenken0721 4:eabb7a738ff8 271 directmode = STOP;
kenken0721 4:eabb7a738ff8 272 bluecount = 0;
kenken0721 4:eabb7a738ff8 273 crosscount = 0;
kenken0721 4:eabb7a738ff8 274 }
kenken0721 3:aaa2fde4fafd 275 break;
kenken0721 4:eabb7a738ff8 276 //------------------待機位置1から投てき位置1----------------------------------------
kenken0721 3:aaa2fde4fafd 277 case RED_RECEIVE:
kenken0721 9:0c1fce6d8094 278 led2 = 1.0;
kenken0721 3:aaa2fde4fafd 279 if(crosscount == 0){
kenken0721 3:aaa2fde4fafd 280 directmode = LEFT;
kenken0721 4:eabb7a738ff8 281 }else if(crosscount == 1){
kenken0721 3:aaa2fde4fafd 282 directmode = STOP;
kenken0721 3:aaa2fde4fafd 283 prelinedata = 0;
kenken0721 9:0c1fce6d8094 284 touteki(1.0,185,0);
kenken0721 7:f1a924244b76 285 //syokikanomai2();
kenken0721 4:eabb7a738ff8 286 if(set_flag == false){
kenken0721 3:aaa2fde4fafd 287 directmode = RIGHT;
kenken0721 8:91a72648f312 288 Linecount();
kenken0721 3:aaa2fde4fafd 289 }
kenken0721 3:aaa2fde4fafd 290 }else if(crosscount == 2){
kenken0721 3:aaa2fde4fafd 291 directmode = STOP;
kenken0721 4:eabb7a738ff8 292 syokikanomai2();
kenken0721 4:eabb7a738ff8 293 if(set_flag == true){
kenken0721 4:eabb7a738ff8 294 state = STAND_BY_1;
kenken0721 7:f1a924244b76 295 //taiki_flag = false;
kenken0721 4:eabb7a738ff8 296 crosscount = 0;
kenken0721 8:91a72648f312 297 redthrowing = true;
kenken0721 4:eabb7a738ff8 298 }
kenken0721 3:aaa2fde4fafd 299 }
kenken0721 3:aaa2fde4fafd 300 break;
kenken0721 4:eabb7a738ff8 301 //------------------待機位置1から投てき位置2----------------------------------------
kenken0721 3:aaa2fde4fafd 302 case BLUE_RECEIVE_1:
kenken0721 3:aaa2fde4fafd 303 if(crosscount == 0){
kenken0721 3:aaa2fde4fafd 304 directmode = RIGHT;
kenken0721 3:aaa2fde4fafd 305 }else if(crosscount == 1){
kenken0721 3:aaa2fde4fafd 306 directmode = STRAIGHT;
kenken0721 3:aaa2fde4fafd 307 }else if(crosscount == 2){
kenken0721 3:aaa2fde4fafd 308 directmode = LEFT;
kenken0721 7:f1a924244b76 309 Linecount();
kenken0721 3:aaa2fde4fafd 310 }else if(crosscount == 3){
kenken0721 3:aaa2fde4fafd 311 directmode = STOP;
kenken0721 3:aaa2fde4fafd 312 prelinedata = 0;
kenken0721 4:eabb7a738ff8 313 state = BLUE_RECEIVE_2;
kenken0721 3:aaa2fde4fafd 314 crosscount = 0;
kenken0721 3:aaa2fde4fafd 315 }
kenken0721 3:aaa2fde4fafd 316 break;
kenken0721 4:eabb7a738ff8 317 //------------------待機位置2----------------------------------------------------
kenken0721 3:aaa2fde4fafd 318 case STAND_BY_2:
kenken0721 3:aaa2fde4fafd 319 crosscount = 0;
kenken0721 4:eabb7a738ff8 320 directmode = STOP;
kenken0721 4:eabb7a738ff8 321 if(distance == 1.0){
kenken0721 9:0c1fce6d8094 322 if(redIn == 1.0 && micro_switch == 1){
kenken0721 4:eabb7a738ff8 323 buzzer = 1.0;
kenken0721 4:eabb7a738ff8 324 bluecount++;
kenken0721 7:f1a924244b76 325 }else if(micro_switch == 0.0){
kenken0721 4:eabb7a738ff8 326 buzzer = 1.0;
kenken0721 4:eabb7a738ff8 327 yellowcount++;
kenken0721 4:eabb7a738ff8 328 }else{
kenken0721 4:eabb7a738ff8 329 buzzer = 0.0;
kenken0721 4:eabb7a738ff8 330 }
kenken0721 9:0c1fce6d8094 331 if(bluecount >= 200){
kenken0721 5:c5a2a5cf600d 332 servo_hand.move(hand_tsukami_degree);
kenken0721 5:c5a2a5cf600d 333 servo1.move(hiji_tsukami_degree);
kenken0721 6:ff7fd6556a81 334 servo1.move(hiji_tsukami_degree);
kenken0721 4:eabb7a738ff8 335 }else if(yellowcount >= 500){
kenken0721 9:0c1fce6d8094 336 air = 1.0;
kenken0721 4:eabb7a738ff8 337 }
kenken0721 9:0c1fce6d8094 338 }else if(distance == 0.0 && bluecount >= 200){
kenken0721 8:91a72648f312 339 servo2.move(koshi_blue_nage_degree);
kenken0721 8:91a72648f312 340 servo2.move(koshi_blue_nage_degree);
kenken0721 4:eabb7a738ff8 341 state = BLUE_RECEIVE_2;
kenken0721 4:eabb7a738ff8 342 directmode = STOP;
kenken0721 4:eabb7a738ff8 343 bluecount = 0;
kenken0721 4:eabb7a738ff8 344 crosscount = 0;
kenken0721 9:0c1fce6d8094 345 buzzer = 0.0;
kenken0721 9:0c1fce6d8094 346 }
kenken0721 9:0c1fce6d8094 347 if(yellowcount >= 1000){
kenken0721 7:f1a924244b76 348 state = YELLOW_RECEIVE;
kenken0721 8:91a72648f312 349 buzzer = 0.0;
kenken0721 7:f1a924244b76 350 directmode = STOP;
kenken0721 7:f1a924244b76 351 yellowcount = 0;
kenken0721 7:f1a924244b76 352 crosscount = 0;
kenken0721 4:eabb7a738ff8 353 }
kenken0721 3:aaa2fde4fafd 354 break;
kenken0721 4:eabb7a738ff8 355 //------------------投てき位置2---------------------------------------------------
kenken0721 3:aaa2fde4fafd 356 case BLUE_RECEIVE_2:
kenken0721 3:aaa2fde4fafd 357 if(crosscount == 0){
kenken0721 3:aaa2fde4fafd 358 directmode = LEFT;
kenken0721 3:aaa2fde4fafd 359 }else if(crosscount == 1){
kenken0721 5:c5a2a5cf600d 360 directmode = STOP;
kenken0721 5:c5a2a5cf600d 361 prelinedata = 0;
kenken0721 9:0c1fce6d8094 362 touteki(1.0,190,1);
kenken0721 7:f1a924244b76 363 //syokikanomai2();
kenken0721 5:c5a2a5cf600d 364 if(set_flag == false){
kenken0721 5:c5a2a5cf600d 365 directmode = RIGHT;
kenken0721 7:f1a924244b76 366 Linecount();
kenken0721 3:aaa2fde4fafd 367 }
kenken0721 3:aaa2fde4fafd 368 }else if(crosscount == 2){
kenken0721 3:aaa2fde4fafd 369 directmode = STOP;
kenken0721 5:c5a2a5cf600d 370 syokikanomai2();
kenken0721 5:c5a2a5cf600d 371 if(set_flag == true){
kenken0721 5:c5a2a5cf600d 372 state = STAND_BY_2;
kenken0721 7:f1a924244b76 373 //taiki_flag = false;
kenken0721 5:c5a2a5cf600d 374 crosscount = 0;
kenken0721 5:c5a2a5cf600d 375 }
kenken0721 7:f1a924244b76 376 }
kenken0721 3:aaa2fde4fafd 377 break;
kenken0721 4:eabb7a738ff8 378 //------------------投てき位置3---------------------------------------------------
kenken0721 3:aaa2fde4fafd 379 case YELLOW_RECEIVE:
kenken0721 7:f1a924244b76 380 if(crosscount != 5){
kenken0721 3:aaa2fde4fafd 381 directmode = LEFT;
kenken0721 9:0c1fce6d8094 382 servo2.move(koshi_uke_degree);
kenken0721 9:0c1fce6d8094 383 power = POWER + 0.1;
kenken0721 3:aaa2fde4fafd 384 }else{
kenken0721 3:aaa2fde4fafd 385 directmode = STOP;
kenken0721 7:f1a924244b76 386 if(yellow_throw_flag == false){
kenken0721 7:f1a924244b76 387 yellow_throwing();
kenken0721 7:f1a924244b76 388 }else{
kenken0721 9:0c1fce6d8094 389 touteki(1.0,184,1.0);
kenken0721 7:f1a924244b76 390 syokikanomai2();
kenken0721 7:f1a924244b76 391 }
kenken0721 3:aaa2fde4fafd 392 }
kenken0721 3:aaa2fde4fafd 393 break;
kenken0721 3:aaa2fde4fafd 394 default:
kenken0721 3:aaa2fde4fafd 395 break;
kenken0721 3:aaa2fde4fafd 396 }
kenken0721 4:eabb7a738ff8 397 //--------------進行方向---------------------------------------------------------
kenken0721 3:aaa2fde4fafd 398 switch(directmode){
kenken0721 2:c5996dd62e9c 399 case STOP:
kenken0721 2:c5996dd62e9c 400 Stop(pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 2:c5996dd62e9c 401 break;
kenken0721 2:c5996dd62e9c 402 case STRAIGHT:
kenken0721 2:c5996dd62e9c 403 output = S_pid.compute((double)linedata_1[0]);
kenken0721 2:c5996dd62e9c 404 if(output >= 0){
kenken0721 7:f1a924244b76 405 Straight(power, power + output, pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 2:c5996dd62e9c 406 }else {
kenken0721 7:f1a924244b76 407 Straight(power + (-1 * output), power, pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 2:c5996dd62e9c 408 }
kenken0721 2:c5996dd62e9c 409 break;
kenken0721 2:c5996dd62e9c 410 case RIGHT:
kenken0721 2:c5996dd62e9c 411 output = R_pid.compute((double)linedata_2[0]);
kenken0721 1:f4dbd6b9cc27 412 if(output >= 0){
kenken0721 7:f1a924244b76 413 Right(power, power + output, pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 1:f4dbd6b9cc27 414 }else {
kenken0721 7:f1a924244b76 415 Right(power + (-1 * output), power, pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 2:c5996dd62e9c 416 }
kenken0721 2:c5996dd62e9c 417 break;
kenken0721 2:c5996dd62e9c 418 case LEFT:
kenken0721 2:c5996dd62e9c 419 output = L_pid.compute((double)linedata_3[0]);
kenken0721 2:c5996dd62e9c 420 if(output >= 0){
kenken0721 7:f1a924244b76 421 Left(power, power + output, pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 2:c5996dd62e9c 422 }else {
kenken0721 7:f1a924244b76 423 Left(power + (-1 * output), power, pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 2:c5996dd62e9c 424 }
kenken0721 2:c5996dd62e9c 425 break;
kenken0721 2:c5996dd62e9c 426 default:
kenken0721 2:c5996dd62e9c 427 break;
kenken0721 1:f4dbd6b9cc27 428 }
kenken0721 1:f4dbd6b9cc27 429 }
kenken0721 1:f4dbd6b9cc27 430 }
kenken0721 4:eabb7a738ff8 431 pc.printf("xdist = %f \r",x_dist);
kenken0721 4:eabb7a738ff8 432 pc.printf("ydist = %f \r",y_dist);
kenken0721 1:f4dbd6b9cc27 433 pc.printf("output = %lf \n" ,output);
kenken0721 1:f4dbd6b9cc27 434 }
kenken0721 1:f4dbd6b9cc27 435 }
kenken0721 1:f4dbd6b9cc27 436
kenken0721 7:f1a924244b76 437 //---------------初期化----------------------------------------------------------
kenken0721 7:f1a924244b76 438
kenken0721 7:f1a924244b76 439 void yellow_throwing(){
kenken0721 7:f1a924244b76 440 if(yellow_throw_flag == false){
kenken0721 7:f1a924244b76 441 timer.start();
kenken0721 7:f1a924244b76 442 }
kenken0721 7:f1a924244b76 443 int times = timer.read();
kenken0721 8:91a72648f312 444 if(times >= 2.0 && times < 3.0){
kenken0721 8:91a72648f312 445 servo_hand.move(hand_uke_degree);
kenken0721 8:91a72648f312 446 }else if(times >= 3.0 && times < 4.0){
kenken0721 9:0c1fce6d8094 447 servo1.move(hiji_yellow_uke_degree);
kenken0721 8:91a72648f312 448 }else if(times >= 4.0 && times < 5.0){
kenken0721 7:f1a924244b76 449 servo_hand.move(hand_tsukami_degree);
kenken0721 8:91a72648f312 450 }else if(times >=5.0 && times <5.5){
kenken0721 7:f1a924244b76 451 servo2.move(koshi_nage_degree);
kenken0721 8:91a72648f312 452 }else if(times >= 5.5){
kenken0721 7:f1a924244b76 453 yellow_throw_flag = true;
kenken0721 7:f1a924244b76 454 timer.stop();
kenken0721 7:f1a924244b76 455 timer.reset();
kenken0721 7:f1a924244b76 456 }
kenken0721 7:f1a924244b76 457 }
kenken0721 7:f1a924244b76 458
kenken0721 4:eabb7a738ff8 459 void syokikanomai(void){
kenken0721 4:eabb7a738ff8 460 syokika_flag = false;
kenken0721 4:eabb7a738ff8 461 while (set_flag==false) {
kenken0721 4:eabb7a738ff8 462 encoder_count= Enc_Arm.read_rotate();
kenken0721 4:eabb7a738ff8 463 servo_hand.move(hand_uke_degree);
kenken0721 4:eabb7a738ff8 464 servo1.move(hiji_nage_degree);//退避
kenken0721 4:eabb7a738ff8 465 servo2.move(koshi_uke_degree);
kenken0721 6:ff7fd6556a81 466 servo1.move(hiji_nage_degree);//退避
kenken0721 6:ff7fd6556a81 467 servo2.move(koshi_uke_degree);
kenken0721 4:eabb7a738ff8 468 motor_dir1=0;
kenken0721 4:eabb7a738ff8 469 motor_dir2=1;
kenken0721 8:91a72648f312 470 motor_pwm=0.12;
kenken0721 7:f1a924244b76 471 if(Enc_Arm.read_z() == 1){
kenken0721 4:eabb7a738ff8 472 syokika_flag=true;
kenken0721 4:eabb7a738ff8 473 buzzer = 1.0;
kenken0721 4:eabb7a738ff8 474 }
kenken0721 4:eabb7a738ff8 475
kenken0721 4:eabb7a738ff8 476 if (syokika_flag==true) {
kenken0721 9:0c1fce6d8094 477 if(encoder_count == 165){
kenken0721 4:eabb7a738ff8 478 motor_pwm=0;
kenken0721 4:eabb7a738ff8 479 motor_dir1=1;
kenken0721 4:eabb7a738ff8 480 motor_dir2=1;
kenken0721 4:eabb7a738ff8 481 set_flag=true; //投てき後,falseにする.
kenken0721 4:eabb7a738ff8 482 }
kenken0721 4:eabb7a738ff8 483 }
kenken0721 4:eabb7a738ff8 484 }
kenken0721 4:eabb7a738ff8 485 servo1.move(hiji_uke_degree);
kenken0721 4:eabb7a738ff8 486 servo1.move(hiji_uke_degree);
kenken0721 4:eabb7a738ff8 487 }
kenken0721 4:eabb7a738ff8 488
kenken0721 4:eabb7a738ff8 489 void syokikanomai2(void){
kenken0721 4:eabb7a738ff8 490 if(set_flag==false) {
kenken0721 7:f1a924244b76 491 encoder_count= Enc_Arm.read_rotate();
kenken0721 8:91a72648f312 492 servo_hand.move(hand_uke_degree);
kenken0721 8:91a72648f312 493 servo1.move(hiji_nage_degree);//退避
kenken0721 8:91a72648f312 494 servo1.move(hiji_nage_degree);//退避
kenken0721 8:91a72648f312 495 if(yellow_throw_flag == false){
kenken0721 8:91a72648f312 496 servo2.move(koshi_uke_degree);
kenken0721 8:91a72648f312 497 servo2.move(koshi_uke_degree);
kenken0721 7:f1a924244b76 498 }
kenken0721 4:eabb7a738ff8 499 motor_dir1=0;
kenken0721 4:eabb7a738ff8 500 motor_dir2=1;
kenken0721 8:91a72648f312 501 motor_pwm=0.12;
kenken0721 4:eabb7a738ff8 502 if(Enc_Arm.read_z() == 1) {
kenken0721 4:eabb7a738ff8 503 syokika_flag = true;
kenken0721 4:eabb7a738ff8 504 buzzer = 1.0;
kenken0721 4:eabb7a738ff8 505 }
kenken0721 9:0c1fce6d8094 506 if(syokika_flag==true) {
kenken0721 8:91a72648f312 507 int set_pos;
kenken0721 9:0c1fce6d8094 508 if(yellow_throw_flag == true) set_pos = 165;
kenken0721 9:0c1fce6d8094 509 else set_pos = 165;
kenken0721 8:91a72648f312 510 if(encoder_count == set_pos){
kenken0721 9:0c1fce6d8094 511 buzzer = 0.0;
kenken0721 4:eabb7a738ff8 512 motor_pwm=0;
kenken0721 4:eabb7a738ff8 513 motor_dir1=1;
kenken0721 4:eabb7a738ff8 514 motor_dir2=1;
kenken0721 8:91a72648f312 515 if(yellow_throw_flag == false){
kenken0721 8:91a72648f312 516 servo_hand.move(hand_uke_degree);
kenken0721 8:91a72648f312 517 servo1.move(hiji_uke_degree);
kenken0721 8:91a72648f312 518 servo1.move(hiji_uke_degree);
kenken0721 9:0c1fce6d8094 519 servo1.move(hiji_uke_degree);
kenken0721 9:0c1fce6d8094 520 servo1.move(hiji_uke_degree);
kenken0721 8:91a72648f312 521 }else{
kenken0721 8:91a72648f312 522 servo_hand.move(hand_tsukami_degree);
kenken0721 8:91a72648f312 523 servo2.move(koshi_uke_degree);
kenken0721 8:91a72648f312 524 servo2.move(koshi_uke_degree);
kenken0721 8:91a72648f312 525 }
kenken0721 4:eabb7a738ff8 526 set_flag = true; //投てき後,falseにする.
kenken0721 7:f1a924244b76 527 taiki_flag = true;
kenken0721 7:f1a924244b76 528 yellow_throw_flag = false;
kenken0721 4:eabb7a738ff8 529 }
kenken0721 4:eabb7a738ff8 530 }
kenken0721 4:eabb7a738ff8 531 }
kenken0721 4:eabb7a738ff8 532 }
kenken0721 4:eabb7a738ff8 533
kenken0721 6:ff7fd6556a81 534 void touteki(float armpower ,int pos, bool throwing_mode){
kenken0721 4:eabb7a738ff8 535 if(set_flag == true){
kenken0721 4:eabb7a738ff8 536 timer.start();
kenken0721 4:eabb7a738ff8 537 }
kenken0721 9:0c1fce6d8094 538 int times = timer.read();
kenken0721 9:0c1fce6d8094 539 if(times >= 1.0 && times < 4.0){
kenken0721 9:0c1fce6d8094 540 if(yellow_throw_flag == true){
kenken0721 9:0c1fce6d8094 541 if(set_pos_flag_2 == false){
kenken0721 9:0c1fce6d8094 542 if(Enc_Arm.read_rotate() < 180) {
kenken0721 9:0c1fce6d8094 543 motor_dir1 = 0;
kenken0721 9:0c1fce6d8094 544 motor_dir2 = 1;
kenken0721 9:0c1fce6d8094 545 motor_pwm = 0.15;
kenken0721 9:0c1fce6d8094 546 }else{
kenken0721 9:0c1fce6d8094 547 motor_dir1=1;
kenken0721 9:0c1fce6d8094 548 motor_dir2=1;
kenken0721 9:0c1fce6d8094 549 motor_pwm=0;
kenken0721 9:0c1fce6d8094 550 set_pos_flag_2 = true;
kenken0721 9:0c1fce6d8094 551 }
kenken0721 9:0c1fce6d8094 552 }
kenken0721 9:0c1fce6d8094 553 }
kenken0721 9:0c1fce6d8094 554 }
kenken0721 9:0c1fce6d8094 555 if(times >= 4.0 && times < 5.0){
kenken0721 4:eabb7a738ff8 556 servo_hand.move(hand_uke_degree);
kenken0721 6:ff7fd6556a81 557 }
kenken0721 9:0c1fce6d8094 558 if(times >= 5.0 && times < 6.0){
kenken0721 7:f1a924244b76 559 servo1.move(hiji_nage_degree);
kenken0721 4:eabb7a738ff8 560 servo1.move(hiji_nage_degree);
kenken0721 4:eabb7a738ff8 561 }
kenken0721 9:0c1fce6d8094 562 if(times >= 6.0 && times < 9.0){
kenken0721 4:eabb7a738ff8 563 lamp = 0.0;
kenken0721 8:91a72648f312 564 if(set_pos_flag == false){
kenken0721 8:91a72648f312 565 if(Enc_Arm.read_rotate() < pos) {
kenken0721 8:91a72648f312 566 motor_dir1 = 0;
kenken0721 8:91a72648f312 567 motor_dir2 = 1;
kenken0721 8:91a72648f312 568 motor_pwm = 0.15;
kenken0721 8:91a72648f312 569 }else{
kenken0721 8:91a72648f312 570 motor_dir1=1;
kenken0721 8:91a72648f312 571 motor_dir2=1;
kenken0721 8:91a72648f312 572 motor_pwm=0;
kenken0721 8:91a72648f312 573 set_pos_flag = true;
kenken0721 8:91a72648f312 574 }
kenken0721 4:eabb7a738ff8 575 }
kenken0721 4:eabb7a738ff8 576 }
kenken0721 7:f1a924244b76 577
kenken0721 4:eabb7a738ff8 578 //----投てき-------------------------
kenken0721 6:ff7fd6556a81 579 if(throwing_mode == 0.0){
kenken0721 9:0c1fce6d8094 580 if(times >= 9.0 && times < 10.0){
kenken0721 5:c5a2a5cf600d 581 motor_dir1 = 0;
kenken0721 5:c5a2a5cf600d 582 motor_dir2 = 1;
kenken0721 5:c5a2a5cf600d 583 motor_pwm = armpower;
kenken0721 5:c5a2a5cf600d 584 }
kenken0721 6:ff7fd6556a81 585 }else if(throwing_mode == 1.0){
kenken0721 9:0c1fce6d8094 586 if(times >= 9.0 && times < 9.1){
kenken0721 6:ff7fd6556a81 587 throwing_relay = 1.0;
kenken0721 5:c5a2a5cf600d 588 }else{
kenken0721 8:91a72648f312 589 throwing_relay = 0.0;
kenken0721 5:c5a2a5cf600d 590 }
kenken0721 4:eabb7a738ff8 591 }
kenken0721 9:0c1fce6d8094 592 if(times >= 10.0 && times <11.0){
kenken0721 4:eabb7a738ff8 593 motor_pwm = 0.0;
kenken0721 8:91a72648f312 594 motor_dir1 = 1;
kenken0721 8:91a72648f312 595 motor_dir2 = 1;
kenken0721 4:eabb7a738ff8 596 buzzer = 0;
kenken0721 4:eabb7a738ff8 597 lamp = 1.0;
kenken0721 9:0c1fce6d8094 598 syokika_flag = false;
kenken0721 9:0c1fce6d8094 599 }else if(times >= 11.0){
kenken0721 4:eabb7a738ff8 600 set_flag = false;
kenken0721 8:91a72648f312 601 set_pos_flag = false;
kenken0721 9:0c1fce6d8094 602 set_pos_flag_2 = false;
kenken0721 4:eabb7a738ff8 603 timer.reset();
kenken0721 4:eabb7a738ff8 604 timer.stop();
kenken0721 4:eabb7a738ff8 605 }
kenken0721 4:eabb7a738ff8 606 }
kenken0721 4:eabb7a738ff8 607
kenken0721 7:f1a924244b76 608 void Linecount(void){
kenken0721 7:f1a924244b76 609 if(directmode == RIGHT){
kenken0721 7:f1a924244b76 610 if(linecountcheck == false){
kenken0721 7:f1a924244b76 611 tar_x_dist_2 = x_dist;
kenken0721 7:f1a924244b76 612 linecountcheck = true;
kenken0721 7:f1a924244b76 613 }else{
kenken0721 7:f1a924244b76 614 if((x_dist - tar_x_dist_2) > X_STOP_DIST_3){
kenken0721 7:f1a924244b76 615 crosscount++;
kenken0721 7:f1a924244b76 616 linecountcheck = false;
kenken0721 7:f1a924244b76 617 }
kenken0721 7:f1a924244b76 618 }
kenken0721 7:f1a924244b76 619 }else if(directmode == LEFT){
kenken0721 7:f1a924244b76 620 if(linecountcheck == false){
kenken0721 7:f1a924244b76 621 tar_x_dist_2 = x_dist;
kenken0721 7:f1a924244b76 622 linecountcheck = true;
kenken0721 7:f1a924244b76 623 }else{
kenken0721 7:f1a924244b76 624 if((tar_x_dist_2 - x_dist) >= X_STOP_DIST_2){
kenken0721 7:f1a924244b76 625 crosscount++;
kenken0721 7:f1a924244b76 626 linecountcheck = false;
kenken0721 7:f1a924244b76 627 }
kenken0721 7:f1a924244b76 628 }
kenken0721 7:f1a924244b76 629 }
kenken0721 7:f1a924244b76 630 }
kenken0721 7:f1a924244b76 631
kenken0721 9:0c1fce6d8094 632 void Linecount2(void){
kenken0721 9:0c1fce6d8094 633 if(directmode == LEFT){
kenken0721 9:0c1fce6d8094 634 if(linecountcheck == false){
kenken0721 9:0c1fce6d8094 635 tar_x_dist_3 = x_dist;
kenken0721 9:0c1fce6d8094 636 linecountcheck = true;
kenken0721 9:0c1fce6d8094 637 }else{
kenken0721 9:0c1fce6d8094 638 if((tar_x_dist_3 - x_dist) >= X_STOP_DIST_4){
kenken0721 9:0c1fce6d8094 639 crosscount++;
kenken0721 9:0c1fce6d8094 640 linecountcheck = false;
kenken0721 9:0c1fce6d8094 641 }
kenken0721 9:0c1fce6d8094 642 }
kenken0721 9:0c1fce6d8094 643 }
kenken0721 9:0c1fce6d8094 644 }
kenken0721 2:c5996dd62e9c 645 void LineCheck(int dmode){
kenken0721 2:c5996dd62e9c 646 if(dmode == STRAIGHT){
kenken0721 2:c5996dd62e9c 647 if(linedata_1[1] == 1){
kenken0721 2:c5996dd62e9c 648 ontheline = true;
kenken0721 2:c5996dd62e9c 649 tar_y_dist = y_dist;
kenken0721 2:c5996dd62e9c 650 }
kenken0721 2:c5996dd62e9c 651 if(ontheline == true){
kenken0721 3:aaa2fde4fafd 652 if((y_dist - tar_y_dist) >= Y_STOP_DIST){
kenken0721 2:c5996dd62e9c 653 ontheline = false;
kenken0721 2:c5996dd62e9c 654 crosscount++;
kenken0721 2:c5996dd62e9c 655 }
kenken0721 2:c5996dd62e9c 656 }
kenken0721 2:c5996dd62e9c 657 }else if(dmode == RIGHT){
kenken0721 3:aaa2fde4fafd 658 if(linedata_2[1] == 1){
kenken0721 3:aaa2fde4fafd 659 ontheline = true;
kenken0721 3:aaa2fde4fafd 660 tar_x_dist = x_dist;
kenken0721 3:aaa2fde4fafd 661 }
kenken0721 2:c5996dd62e9c 662 if(ontheline == true){
kenken0721 3:aaa2fde4fafd 663 if((x_dist - tar_x_dist) >= X_STOP_DIST){
kenken0721 2:c5996dd62e9c 664 ontheline = false;
kenken0721 2:c5996dd62e9c 665 crosscount++;
kenken0721 2:c5996dd62e9c 666 }
kenken0721 2:c5996dd62e9c 667 }
kenken0721 2:c5996dd62e9c 668 }else if(dmode == LEFT){
kenken0721 3:aaa2fde4fafd 669 if(linedata_3[1] == 1){
kenken0721 3:aaa2fde4fafd 670 ontheline = true;
kenken0721 3:aaa2fde4fafd 671 tar_x_dist = x_dist;
kenken0721 3:aaa2fde4fafd 672 }
kenken0721 2:c5996dd62e9c 673 if(ontheline == true){
kenken0721 3:aaa2fde4fafd 674 if((tar_x_dist - x_dist) >= X_STOP_DIST){
kenken0721 2:c5996dd62e9c 675 ontheline = false;
kenken0721 2:c5996dd62e9c 676 crosscount++;
kenken0721 2:c5996dd62e9c 677 }
kenken0721 2:c5996dd62e9c 678 }
kenken0721 2:c5996dd62e9c 679 }
kenken0721 2:c5996dd62e9c 680 }
kenken0721 0:f6828b914b1c 681
kenken0721 2:c5996dd62e9c 682 void linecheck(char *buff, int data[2]){
kenken0721 0:f6828b914b1c 683 if(buff[0] == 24){
kenken0721 2:c5996dd62e9c 684 data[0] = 0;
kenken0721 2:c5996dd62e9c 685 data[1] = 0;
kenken0721 0:f6828b914b1c 686 }else if(buff[0] == 56){
kenken0721 2:c5996dd62e9c 687 data[0] = 1;
kenken0721 2:c5996dd62e9c 688 data[1] = 0;
kenken0721 0:f6828b914b1c 689 }else if(buff[0] == 48){
kenken0721 2:c5996dd62e9c 690 data[0] = 2;
kenken0721 2:c5996dd62e9c 691 data[1] = 0;
kenken0721 0:f6828b914b1c 692 }else if(buff[0] == 112){
kenken0721 2:c5996dd62e9c 693 data[0] = 3;
kenken0721 2:c5996dd62e9c 694 data[1] = 0;
kenken0721 0:f6828b914b1c 695 }else if(buff[0] == 96){
kenken0721 2:c5996dd62e9c 696 data[0] = 4;
kenken0721 2:c5996dd62e9c 697 data[1] = 0;
kenken0721 0:f6828b914b1c 698 }else if(buff[0] == 224){
kenken0721 2:c5996dd62e9c 699 data[0] = 5;
kenken0721 2:c5996dd62e9c 700 data[1] = 0;
kenken0721 0:f6828b914b1c 701 }else if(buff[0] == 192){
kenken0721 2:c5996dd62e9c 702 data[0] = 6;
kenken0721 2:c5996dd62e9c 703 data[1] = 0;
kenken0721 0:f6828b914b1c 704 }else if(buff[0] == 128){
kenken0721 2:c5996dd62e9c 705 data[0] = 7;
kenken0721 2:c5996dd62e9c 706 data[1] = 0;
kenken0721 0:f6828b914b1c 707 }else if(buff[0] == 28){
kenken0721 2:c5996dd62e9c 708 data[0] = -1;
kenken0721 2:c5996dd62e9c 709 data[1] = 0;
kenken0721 0:f6828b914b1c 710 }else if(buff[0] == 12){
kenken0721 2:c5996dd62e9c 711 data[0] = -2;
kenken0721 2:c5996dd62e9c 712 data[1] = 0;
kenken0721 0:f6828b914b1c 713 }else if(buff[0] == 14){
kenken0721 2:c5996dd62e9c 714 data[0] = -3;
kenken0721 2:c5996dd62e9c 715 data[1] = 0;
kenken0721 0:f6828b914b1c 716 }else if(buff[0] == 6){
kenken0721 2:c5996dd62e9c 717 data[0] = -4;
kenken0721 2:c5996dd62e9c 718 data[1] = 0;
kenken0721 0:f6828b914b1c 719 }else if(buff[0] == 7){
kenken0721 2:c5996dd62e9c 720 data[0] = -5;
kenken0721 2:c5996dd62e9c 721 data[1] = 0;
kenken0721 0:f6828b914b1c 722 }else if(buff[0] == 3){
kenken0721 2:c5996dd62e9c 723 data[0] = -6;
kenken0721 2:c5996dd62e9c 724 data[1] = 0;
kenken0721 0:f6828b914b1c 725 }else if(buff[0] == 1){
kenken0721 2:c5996dd62e9c 726 data[0] = -7;
kenken0721 2:c5996dd62e9c 727 data[1] = 0;
kenken0721 2:c5996dd62e9c 728 }else if(buff[0] == 255){
kenken0721 2:c5996dd62e9c 729 data[0] = prelinedata;
kenken0721 2:c5996dd62e9c 730 data[1] = 1;
kenken0721 2:c5996dd62e9c 731 }else if(buff[0] == 0){
kenken0721 2:c5996dd62e9c 732 data[0] = prelinedata;
kenken0721 2:c5996dd62e9c 733 data[1] = 0;
kenken0721 0:f6828b914b1c 734 }else{
kenken0721 2:c5996dd62e9c 735 data[0] = prelinedata;
kenken0721 2:c5996dd62e9c 736 data[1] = 0;
kenken0721 0:f6828b914b1c 737 }
kenken0721 2:c5996dd62e9c 738 prelinedata = data[0];
kenken0721 3:aaa2fde4fafd 739 }