Dependencies:   PID Serialservo TCS3200 XQ_servo encoder encoder2 mbed moter

Fork of nhk_2018_undercarry_test10 by ケンタ ミヤザキ

Committer:
kenken0721
Date:
Sun Apr 15 01:33:59 2018 +0000
Revision:
11:2c61a18f10c3
Parent:
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 11:2c61a18f10c3 66 //void touteki(float armpower, int pos, bool thro_mode);
kenken0721 11:2c61a18f10c3 67 void touteki_1(float armpower, int pos, bool thro_mode);
kenken0721 11:2c61a18f10c3 68 void touteki_2(float armpower, int pos);
kenken0721 9:0c1fce6d8094 69 void yellow_throwing(void);
kenken0721 9:0c1fce6d8094 70 void Linecount2(void);
kenken0721 6:ff7fd6556a81 71
kenken0721 9:0c1fce6d8094 72 bool set_pos_flag_2 = false;
kenken0721 8:91a72648f312 73 bool set_pos_flag = false;
kenken0721 8:91a72648f312 74 bool redthrowing = false;
kenken0721 7:f1a924244b76 75 bool yellow_throw_flag = false;
kenken0721 7:f1a924244b76 76 bool taiki_flag = false;
kenken0721 2:c5996dd62e9c 77 int crosscount = 0;
kenken0721 0:f6828b914b1c 78 bool mode = true;//trueでラジコン、falseでオート
kenken0721 0:f6828b914b1c 79 bool stopflag = true;//trueで機体停止
kenken0721 0:f6828b914b1c 80 double power = POWER;
kenken0721 0:f6828b914b1c 81 int kbtread = 0;
kenken0721 0:f6828b914b1c 82 int count = 0;
kenken0721 0:f6828b914b1c 83 int counter = 0;
kenken0721 2:c5996dd62e9c 84 int linedata_1[2] = {0};
kenken0721 2:c5996dd62e9c 85 int linedata_2[2] = {0};
kenken0721 2:c5996dd62e9c 86 int linedata_3[2] = {0};
kenken0721 0:f6828b914b1c 87 int prelinedata = 0;
kenken0721 0:f6828b914b1c 88 double output = 0.0;
kenken0721 1:f4dbd6b9cc27 89 char buff1[2];
kenken0721 1:f4dbd6b9cc27 90 char buff2[2];
kenken0721 1:f4dbd6b9cc27 91 char buff3[2];
kenken0721 1:f4dbd6b9cc27 92 float x_dist = 0.0;
kenken0721 1:f4dbd6b9cc27 93 float y_dist = 0.0;
kenken0721 2:c5996dd62e9c 94 float tar_x_dist = 0.0;
kenken0721 7:f1a924244b76 95 float tar_x_dist_2 = 0.0;
kenken0721 9:0c1fce6d8094 96 float tar_x_dist_3 = 0.0;
kenken0721 2:c5996dd62e9c 97 float tar_y_dist = 0.0;
kenken0721 2:c5996dd62e9c 98 bool ontheline = false;
kenken0721 2:c5996dd62e9c 99 int directmode = STRAIGHT;
kenken0721 3:aaa2fde4fafd 100 int state = START;
kenken0721 3:aaa2fde4fafd 101 int times = 0;
kenken0721 4:eabb7a738ff8 102 int redcount = 0;
kenken0721 4:eabb7a738ff8 103 int bluecount = 0;
kenken0721 4:eabb7a738ff8 104 int yellowcount = 0;
kenken0721 4:eabb7a738ff8 105 bool syokika_flag=false;
kenken0721 4:eabb7a738ff8 106 bool set_flag = false;
kenken0721 4:eabb7a738ff8 107 int encoder_count = 1000;
kenken0721 7:f1a924244b76 108 int linecountcheck = false;
kenken0721 4:eabb7a738ff8 109
kenken0721 3:aaa2fde4fafd 110 int main() {
kenken0721 3:aaa2fde4fafd 111 timer.reset();
kenken0721 3:aaa2fde4fafd 112 timer.stop();
kenken0721 6:ff7fd6556a81 113 throwing_relay=0;
kenken0721 4:eabb7a738ff8 114 lamp=1;
kenken0721 9:0c1fce6d8094 115 air=0.0;
kenken0721 4:eabb7a738ff8 116 buzzer = 0.0;
kenken0721 4:eabb7a738ff8 117 micro_switch.mode(PullUp);
kenken0721 4:eabb7a738ff8 118 motor_pwm=0;
kenken0721 6:ff7fd6556a81 119 motor_dir1=1;
kenken0721 4:eabb7a738ff8 120 motor_dir2=1;
kenken0721 6:ff7fd6556a81 121 servo1.init(0);//アーム
kenken0721 6:ff7fd6556a81 122 servo2.init(1);//回転軸
kenken0721 1:f4dbd6b9cc27 123 S_pid.init();
kenken0721 3:aaa2fde4fafd 124 R_pid.init();
kenken0721 3:aaa2fde4fafd 125 L_pid.init();
kenken0721 1:f4dbd6b9cc27 126 pwm_pins[0].period(0.00005);
kenken0721 1:f4dbd6b9cc27 127 pwm_pins[1].period(0.00005);
kenken0721 1:f4dbd6b9cc27 128 pwm_pins[2].period(0.00005);
kenken0721 1:f4dbd6b9cc27 129 pwm_pins[3].period(0.00005);
kenken0721 4:eabb7a738ff8 130 motor_pwm.period(0.00005);
kenken0721 6:ff7fd6556a81 131 //------通信スピード----------------------------------------------
kenken0721 3:aaa2fde4fafd 132 pc.baud(115200);
kenken0721 2:c5996dd62e9c 133 kbtpc.baud(9600);
kenken0721 2:c5996dd62e9c 134 master.frequency(100000);
kenken0721 6:ff7fd6556a81 135 lamp = 1.0;
kenken0721 6:ff7fd6556a81 136 //-------初期化-------------------------------------------------
kenken0721 10:01aa50804d85 137 syokikanomai();//初期位置
kenken0721 4:eabb7a738ff8 138 buzzer = 0;
kenken0721 6:ff7fd6556a81 139 //-----------メインループ----------------------------------------
kenken0721 1:f4dbd6b9cc27 140 while (true) {
kenken0721 7:f1a924244b76 141 if(directmode == STRAIGHT){
kenken0721 7:f1a924244b76 142 master.read(addr1,buff1,2);
kenken0721 7:f1a924244b76 143 linecheck(buff1,linedata_1);
kenken0721 7:f1a924244b76 144 }else if(directmode == RIGHT){
kenken0721 7:f1a924244b76 145 master.read(addr2,buff2,2);
kenken0721 7:f1a924244b76 146 linecheck(buff2,linedata_2);
kenken0721 7:f1a924244b76 147 }else if(directmode == LEFT){
kenken0721 7:f1a924244b76 148 master.read(addr3,buff3,2);
kenken0721 7:f1a924244b76 149 linecheck(buff3,linedata_3);
kenken0721 7:f1a924244b76 150 }
kenken0721 7:f1a924244b76 151
kenken0721 2:c5996dd62e9c 152 x_dist = Enc_Carry_X.read_rotate();
kenken0721 2:c5996dd62e9c 153 y_dist = Enc_Carry_Y.read_rotate();
kenken0721 10:01aa50804d85 154
kenken0721 10:01aa50804d85 155 //PCからの命令
kenken0721 3:aaa2fde4fafd 156 kbtpc.putc(state);
kenken0721 1:f4dbd6b9cc27 157 if(kbtpc.readable()){
kenken0721 1:f4dbd6b9cc27 158 kbtread = kbtpc.getc();
kenken0721 1:f4dbd6b9cc27 159 }
kenken0721 1:f4dbd6b9cc27 160 if(kbtread == 255){
kenken0721 10:01aa50804d85 161 mode = true;//
kenken0721 1:f4dbd6b9cc27 162 }else if(kbtread == 150){
kenken0721 1:f4dbd6b9cc27 163 mode = false;
kenken0721 1:f4dbd6b9cc27 164 }else if(kbtread == 100){
kenken0721 1:f4dbd6b9cc27 165 stopflag = true;
kenken0721 1:f4dbd6b9cc27 166 }else if(kbtread == 200){
kenken0721 1:f4dbd6b9cc27 167 stopflag = false;
kenken0721 2:c5996dd62e9c 168 }else if(kbtread == STRAIGHT){
kenken0721 2:c5996dd62e9c 169 directmode = STRAIGHT;
kenken0721 2:c5996dd62e9c 170 }else if(kbtread == RIGHT){
kenken0721 2:c5996dd62e9c 171 directmode = RIGHT;
kenken0721 2:c5996dd62e9c 172 }else if(kbtread == LEFT){
kenken0721 2:c5996dd62e9c 173 directmode = LEFT;
kenken0721 3:aaa2fde4fafd 174 }else if(kbtread == START){
kenken0721 3:aaa2fde4fafd 175 state = START;
kenken0721 8:91a72648f312 176 }else if(kbtread == STAND_BY_1){
kenken0721 8:91a72648f312 177 state = STAND_BY_1;
kenken0721 8:91a72648f312 178 }else if(kbtread == YELLOW_RECEIVE){
kenken0721 8:91a72648f312 179 state = YELLOW_RECEIVE;
kenken0721 8:91a72648f312 180 crosscount = 5;
kenken0721 9:0c1fce6d8094 181 air = 1.0;
kenken0721 9:0c1fce6d8094 182 }else if(kbtread == STAND_BY_2){
kenken0721 9:0c1fce6d8094 183 state = STAND_BY_2;
kenken0721 9:0c1fce6d8094 184 crosscount = 0;;
kenken0721 1:f4dbd6b9cc27 185 }
kenken0721 8:91a72648f312 186
kenken0721 1:f4dbd6b9cc27 187 //--------------手動--------------------------------------
kenken0721 1:f4dbd6b9cc27 188 if(mode == true){
kenken0721 1:f4dbd6b9cc27 189 led2 = 1.0;
kenken0721 2:c5996dd62e9c 190 if(kbtread == STRAIGHT){
kenken0721 1:f4dbd6b9cc27 191 Straight(power, power, pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 2:c5996dd62e9c 192 }else if(kbtread == BACK){
kenken0721 1:f4dbd6b9cc27 193 Back(power, power, pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 2:c5996dd62e9c 194 }else if(kbtread == RIGHT){
kenken0721 1:f4dbd6b9cc27 195 Right(power, power, pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 2:c5996dd62e9c 196 }else if(kbtread == LEFT){
kenken0721 1:f4dbd6b9cc27 197 Left(power, power, pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 1:f4dbd6b9cc27 198 }else{
kenken0721 1:f4dbd6b9cc27 199 Stop(pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 1:f4dbd6b9cc27 200 }
kenken0721 1:f4dbd6b9cc27 201 //--------------自動---------------------------------
kenken0721 1:f4dbd6b9cc27 202 }else if(mode == false){
kenken0721 1:f4dbd6b9cc27 203 led2 = 0.0;
kenken0721 1:f4dbd6b9cc27 204 if(stopflag == true){
kenken0721 1:f4dbd6b9cc27 205 Stop(pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 1:f4dbd6b9cc27 206 }else{
kenken0721 2:c5996dd62e9c 207 LineCheck(directmode);
kenken0721 3:aaa2fde4fafd 208 switch(state){
kenken0721 4:eabb7a738ff8 209 //------------------初期位置から待機位置1------------------------------------------
kenken0721 3:aaa2fde4fafd 210 case START:
kenken0721 3:aaa2fde4fafd 211 if(crosscount == 0){
kenken0721 9:0c1fce6d8094 212 directmode = LEFT;
kenken0721 9:0c1fce6d8094 213 Linecount2();
kenken0721 9:0c1fce6d8094 214 }else if(crosscount == 1){
kenken0721 3:aaa2fde4fafd 215 directmode = STRAIGHT;
kenken0721 9:0c1fce6d8094 216 }else if(crosscount == 2){
kenken0721 6:ff7fd6556a81 217 if(directmode == STRAIGHT){
kenken0721 6:ff7fd6556a81 218 directmode = LEFT;
kenken0721 6:ff7fd6556a81 219 prelinedata = 0;
kenken0721 6:ff7fd6556a81 220 }else if(directmode == LEFT){
kenken0721 6:ff7fd6556a81 221 directmode = LEFT;
kenken0721 7:f1a924244b76 222 Linecount();
kenken0721 6:ff7fd6556a81 223 }
kenken0721 9:0c1fce6d8094 224 }else if(crosscount == 3){
kenken0721 3:aaa2fde4fafd 225 directmode = STOP;
kenken0721 3:aaa2fde4fafd 226 state = STAND_BY_1;
kenken0721 3:aaa2fde4fafd 227 crosscount = 0;
kenken0721 3:aaa2fde4fafd 228 prelinedata = 0;
kenken0721 3:aaa2fde4fafd 229 }
kenken0721 3:aaa2fde4fafd 230 break;
kenken0721 4:eabb7a738ff8 231 //------------------待機位置1----------------------------------------------------
kenken0721 3:aaa2fde4fafd 232 case STAND_BY_1:
kenken0721 3:aaa2fde4fafd 233 crosscount = 0;
kenken0721 3:aaa2fde4fafd 234 directmode = STOP;
kenken0721 9:0c1fce6d8094 235
kenken0721 4:eabb7a738ff8 236 if(distance == 1.0){
kenken0721 8:91a72648f312 237 if(redthrowing == false){
kenken0721 8:91a72648f312 238 if(redIn == 1.0){
kenken0721 8:91a72648f312 239 buzzer = 1.0;
kenken0721 8:91a72648f312 240 redcount++;
kenken0721 8:91a72648f312 241 }else {
kenken0721 8:91a72648f312 242 buzzer = 0.0;
kenken0721 8:91a72648f312 243 }
kenken0721 8:91a72648f312 244 }else if(redthrowing == true){
kenken0721 8:91a72648f312 245 if(redIn == 1.0){
kenken0721 8:91a72648f312 246 buzzer = 1.0;
kenken0721 8:91a72648f312 247 bluecount++;
kenken0721 8:91a72648f312 248 }else {
kenken0721 8:91a72648f312 249 buzzer = 0.0;
kenken0721 8:91a72648f312 250 }
kenken0721 4:eabb7a738ff8 251 }
kenken0721 9:0c1fce6d8094 252 if(redcount >= 200 ){
kenken0721 8:91a72648f312 253 buzzer = 0;
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 }else if(bluecount >= 200){
kenken0721 4:eabb7a738ff8 258 servo_hand.move(hand_tsukami_degree);
kenken0721 4:eabb7a738ff8 259 servo1.move(hiji_tsukami_degree);
kenken0721 6:ff7fd6556a81 260 servo1.move(hiji_tsukami_degree);
kenken0721 9:0c1fce6d8094 261 }
kenken0721 9:0c1fce6d8094 262 }
kenken0721 9:0c1fce6d8094 263 if(distance == 0.0 && redcount >= 200){
kenken0721 9:0c1fce6d8094 264 led2 = 1.0;
kenken0721 8:91a72648f312 265 servo2.move(koshi_red_nage_degree);
kenken0721 8:91a72648f312 266 servo2.move(koshi_red_nage_degree);
kenken0721 3:aaa2fde4fafd 267 state = RED_RECEIVE;
kenken0721 4:eabb7a738ff8 268 directmode = STOP;
kenken0721 4:eabb7a738ff8 269 redcount = 0;
kenken0721 4:eabb7a738ff8 270 crosscount = 0;
kenken0721 9:0c1fce6d8094 271 }else if(distance == 0.0 && bluecount >= 200){
kenken0721 8:91a72648f312 272 servo2.move(koshi_blue_nage_degree);
kenken0721 8:91a72648f312 273 servo2.move(koshi_blue_nage_degree);
kenken0721 4:eabb7a738ff8 274 state = BLUE_RECEIVE_1;
kenken0721 4:eabb7a738ff8 275 directmode = STOP;
kenken0721 4:eabb7a738ff8 276 bluecount = 0;
kenken0721 4:eabb7a738ff8 277 crosscount = 0;
kenken0721 4:eabb7a738ff8 278 }
kenken0721 3:aaa2fde4fafd 279 break;
kenken0721 4:eabb7a738ff8 280 //------------------待機位置1から投てき位置1----------------------------------------
kenken0721 3:aaa2fde4fafd 281 case RED_RECEIVE:
kenken0721 9:0c1fce6d8094 282 led2 = 1.0;
kenken0721 3:aaa2fde4fafd 283 if(crosscount == 0){
kenken0721 3:aaa2fde4fafd 284 directmode = LEFT;
kenken0721 4:eabb7a738ff8 285 }else if(crosscount == 1){
kenken0721 3:aaa2fde4fafd 286 directmode = STOP;
kenken0721 3:aaa2fde4fafd 287 prelinedata = 0;
kenken0721 11:2c61a18f10c3 288 touteki_1(1.0,RED_TOUTEKI,0);
kenken0721 7:f1a924244b76 289 //syokikanomai2();
kenken0721 4:eabb7a738ff8 290 if(set_flag == false){
kenken0721 3:aaa2fde4fafd 291 directmode = RIGHT;
kenken0721 8:91a72648f312 292 Linecount();
kenken0721 3:aaa2fde4fafd 293 }
kenken0721 3:aaa2fde4fafd 294 }else if(crosscount == 2){
kenken0721 3:aaa2fde4fafd 295 directmode = STOP;
kenken0721 4:eabb7a738ff8 296 syokikanomai2();
kenken0721 4:eabb7a738ff8 297 if(set_flag == true){
kenken0721 4:eabb7a738ff8 298 state = STAND_BY_1;
kenken0721 7:f1a924244b76 299 //taiki_flag = false;
kenken0721 4:eabb7a738ff8 300 crosscount = 0;
kenken0721 8:91a72648f312 301 redthrowing = true;
kenken0721 4:eabb7a738ff8 302 }
kenken0721 3:aaa2fde4fafd 303 }
kenken0721 3:aaa2fde4fafd 304 break;
kenken0721 4:eabb7a738ff8 305 //------------------待機位置1から投てき位置2----------------------------------------
kenken0721 3:aaa2fde4fafd 306 case BLUE_RECEIVE_1:
kenken0721 3:aaa2fde4fafd 307 if(crosscount == 0){
kenken0721 3:aaa2fde4fafd 308 directmode = RIGHT;
kenken0721 3:aaa2fde4fafd 309 }else if(crosscount == 1){
kenken0721 3:aaa2fde4fafd 310 directmode = STRAIGHT;
kenken0721 3:aaa2fde4fafd 311 }else if(crosscount == 2){
kenken0721 3:aaa2fde4fafd 312 directmode = LEFT;
kenken0721 7:f1a924244b76 313 Linecount();
kenken0721 3:aaa2fde4fafd 314 }else if(crosscount == 3){
kenken0721 3:aaa2fde4fafd 315 directmode = STOP;
kenken0721 3:aaa2fde4fafd 316 prelinedata = 0;
kenken0721 4:eabb7a738ff8 317 state = BLUE_RECEIVE_2;
kenken0721 3:aaa2fde4fafd 318 crosscount = 0;
kenken0721 3:aaa2fde4fafd 319 }
kenken0721 3:aaa2fde4fafd 320 break;
kenken0721 4:eabb7a738ff8 321 //------------------待機位置2----------------------------------------------------
kenken0721 3:aaa2fde4fafd 322 case STAND_BY_2:
kenken0721 3:aaa2fde4fafd 323 crosscount = 0;
kenken0721 4:eabb7a738ff8 324 directmode = STOP;
kenken0721 4:eabb7a738ff8 325 if(distance == 1.0){
kenken0721 9:0c1fce6d8094 326 if(redIn == 1.0 && micro_switch == 1){
kenken0721 4:eabb7a738ff8 327 buzzer = 1.0;
kenken0721 4:eabb7a738ff8 328 bluecount++;
kenken0721 7:f1a924244b76 329 }else if(micro_switch == 0.0){
kenken0721 4:eabb7a738ff8 330 buzzer = 1.0;
kenken0721 4:eabb7a738ff8 331 yellowcount++;
kenken0721 4:eabb7a738ff8 332 }else{
kenken0721 4:eabb7a738ff8 333 buzzer = 0.0;
kenken0721 4:eabb7a738ff8 334 }
kenken0721 9:0c1fce6d8094 335 if(bluecount >= 200){
kenken0721 5:c5a2a5cf600d 336 servo_hand.move(hand_tsukami_degree);
kenken0721 5:c5a2a5cf600d 337 servo1.move(hiji_tsukami_degree);
kenken0721 6:ff7fd6556a81 338 servo1.move(hiji_tsukami_degree);
kenken0721 4:eabb7a738ff8 339 }else if(yellowcount >= 500){
kenken0721 9:0c1fce6d8094 340 air = 1.0;
kenken0721 4:eabb7a738ff8 341 }
kenken0721 9:0c1fce6d8094 342 }else if(distance == 0.0 && bluecount >= 200){
kenken0721 8:91a72648f312 343 servo2.move(koshi_blue_nage_degree);
kenken0721 8:91a72648f312 344 servo2.move(koshi_blue_nage_degree);
kenken0721 4:eabb7a738ff8 345 state = BLUE_RECEIVE_2;
kenken0721 4:eabb7a738ff8 346 directmode = STOP;
kenken0721 4:eabb7a738ff8 347 bluecount = 0;
kenken0721 4:eabb7a738ff8 348 crosscount = 0;
kenken0721 9:0c1fce6d8094 349 buzzer = 0.0;
kenken0721 9:0c1fce6d8094 350 }
kenken0721 9:0c1fce6d8094 351 if(yellowcount >= 1000){
kenken0721 7:f1a924244b76 352 state = YELLOW_RECEIVE;
kenken0721 8:91a72648f312 353 buzzer = 0.0;
kenken0721 7:f1a924244b76 354 directmode = STOP;
kenken0721 7:f1a924244b76 355 yellowcount = 0;
kenken0721 7:f1a924244b76 356 crosscount = 0;
kenken0721 4:eabb7a738ff8 357 }
kenken0721 3:aaa2fde4fafd 358 break;
kenken0721 4:eabb7a738ff8 359 //------------------投てき位置2---------------------------------------------------
kenken0721 3:aaa2fde4fafd 360 case BLUE_RECEIVE_2:
kenken0721 3:aaa2fde4fafd 361 if(crosscount == 0){
kenken0721 3:aaa2fde4fafd 362 directmode = LEFT;
kenken0721 3:aaa2fde4fafd 363 }else if(crosscount == 1){
kenken0721 5:c5a2a5cf600d 364 directmode = STOP;
kenken0721 5:c5a2a5cf600d 365 prelinedata = 0;
kenken0721 11:2c61a18f10c3 366 touteki_1(1.0,BLUE_TOUTEKI,1);
kenken0721 7:f1a924244b76 367 //syokikanomai2();
kenken0721 5:c5a2a5cf600d 368 if(set_flag == false){
kenken0721 5:c5a2a5cf600d 369 directmode = RIGHT;
kenken0721 7:f1a924244b76 370 Linecount();
kenken0721 3:aaa2fde4fafd 371 }
kenken0721 3:aaa2fde4fafd 372 }else if(crosscount == 2){
kenken0721 3:aaa2fde4fafd 373 directmode = STOP;
kenken0721 5:c5a2a5cf600d 374 syokikanomai2();
kenken0721 5:c5a2a5cf600d 375 if(set_flag == true){
kenken0721 5:c5a2a5cf600d 376 state = STAND_BY_2;
kenken0721 7:f1a924244b76 377 //taiki_flag = false;
kenken0721 5:c5a2a5cf600d 378 crosscount = 0;
kenken0721 5:c5a2a5cf600d 379 }
kenken0721 7:f1a924244b76 380 }
kenken0721 3:aaa2fde4fafd 381 break;
kenken0721 4:eabb7a738ff8 382 //------------------投てき位置3---------------------------------------------------
kenken0721 3:aaa2fde4fafd 383 case YELLOW_RECEIVE:
kenken0721 7:f1a924244b76 384 if(crosscount != 5){
kenken0721 3:aaa2fde4fafd 385 directmode = LEFT;
kenken0721 9:0c1fce6d8094 386 servo2.move(koshi_uke_degree);
kenken0721 9:0c1fce6d8094 387 power = POWER + 0.1;
kenken0721 3:aaa2fde4fafd 388 }else{
kenken0721 3:aaa2fde4fafd 389 directmode = STOP;
kenken0721 7:f1a924244b76 390 if(yellow_throw_flag == false){
kenken0721 7:f1a924244b76 391 yellow_throwing();
kenken0721 7:f1a924244b76 392 }else{
kenken0721 11:2c61a18f10c3 393 touteki_2(1.0,YELLOW_TOUTEKI);
kenken0721 7:f1a924244b76 394 syokikanomai2();
kenken0721 7:f1a924244b76 395 }
kenken0721 3:aaa2fde4fafd 396 }
kenken0721 3:aaa2fde4fafd 397 break;
kenken0721 3:aaa2fde4fafd 398 default:
kenken0721 3:aaa2fde4fafd 399 break;
kenken0721 3:aaa2fde4fafd 400 }
kenken0721 4:eabb7a738ff8 401 //--------------進行方向---------------------------------------------------------
kenken0721 3:aaa2fde4fafd 402 switch(directmode){
kenken0721 2:c5996dd62e9c 403 case STOP:
kenken0721 2:c5996dd62e9c 404 Stop(pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 2:c5996dd62e9c 405 break;
kenken0721 2:c5996dd62e9c 406 case STRAIGHT:
kenken0721 2:c5996dd62e9c 407 output = S_pid.compute((double)linedata_1[0]);
kenken0721 2:c5996dd62e9c 408 if(output >= 0){
kenken0721 7:f1a924244b76 409 Straight(power, power + output, pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 2:c5996dd62e9c 410 }else {
kenken0721 7:f1a924244b76 411 Straight(power + (-1 * output), power, pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 2:c5996dd62e9c 412 }
kenken0721 2:c5996dd62e9c 413 break;
kenken0721 2:c5996dd62e9c 414 case RIGHT:
kenken0721 2:c5996dd62e9c 415 output = R_pid.compute((double)linedata_2[0]);
kenken0721 1:f4dbd6b9cc27 416 if(output >= 0){
kenken0721 7:f1a924244b76 417 Right(power, power + output, pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 1:f4dbd6b9cc27 418 }else {
kenken0721 7:f1a924244b76 419 Right(power + (-1 * output), power, pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 2:c5996dd62e9c 420 }
kenken0721 2:c5996dd62e9c 421 break;
kenken0721 2:c5996dd62e9c 422 case LEFT:
kenken0721 2:c5996dd62e9c 423 output = L_pid.compute((double)linedata_3[0]);
kenken0721 2:c5996dd62e9c 424 if(output >= 0){
kenken0721 7:f1a924244b76 425 Left(power, power + output, pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 2:c5996dd62e9c 426 }else {
kenken0721 7:f1a924244b76 427 Left(power + (-1 * output), power, pwm_pins, dir_pins_1, dir_pins_2);
kenken0721 2:c5996dd62e9c 428 }
kenken0721 2:c5996dd62e9c 429 break;
kenken0721 2:c5996dd62e9c 430 default:
kenken0721 2:c5996dd62e9c 431 break;
kenken0721 1:f4dbd6b9cc27 432 }
kenken0721 1:f4dbd6b9cc27 433 }
kenken0721 1:f4dbd6b9cc27 434 }
kenken0721 4:eabb7a738ff8 435 pc.printf("xdist = %f \r",x_dist);
kenken0721 4:eabb7a738ff8 436 pc.printf("ydist = %f \r",y_dist);
kenken0721 1:f4dbd6b9cc27 437 pc.printf("output = %lf \n" ,output);
kenken0721 1:f4dbd6b9cc27 438 }
kenken0721 1:f4dbd6b9cc27 439 }
kenken0721 1:f4dbd6b9cc27 440
kenken0721 7:f1a924244b76 441 //---------------初期化----------------------------------------------------------
kenken0721 7:f1a924244b76 442
kenken0721 7:f1a924244b76 443 void yellow_throwing(){
kenken0721 7:f1a924244b76 444 if(yellow_throw_flag == false){
kenken0721 7:f1a924244b76 445 timer.start();
kenken0721 7:f1a924244b76 446 }
kenken0721 7:f1a924244b76 447 int times = timer.read();
kenken0721 11:2c61a18f10c3 448 if(times >= 1.0 && times < 2.0){
kenken0721 8:91a72648f312 449 servo_hand.move(hand_uke_degree);
kenken0721 11:2c61a18f10c3 450 }else if(times >= 2.0 && times < 3.0){
kenken0721 9:0c1fce6d8094 451 servo1.move(hiji_yellow_uke_degree);
kenken0721 11:2c61a18f10c3 452 }else if(times >= 3.0 && times < 4.0){
kenken0721 7:f1a924244b76 453 servo_hand.move(hand_tsukami_degree);
kenken0721 11:2c61a18f10c3 454 }else if(times >=4.0 && times <4.5){
kenken0721 7:f1a924244b76 455 servo2.move(koshi_nage_degree);
kenken0721 11:2c61a18f10c3 456 }else if(times >= 4.5){
kenken0721 7:f1a924244b76 457 yellow_throw_flag = true;
kenken0721 7:f1a924244b76 458 timer.stop();
kenken0721 7:f1a924244b76 459 timer.reset();
kenken0721 7:f1a924244b76 460 }
kenken0721 7:f1a924244b76 461 }
kenken0721 7:f1a924244b76 462
kenken0721 4:eabb7a738ff8 463 void syokikanomai(void){
kenken0721 4:eabb7a738ff8 464 syokika_flag = false;
kenken0721 4:eabb7a738ff8 465 while (set_flag==false) {
kenken0721 4:eabb7a738ff8 466 encoder_count= Enc_Arm.read_rotate();
kenken0721 4:eabb7a738ff8 467 servo_hand.move(hand_uke_degree);
kenken0721 4:eabb7a738ff8 468 servo1.move(hiji_nage_degree);//退避
kenken0721 4:eabb7a738ff8 469 servo2.move(koshi_uke_degree);
kenken0721 6:ff7fd6556a81 470 servo1.move(hiji_nage_degree);//退避
kenken0721 6:ff7fd6556a81 471 servo2.move(koshi_uke_degree);
kenken0721 4:eabb7a738ff8 472 motor_dir1=0;
kenken0721 4:eabb7a738ff8 473 motor_dir2=1;
kenken0721 8:91a72648f312 474 motor_pwm=0.12;
kenken0721 7:f1a924244b76 475 if(Enc_Arm.read_z() == 1){
kenken0721 4:eabb7a738ff8 476 syokika_flag=true;
kenken0721 4:eabb7a738ff8 477 buzzer = 1.0;
kenken0721 4:eabb7a738ff8 478 }
kenken0721 4:eabb7a738ff8 479
kenken0721 4:eabb7a738ff8 480 if (syokika_flag==true) {
kenken0721 10:01aa50804d85 481 if(encoder_count == SYOKIITI){
kenken0721 4:eabb7a738ff8 482 motor_pwm=0;
kenken0721 4:eabb7a738ff8 483 motor_dir1=1;
kenken0721 4:eabb7a738ff8 484 motor_dir2=1;
kenken0721 4:eabb7a738ff8 485 set_flag=true; //投てき後,falseにする.
kenken0721 4:eabb7a738ff8 486 }
kenken0721 4:eabb7a738ff8 487 }
kenken0721 4:eabb7a738ff8 488 }
kenken0721 4:eabb7a738ff8 489 servo1.move(hiji_uke_degree);
kenken0721 4:eabb7a738ff8 490 servo1.move(hiji_uke_degree);
kenken0721 4:eabb7a738ff8 491 }
kenken0721 4:eabb7a738ff8 492
kenken0721 4:eabb7a738ff8 493 void syokikanomai2(void){
kenken0721 4:eabb7a738ff8 494 if(set_flag==false) {
kenken0721 7:f1a924244b76 495 encoder_count= Enc_Arm.read_rotate();
kenken0721 8:91a72648f312 496 servo_hand.move(hand_uke_degree);
kenken0721 8:91a72648f312 497 servo1.move(hiji_nage_degree);//退避
kenken0721 8:91a72648f312 498 servo1.move(hiji_nage_degree);//退避
kenken0721 8:91a72648f312 499 if(yellow_throw_flag == false){
kenken0721 8:91a72648f312 500 servo2.move(koshi_uke_degree);
kenken0721 8:91a72648f312 501 servo2.move(koshi_uke_degree);
kenken0721 7:f1a924244b76 502 }
kenken0721 4:eabb7a738ff8 503 motor_dir1=0;
kenken0721 4:eabb7a738ff8 504 motor_dir2=1;
kenken0721 8:91a72648f312 505 motor_pwm=0.12;
kenken0721 4:eabb7a738ff8 506 if(Enc_Arm.read_z() == 1) {
kenken0721 4:eabb7a738ff8 507 syokika_flag = true;
kenken0721 4:eabb7a738ff8 508 buzzer = 1.0;
kenken0721 4:eabb7a738ff8 509 }
kenken0721 9:0c1fce6d8094 510 if(syokika_flag==true) {
kenken0721 8:91a72648f312 511 int set_pos;
kenken0721 10:01aa50804d85 512 if(yellow_throw_flag == true) set_pos = YELLOW_SYOKIITI;
kenken0721 10:01aa50804d85 513 else set_pos = SYOKIITI;
kenken0721 8:91a72648f312 514 if(encoder_count == set_pos){
kenken0721 9:0c1fce6d8094 515 buzzer = 0.0;
kenken0721 4:eabb7a738ff8 516 motor_pwm=0;
kenken0721 4:eabb7a738ff8 517 motor_dir1=1;
kenken0721 4:eabb7a738ff8 518 motor_dir2=1;
kenken0721 8:91a72648f312 519 if(yellow_throw_flag == false){
kenken0721 8:91a72648f312 520 servo_hand.move(hand_uke_degree);
kenken0721 8:91a72648f312 521 servo1.move(hiji_uke_degree);
kenken0721 8:91a72648f312 522 servo1.move(hiji_uke_degree);
kenken0721 9:0c1fce6d8094 523 servo1.move(hiji_uke_degree);
kenken0721 9:0c1fce6d8094 524 servo1.move(hiji_uke_degree);
kenken0721 8:91a72648f312 525 }else{
kenken0721 8:91a72648f312 526 servo_hand.move(hand_tsukami_degree);
kenken0721 8:91a72648f312 527 servo2.move(koshi_uke_degree);
kenken0721 8:91a72648f312 528 servo2.move(koshi_uke_degree);
kenken0721 8:91a72648f312 529 }
kenken0721 4:eabb7a738ff8 530 set_flag = true; //投てき後,falseにする.
kenken0721 7:f1a924244b76 531 taiki_flag = true;
kenken0721 7:f1a924244b76 532 yellow_throw_flag = false;
kenken0721 4:eabb7a738ff8 533 }
kenken0721 4:eabb7a738ff8 534 }
kenken0721 4:eabb7a738ff8 535 }
kenken0721 4:eabb7a738ff8 536 }
kenken0721 4:eabb7a738ff8 537
kenken0721 11:2c61a18f10c3 538 //赤,青色投てき
kenken0721 11:2c61a18f10c3 539 void touteki_1(float armpower ,int pos, bool throwing_mode){
kenken0721 11:2c61a18f10c3 540 if(set_flag == true){
kenken0721 11:2c61a18f10c3 541 timer.start();
kenken0721 11:2c61a18f10c3 542 }
kenken0721 11:2c61a18f10c3 543 int times = timer.read();
kenken0721 11:2c61a18f10c3 544 if(times >= 0.5 && times < 1.5){
kenken0721 11:2c61a18f10c3 545 servo_hand.move(hand_uke_degree);
kenken0721 11:2c61a18f10c3 546 }
kenken0721 11:2c61a18f10c3 547 if(times >= 1.5 && times < 2.5){
kenken0721 11:2c61a18f10c3 548 servo1.move(hiji_nage_degree);
kenken0721 11:2c61a18f10c3 549 servo1.move(hiji_nage_degree);
kenken0721 11:2c61a18f10c3 550 }
kenken0721 11:2c61a18f10c3 551 if(times >= 2.5 && times < 5.0){
kenken0721 11:2c61a18f10c3 552 lamp = 0.0;
kenken0721 11:2c61a18f10c3 553 if(set_pos_flag == false){
kenken0721 11:2c61a18f10c3 554 if(Enc_Arm.read_rotate() < pos) {
kenken0721 11:2c61a18f10c3 555 motor_dir1 = 0;
kenken0721 11:2c61a18f10c3 556 motor_dir2 = 1;
kenken0721 11:2c61a18f10c3 557 motor_pwm = 0.15;
kenken0721 11:2c61a18f10c3 558 }else{
kenken0721 11:2c61a18f10c3 559 motor_dir1=1;
kenken0721 11:2c61a18f10c3 560 motor_dir2=1;
kenken0721 11:2c61a18f10c3 561 motor_pwm=0;
kenken0721 11:2c61a18f10c3 562 set_pos_flag = true;
kenken0721 11:2c61a18f10c3 563 }
kenken0721 11:2c61a18f10c3 564 }
kenken0721 11:2c61a18f10c3 565 }
kenken0721 11:2c61a18f10c3 566 if(throwing_mode == 0.0){
kenken0721 11:2c61a18f10c3 567 if(times >= 5.0 && times < 6.0){
kenken0721 11:2c61a18f10c3 568 motor_dir1 = 0;
kenken0721 11:2c61a18f10c3 569 motor_dir2 = 1;
kenken0721 11:2c61a18f10c3 570 motor_pwm = armpower;
kenken0721 11:2c61a18f10c3 571 }
kenken0721 11:2c61a18f10c3 572 }else if(throwing_mode == 1.0){
kenken0721 11:2c61a18f10c3 573 if(times >= 5.0 && times < 5.1){
kenken0721 11:2c61a18f10c3 574 throwing_relay = 1.0;
kenken0721 11:2c61a18f10c3 575 }else{
kenken0721 11:2c61a18f10c3 576 throwing_relay = 0.0;
kenken0721 11:2c61a18f10c3 577 }
kenken0721 11:2c61a18f10c3 578 }
kenken0721 11:2c61a18f10c3 579 if(times >= 6.0 && times <6.5){
kenken0721 11:2c61a18f10c3 580 motor_pwm = 0.0;
kenken0721 11:2c61a18f10c3 581 motor_dir1 = 1;
kenken0721 11:2c61a18f10c3 582 motor_dir2 = 1;
kenken0721 11:2c61a18f10c3 583 buzzer = 0;
kenken0721 11:2c61a18f10c3 584 lamp = 1.0;
kenken0721 11:2c61a18f10c3 585 syokika_flag = false;
kenken0721 11:2c61a18f10c3 586 }else if(times >= 6.5){
kenken0721 11:2c61a18f10c3 587 set_flag = false;
kenken0721 11:2c61a18f10c3 588 set_pos_flag = false;
kenken0721 11:2c61a18f10c3 589 set_pos_flag_2 = false;
kenken0721 11:2c61a18f10c3 590 timer.reset();
kenken0721 11:2c61a18f10c3 591 timer.stop();
kenken0721 11:2c61a18f10c3 592 }
kenken0721 11:2c61a18f10c3 593 }
kenken0721 11:2c61a18f10c3 594
kenken0721 11:2c61a18f10c3 595 //黄色投てき
kenken0721 11:2c61a18f10c3 596 void touteki_2(float armpower ,int pos){
kenken0721 11:2c61a18f10c3 597 if(set_flag == true){
kenken0721 11:2c61a18f10c3 598 timer.start();
kenken0721 11:2c61a18f10c3 599 }
kenken0721 11:2c61a18f10c3 600 int times = timer.read();
kenken0721 11:2c61a18f10c3 601 if(times >= 0.5 && times < 2.5){
kenken0721 11:2c61a18f10c3 602 if(set_pos_flag_2 == false){
kenken0721 11:2c61a18f10c3 603 if(Enc_Arm.read_rotate() < pos) {
kenken0721 11:2c61a18f10c3 604 motor_dir1 = 0;
kenken0721 11:2c61a18f10c3 605 motor_dir2 = 1;
kenken0721 11:2c61a18f10c3 606 motor_pwm = 0.15;
kenken0721 11:2c61a18f10c3 607 }else{
kenken0721 11:2c61a18f10c3 608 motor_dir1=1;
kenken0721 11:2c61a18f10c3 609 motor_dir2=1;
kenken0721 11:2c61a18f10c3 610 motor_pwm=0;
kenken0721 11:2c61a18f10c3 611 set_pos_flag_2 = true;
kenken0721 11:2c61a18f10c3 612 }
kenken0721 11:2c61a18f10c3 613 }
kenken0721 11:2c61a18f10c3 614 }
kenken0721 11:2c61a18f10c3 615 if(times >= 2.5 && times < 3.5){
kenken0721 11:2c61a18f10c3 616 servo_hand.move(hand_uke_degree);
kenken0721 11:2c61a18f10c3 617 }
kenken0721 11:2c61a18f10c3 618 if(times >= 3.5 && times < 4.5){
kenken0721 11:2c61a18f10c3 619 servo1.move(hiji_nage_degree);
kenken0721 11:2c61a18f10c3 620 servo1.move(hiji_nage_degree);
kenken0721 11:2c61a18f10c3 621 }
kenken0721 11:2c61a18f10c3 622 /*
kenken0721 11:2c61a18f10c3 623 if(times >= 4.5 && times < 6.5){
kenken0721 11:2c61a18f10c3 624 lamp = 0.0;
kenken0721 11:2c61a18f10c3 625 if(set_pos_flag == false){
kenken0721 11:2c61a18f10c3 626 if(Enc_Arm.read_rotate() < pos) {
kenken0721 11:2c61a18f10c3 627 motor_dir1 = 0;
kenken0721 11:2c61a18f10c3 628 motor_dir2 = 1;
kenken0721 11:2c61a18f10c3 629 motor_pwm = 0.15;
kenken0721 11:2c61a18f10c3 630 }else{
kenken0721 11:2c61a18f10c3 631 motor_dir1=1;
kenken0721 11:2c61a18f10c3 632 motor_dir2=1;
kenken0721 11:2c61a18f10c3 633 motor_pwm=0;
kenken0721 11:2c61a18f10c3 634 set_pos_flag = true;
kenken0721 11:2c61a18f10c3 635 }
kenken0721 11:2c61a18f10c3 636 }
kenken0721 11:2c61a18f10c3 637 }
kenken0721 11:2c61a18f10c3 638 */
kenken0721 11:2c61a18f10c3 639 if(times >= 4.5 && times < 4.6){
kenken0721 11:2c61a18f10c3 640 throwing_relay = 1.0;
kenken0721 11:2c61a18f10c3 641 }else{
kenken0721 11:2c61a18f10c3 642 throwing_relay = 0.0;
kenken0721 11:2c61a18f10c3 643 }
kenken0721 11:2c61a18f10c3 644 if(times >= 4.6 && times <5.6){
kenken0721 11:2c61a18f10c3 645 motor_pwm = 0.0;
kenken0721 11:2c61a18f10c3 646 motor_dir1 = 1;
kenken0721 11:2c61a18f10c3 647 motor_dir2 = 1;
kenken0721 11:2c61a18f10c3 648 buzzer = 0;
kenken0721 11:2c61a18f10c3 649 lamp = 1.0;
kenken0721 11:2c61a18f10c3 650 syokika_flag = false;
kenken0721 11:2c61a18f10c3 651 }else if(times >= 5.6){
kenken0721 11:2c61a18f10c3 652 set_flag = false;
kenken0721 11:2c61a18f10c3 653 set_pos_flag = false;
kenken0721 11:2c61a18f10c3 654 set_pos_flag_2 = false;
kenken0721 11:2c61a18f10c3 655 timer.reset();
kenken0721 11:2c61a18f10c3 656 timer.stop();
kenken0721 11:2c61a18f10c3 657 }
kenken0721 11:2c61a18f10c3 658 }
kenken0721 11:2c61a18f10c3 659 /*
kenken0721 6:ff7fd6556a81 660 void touteki(float armpower ,int pos, bool throwing_mode){
kenken0721 4:eabb7a738ff8 661 if(set_flag == true){
kenken0721 4:eabb7a738ff8 662 timer.start();
kenken0721 4:eabb7a738ff8 663 }
kenken0721 9:0c1fce6d8094 664 int times = timer.read();
kenken0721 9:0c1fce6d8094 665 if(times >= 1.0 && times < 4.0){
kenken0721 9:0c1fce6d8094 666 if(yellow_throw_flag == true){
kenken0721 9:0c1fce6d8094 667 if(set_pos_flag_2 == false){
kenken0721 9:0c1fce6d8094 668 if(Enc_Arm.read_rotate() < 180) {
kenken0721 9:0c1fce6d8094 669 motor_dir1 = 0;
kenken0721 9:0c1fce6d8094 670 motor_dir2 = 1;
kenken0721 9:0c1fce6d8094 671 motor_pwm = 0.15;
kenken0721 9:0c1fce6d8094 672 }else{
kenken0721 9:0c1fce6d8094 673 motor_dir1=1;
kenken0721 9:0c1fce6d8094 674 motor_dir2=1;
kenken0721 9:0c1fce6d8094 675 motor_pwm=0;
kenken0721 9:0c1fce6d8094 676 set_pos_flag_2 = true;
kenken0721 9:0c1fce6d8094 677 }
kenken0721 9:0c1fce6d8094 678 }
kenken0721 9:0c1fce6d8094 679 }
kenken0721 9:0c1fce6d8094 680 }
kenken0721 9:0c1fce6d8094 681 if(times >= 4.0 && times < 5.0){
kenken0721 4:eabb7a738ff8 682 servo_hand.move(hand_uke_degree);
kenken0721 6:ff7fd6556a81 683 }
kenken0721 9:0c1fce6d8094 684 if(times >= 5.0 && times < 6.0){
kenken0721 7:f1a924244b76 685 servo1.move(hiji_nage_degree);
kenken0721 4:eabb7a738ff8 686 servo1.move(hiji_nage_degree);
kenken0721 4:eabb7a738ff8 687 }
kenken0721 11:2c61a18f10c3 688 if(times >= 6.0 && times < 8.5){
kenken0721 4:eabb7a738ff8 689 lamp = 0.0;
kenken0721 8:91a72648f312 690 if(set_pos_flag == false){
kenken0721 8:91a72648f312 691 if(Enc_Arm.read_rotate() < pos) {
kenken0721 8:91a72648f312 692 motor_dir1 = 0;
kenken0721 8:91a72648f312 693 motor_dir2 = 1;
kenken0721 8:91a72648f312 694 motor_pwm = 0.15;
kenken0721 8:91a72648f312 695 }else{
kenken0721 8:91a72648f312 696 motor_dir1=1;
kenken0721 8:91a72648f312 697 motor_dir2=1;
kenken0721 8:91a72648f312 698 motor_pwm=0;
kenken0721 8:91a72648f312 699 set_pos_flag = true;
kenken0721 8:91a72648f312 700 }
kenken0721 4:eabb7a738ff8 701 }
kenken0721 4:eabb7a738ff8 702 }
kenken0721 7:f1a924244b76 703
kenken0721 4:eabb7a738ff8 704 //----投てき-------------------------
kenken0721 6:ff7fd6556a81 705 if(throwing_mode == 0.0){
kenken0721 9:0c1fce6d8094 706 if(times >= 9.0 && times < 10.0){
kenken0721 5:c5a2a5cf600d 707 motor_dir1 = 0;
kenken0721 5:c5a2a5cf600d 708 motor_dir2 = 1;
kenken0721 5:c5a2a5cf600d 709 motor_pwm = armpower;
kenken0721 5:c5a2a5cf600d 710 }
kenken0721 6:ff7fd6556a81 711 }else if(throwing_mode == 1.0){
kenken0721 9:0c1fce6d8094 712 if(times >= 9.0 && times < 9.1){
kenken0721 6:ff7fd6556a81 713 throwing_relay = 1.0;
kenken0721 5:c5a2a5cf600d 714 }else{
kenken0721 8:91a72648f312 715 throwing_relay = 0.0;
kenken0721 5:c5a2a5cf600d 716 }
kenken0721 4:eabb7a738ff8 717 }
kenken0721 9:0c1fce6d8094 718 if(times >= 10.0 && times <11.0){
kenken0721 4:eabb7a738ff8 719 motor_pwm = 0.0;
kenken0721 8:91a72648f312 720 motor_dir1 = 1;
kenken0721 8:91a72648f312 721 motor_dir2 = 1;
kenken0721 4:eabb7a738ff8 722 buzzer = 0;
kenken0721 4:eabb7a738ff8 723 lamp = 1.0;
kenken0721 9:0c1fce6d8094 724 syokika_flag = false;
kenken0721 9:0c1fce6d8094 725 }else if(times >= 11.0){
kenken0721 4:eabb7a738ff8 726 set_flag = false;
kenken0721 8:91a72648f312 727 set_pos_flag = false;
kenken0721 9:0c1fce6d8094 728 set_pos_flag_2 = false;
kenken0721 4:eabb7a738ff8 729 timer.reset();
kenken0721 4:eabb7a738ff8 730 timer.stop();
kenken0721 4:eabb7a738ff8 731 }
kenken0721 4:eabb7a738ff8 732 }
kenken0721 11:2c61a18f10c3 733 */
kenken0721 7:f1a924244b76 734 void Linecount(void){
kenken0721 7:f1a924244b76 735 if(directmode == RIGHT){
kenken0721 7:f1a924244b76 736 if(linecountcheck == false){
kenken0721 7:f1a924244b76 737 tar_x_dist_2 = x_dist;
kenken0721 7:f1a924244b76 738 linecountcheck = true;
kenken0721 7:f1a924244b76 739 }else{
kenken0721 7:f1a924244b76 740 if((x_dist - tar_x_dist_2) > X_STOP_DIST_3){
kenken0721 7:f1a924244b76 741 crosscount++;
kenken0721 7:f1a924244b76 742 linecountcheck = false;
kenken0721 7:f1a924244b76 743 }
kenken0721 7:f1a924244b76 744 }
kenken0721 7:f1a924244b76 745 }else if(directmode == LEFT){
kenken0721 7:f1a924244b76 746 if(linecountcheck == false){
kenken0721 7:f1a924244b76 747 tar_x_dist_2 = x_dist;
kenken0721 7:f1a924244b76 748 linecountcheck = true;
kenken0721 7:f1a924244b76 749 }else{
kenken0721 7:f1a924244b76 750 if((tar_x_dist_2 - x_dist) >= X_STOP_DIST_2){
kenken0721 7:f1a924244b76 751 crosscount++;
kenken0721 7:f1a924244b76 752 linecountcheck = false;
kenken0721 7:f1a924244b76 753 }
kenken0721 7:f1a924244b76 754 }
kenken0721 7:f1a924244b76 755 }
kenken0721 7:f1a924244b76 756 }
kenken0721 7:f1a924244b76 757
kenken0721 9:0c1fce6d8094 758 void Linecount2(void){
kenken0721 9:0c1fce6d8094 759 if(directmode == LEFT){
kenken0721 9:0c1fce6d8094 760 if(linecountcheck == false){
kenken0721 9:0c1fce6d8094 761 tar_x_dist_3 = x_dist;
kenken0721 9:0c1fce6d8094 762 linecountcheck = true;
kenken0721 9:0c1fce6d8094 763 }else{
kenken0721 9:0c1fce6d8094 764 if((tar_x_dist_3 - x_dist) >= X_STOP_DIST_4){
kenken0721 9:0c1fce6d8094 765 crosscount++;
kenken0721 9:0c1fce6d8094 766 linecountcheck = false;
kenken0721 9:0c1fce6d8094 767 }
kenken0721 9:0c1fce6d8094 768 }
kenken0721 9:0c1fce6d8094 769 }
kenken0721 9:0c1fce6d8094 770 }
kenken0721 2:c5996dd62e9c 771 void LineCheck(int dmode){
kenken0721 2:c5996dd62e9c 772 if(dmode == STRAIGHT){
kenken0721 2:c5996dd62e9c 773 if(linedata_1[1] == 1){
kenken0721 2:c5996dd62e9c 774 ontheline = true;
kenken0721 2:c5996dd62e9c 775 tar_y_dist = y_dist;
kenken0721 2:c5996dd62e9c 776 }
kenken0721 2:c5996dd62e9c 777 if(ontheline == true){
kenken0721 3:aaa2fde4fafd 778 if((y_dist - tar_y_dist) >= Y_STOP_DIST){
kenken0721 2:c5996dd62e9c 779 ontheline = false;
kenken0721 2:c5996dd62e9c 780 crosscount++;
kenken0721 2:c5996dd62e9c 781 }
kenken0721 2:c5996dd62e9c 782 }
kenken0721 2:c5996dd62e9c 783 }else if(dmode == RIGHT){
kenken0721 3:aaa2fde4fafd 784 if(linedata_2[1] == 1){
kenken0721 3:aaa2fde4fafd 785 ontheline = true;
kenken0721 3:aaa2fde4fafd 786 tar_x_dist = x_dist;
kenken0721 3:aaa2fde4fafd 787 }
kenken0721 2:c5996dd62e9c 788 if(ontheline == true){
kenken0721 3:aaa2fde4fafd 789 if((x_dist - tar_x_dist) >= X_STOP_DIST){
kenken0721 2:c5996dd62e9c 790 ontheline = false;
kenken0721 2:c5996dd62e9c 791 crosscount++;
kenken0721 2:c5996dd62e9c 792 }
kenken0721 2:c5996dd62e9c 793 }
kenken0721 2:c5996dd62e9c 794 }else if(dmode == LEFT){
kenken0721 3:aaa2fde4fafd 795 if(linedata_3[1] == 1){
kenken0721 3:aaa2fde4fafd 796 ontheline = true;
kenken0721 3:aaa2fde4fafd 797 tar_x_dist = x_dist;
kenken0721 3:aaa2fde4fafd 798 }
kenken0721 2:c5996dd62e9c 799 if(ontheline == true){
kenken0721 3:aaa2fde4fafd 800 if((tar_x_dist - x_dist) >= X_STOP_DIST){
kenken0721 2:c5996dd62e9c 801 ontheline = false;
kenken0721 2:c5996dd62e9c 802 crosscount++;
kenken0721 2:c5996dd62e9c 803 }
kenken0721 2:c5996dd62e9c 804 }
kenken0721 2:c5996dd62e9c 805 }
kenken0721 2:c5996dd62e9c 806 }
kenken0721 0:f6828b914b1c 807
kenken0721 2:c5996dd62e9c 808 void linecheck(char *buff, int data[2]){
kenken0721 0:f6828b914b1c 809 if(buff[0] == 24){
kenken0721 2:c5996dd62e9c 810 data[0] = 0;
kenken0721 2:c5996dd62e9c 811 data[1] = 0;
kenken0721 0:f6828b914b1c 812 }else if(buff[0] == 56){
kenken0721 2:c5996dd62e9c 813 data[0] = 1;
kenken0721 2:c5996dd62e9c 814 data[1] = 0;
kenken0721 0:f6828b914b1c 815 }else if(buff[0] == 48){
kenken0721 2:c5996dd62e9c 816 data[0] = 2;
kenken0721 2:c5996dd62e9c 817 data[1] = 0;
kenken0721 0:f6828b914b1c 818 }else if(buff[0] == 112){
kenken0721 2:c5996dd62e9c 819 data[0] = 3;
kenken0721 2:c5996dd62e9c 820 data[1] = 0;
kenken0721 0:f6828b914b1c 821 }else if(buff[0] == 96){
kenken0721 2:c5996dd62e9c 822 data[0] = 4;
kenken0721 2:c5996dd62e9c 823 data[1] = 0;
kenken0721 0:f6828b914b1c 824 }else if(buff[0] == 224){
kenken0721 2:c5996dd62e9c 825 data[0] = 5;
kenken0721 2:c5996dd62e9c 826 data[1] = 0;
kenken0721 0:f6828b914b1c 827 }else if(buff[0] == 192){
kenken0721 2:c5996dd62e9c 828 data[0] = 6;
kenken0721 2:c5996dd62e9c 829 data[1] = 0;
kenken0721 0:f6828b914b1c 830 }else if(buff[0] == 128){
kenken0721 2:c5996dd62e9c 831 data[0] = 7;
kenken0721 2:c5996dd62e9c 832 data[1] = 0;
kenken0721 0:f6828b914b1c 833 }else if(buff[0] == 28){
kenken0721 2:c5996dd62e9c 834 data[0] = -1;
kenken0721 2:c5996dd62e9c 835 data[1] = 0;
kenken0721 0:f6828b914b1c 836 }else if(buff[0] == 12){
kenken0721 2:c5996dd62e9c 837 data[0] = -2;
kenken0721 2:c5996dd62e9c 838 data[1] = 0;
kenken0721 0:f6828b914b1c 839 }else if(buff[0] == 14){
kenken0721 2:c5996dd62e9c 840 data[0] = -3;
kenken0721 2:c5996dd62e9c 841 data[1] = 0;
kenken0721 0:f6828b914b1c 842 }else if(buff[0] == 6){
kenken0721 2:c5996dd62e9c 843 data[0] = -4;
kenken0721 2:c5996dd62e9c 844 data[1] = 0;
kenken0721 0:f6828b914b1c 845 }else if(buff[0] == 7){
kenken0721 2:c5996dd62e9c 846 data[0] = -5;
kenken0721 2:c5996dd62e9c 847 data[1] = 0;
kenken0721 0:f6828b914b1c 848 }else if(buff[0] == 3){
kenken0721 2:c5996dd62e9c 849 data[0] = -6;
kenken0721 2:c5996dd62e9c 850 data[1] = 0;
kenken0721 0:f6828b914b1c 851 }else if(buff[0] == 1){
kenken0721 2:c5996dd62e9c 852 data[0] = -7;
kenken0721 2:c5996dd62e9c 853 data[1] = 0;
kenken0721 2:c5996dd62e9c 854 }else if(buff[0] == 255){
kenken0721 2:c5996dd62e9c 855 data[0] = prelinedata;
kenken0721 2:c5996dd62e9c 856 data[1] = 1;
kenken0721 2:c5996dd62e9c 857 }else if(buff[0] == 0){
kenken0721 2:c5996dd62e9c 858 data[0] = prelinedata;
kenken0721 2:c5996dd62e9c 859 data[1] = 0;
kenken0721 0:f6828b914b1c 860 }else{
kenken0721 2:c5996dd62e9c 861 data[0] = prelinedata;
kenken0721 2:c5996dd62e9c 862 data[1] = 0;
kenken0721 0:f6828b914b1c 863 }
kenken0721 2:c5996dd62e9c 864 prelinedata = data[0];
kenken0721 3:aaa2fde4fafd 865 }