Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: main.cpp
- Revision:
- 26:81346a21d301
- Parent:
- 25:ce789ea15628
- Child:
- 27:4f2fc7172b31
--- a/main.cpp Wed Oct 02 02:13:36 2019 +0000 +++ b/main.cpp Tue Oct 08 02:03:01 2019 +0000 @@ -12,9 +12,6 @@ #include "QEI.h" #include "PID.h" -//直進補正の為の前後・左右の回転差の許容値 -#define wheel_difference 100 - //終了phase #define FINAL_PHASE 50 @@ -196,6 +193,8 @@ init(); init_send(); + //後で消せ俺さん!! + //phase = 50; //起動時にゾーンを読んでからループに入る(試合中誤ってスイッチ押すのを防止) while(1) { @@ -223,6 +222,12 @@ i2c.write(0x30, servo_data, 1); } + /* + if(start_switch == 1) { + phase = 37; + } + */ + //青ゾーン if(zone == BLUE) { GREEN_LED = 1; @@ -255,13 +260,13 @@ i2c.write(0x30, servo_data, 1); break; - //0.5秒停止 + //1秒停止 case 2: stop(); servo_data[0] = 0x04; i2c.write(0x30, servo_data, 1); counter.start(); - if(counter.read() > 0.5f) { + if(counter.read() > 1.0f) { phase = 3; wheel_reset(); } @@ -271,7 +276,7 @@ case 3: counter.reset(); front(800); - if((y_pulse1 > 800) || (y_pulse2 > 800)) { + if((y_pulse1 > 700) || (y_pulse2 > 700)) { phase = 4; } if(front_limit == 3) { @@ -291,8 +296,17 @@ //回収アーム引っ込める case 5: - counter.reset(); - kaisyu_hiku(arm_pulse, 6); + USR_LED3 = 1; + //kaisyu_hiku(arm_pulse, 6); + + if(kaisyu_mae_limit == 0) { + arm_motor[0] = 0x4C; + } + else if(kaisyu_mae_limit == 1) { + arm_motor[0] = 0x80; + phase = 6; + } + break; //0.5秒停止 @@ -638,71 +652,32 @@ stop(); counter.start(); if(counter.read() > 1.0f) { - phase = 38; + phase = 37; wheel_reset(); } else { right_arm_data[0] = 0xFF; - left_arm_data[0] = 0xFF; + left_arm_data[0] = 0x00; i2c.write(0x22, right_arm_data, 1); i2c.write(0x24, left_arm_data, 1); wait_us(20); } break; - /* - //カウンターリセット + //アームアップ case 37: counter.reset(); - counter.start(); - arm_up(39); - phase = 38; - break; - */ - - //アームアップ - case 38: - counter.reset(); stop(); - arm_up(39); - //1秒間リミットを読まずに無条件で上昇(チャタリングによる誤作動防止) - /* - if(counter.read() < 1.0f) { - right_arm_data[0] = 0xFF; - left_arm_data[0] = 0xFF; - i2c.write(0x22, right_arm_data, 1); - i2c.write(0x24, left_arm_data, 1); - wait_us(20); - } else { - arm_up(39); - } - */ + arm_up(38); break; //カウンターリセット - case 39: + case 38: counter.reset(); - //phase = 40; - phase = 42; + phase = 39; break; - //1秒停止 - case 40: - stop(); - counter.start(); - if(counter.read() > 1.0f) { - phase = 41; - wheel_reset(); - } - break; - - //カウンターリセット - case 41: - counter.reset(); - phase = 42; - break; - //シーツを掛ける - case 42: + case 39: counter.start(); //1秒間ファン送風 @@ -774,13 +749,13 @@ i2c.write(0x30, servo_data, 1); break; - //0.5秒停止 + //1.0秒停止 case 2: stop(); servo_data[0] = 0x04; i2c.write(0x30, servo_data, 1); counter.start(); - if(counter.read() > 0.5f) { + if(counter.read() > 1.0f) { phase = 3; wheel_reset(); } @@ -807,8 +782,17 @@ //回収アーム引っ込める case 5: - counter.reset(); + USR_LED3 = 1; kaisyu_hiku(arm_pulse, 6); + /* + if(kaisyu_mae_limit == 0) { + arm_motor[0] = 0x4C; + } + else if(kaisyu_mae_limit == 1) { + arm_motor[0] = 0x80; + phase = 6; + } + */ break; //左移動 @@ -833,9 +817,8 @@ //右旋回(180°) case 8: counter.reset(); - //turn_right(975); - turn_right(960); - if(sum_pulse > 960) { + turn_right(940); + if(sum_pulse > 940) { phase = 9; } break; @@ -1096,8 +1079,8 @@ //掛けるところまで前進 case 30: counter.reset(); - front(10600); - if((y_pulse1 > 10600) || (y_pulse2 > 10600)) { + front(9500); + if((y_pulse1 > 9500) || (y_pulse2 > 9500)) { phase = 31; counter.start(); } @@ -1129,6 +1112,12 @@ if(counter.read() > 1.0f) { phase = 34; wheel_reset(); + } else { + right_arm_data[0] = 0xFF; + left_arm_data[0] = 0x00; + i2c.write(0x22, right_arm_data, 1); + i2c.write(0x24, left_arm_data, 1); + wait_us(20); } break; @@ -1141,17 +1130,9 @@ //アームアップ case 35: + counter.reset(); stop(); - //1秒間リミットを読まずに無条件で上昇(チャタリングによる誤作動防止) - if(counter.read() < 1.0f) { - right_arm_data[0] = 0xFF; - left_arm_data[0] = 0xFF; - i2c.write(0x22, right_arm_data, 1); - i2c.write(0x24, left_arm_data, 1); - wait_us(20); - } else { - arm_up(36); - } + arm_up(36); break; //カウンターリセット @@ -1159,26 +1140,9 @@ counter.reset(); phase = 37; break; - - //1秒停止 - case 37: - stop(); - counter.start(); - if(counter.read() > 1.0f) { - phase = 38; - wheel_reset(); - } - break; - - //カウンターリセット - case 38: - counter.reset(); - counter.start(); - phase = 39; - break; //シーツを掛ける - case 39: + case 37: counter.start(); //1秒間ファン送風 @@ -1230,6 +1194,7 @@ zone_switch.mode(PullDown); YELLOW_LED = 0; + USR_LED3 = 0; USR_LED4 = 0; //非常停止関連 pic.baud(19200); @@ -1282,7 +1247,7 @@ } void print_pulses(void) { - pc.printf("%d\n\r", arm_pulse); + //pc.printf("p: %d, kp: %d, pulse: %d\n\r", phase, kaisyu_phase, arm_pulse); //pc.printf("p: %d, k_p: %d, pulse: %d\n\r", phase, kaisyu_phase, arm_pulse); //pc.printf("X1: %d, X2: %d, Y1: %d, Y2: %d, sum: %d\n\r", abs(x_pulse1), x_pulse2, abs(y_pulse1), y_pulse2, sum_pulse); //pc.printf("%d, %d, %d, %d, %d, %d, %d, %d, %d\n\r", front_limit, back_limit, right_limit, kaisyu_mae_limit, kaisyu_usiro_limit, @@ -1769,11 +1734,11 @@ //両腕、上限リミットが押されてなかったら上昇 if((right_arm_upper_limit) == 0 && (left_arm_upper_limit == 0)) { - right_arm_data[0] = 0xFF; left_arm_data[0] = 0xFF; + right_arm_data[0] = 0xFF; left_arm_data[0] = 0x00; } //右腕のみリミットが押されたら左腕のみ上昇 else if((right_arm_upper_limit) == 1 && (left_arm_upper_limit == 0)) { - right_arm_data[0] = 0x80; left_arm_data[0] = 0xFF; + right_arm_data[0] = 0x80; left_arm_data[0] = 0x00; } //左腕のみリミットが押されたら右腕のみ上昇 else if((right_arm_upper_limit) == 0 && (left_arm_upper_limit == 1)) {