diff --git a/MDK-ARM/.vscode/keil-assistant.log b/MDK-ARM/.vscode/keil-assistant.log index 7ded289..bb6836e 100644 --- a/MDK-ARM/.vscode/keil-assistant.log +++ b/MDK-ARM/.vscode/keil-assistant.log @@ -74,3 +74,7 @@ [info] Log at : 2025/6/25|19:23:57|GMT+0800 +[info] Log at : 2025/6/26|03:33:46|GMT+0800 + +[info] Log at : 2025/6/26|15:46:24|GMT+0800 + diff --git a/MDK-ARM/.vscode/uv4.log b/MDK-ARM/.vscode/uv4.log index f22d47c..aa9ddf2 100644 --- a/MDK-ARM/.vscode/uv4.log +++ b/MDK-ARM/.vscode/uv4.log @@ -1,10 +1,8 @@ *** Using Compiler 'V5.06 update 7 (build 960)', folder: 'D:\keil\ARM\ARMCC\Bin' Build target 'R1' -compiling shootTask.cpp... -compiling shoot.cpp... compiling ball.cpp... linking... -Program Size: Code=31644 RO-data=1832 RW-data=268 ZI-data=32252 +Program Size: Code=31096 RO-data=1832 RW-data=276 ZI-data=32252 FromELF: creating hex file... "R1\R1.axf" - 0 Error(s), 0 Warning(s). -Build Time Elapsed: 00:00:06 +Build Time Elapsed: 00:00:04 diff --git a/MDK-ARM/.vscode/uv4.log.lock b/MDK-ARM/.vscode/uv4.log.lock index ad9a215..c661085 100644 --- a/MDK-ARM/.vscode/uv4.log.lock +++ b/MDK-ARM/.vscode/uv4.log.lock @@ -1 +1 @@ -2025/6/26 3:22:31 \ No newline at end of file +2025/6/26 4:03:58 \ No newline at end of file diff --git a/User/bsp/TopDefine.h b/User/bsp/TopDefine.h index 0f5be42..f3d472a 100644 --- a/User/bsp/TopDefine.h +++ b/User/bsp/TopDefine.h @@ -16,7 +16,7 @@ #endif -#define ONE_CONTROL 1 +#define ONE_CONTROL 0 diff --git a/User/bsp/gpio_it.c b/User/bsp/gpio_it.c index 9d81971..b191800 100644 --- a/User/bsp/gpio_it.c +++ b/User/bsp/gpio_it.c @@ -32,41 +32,41 @@ int8_t BSP_GPIO_RegisterCallback(uint16_t pin, void (*callback)(void)) { return BSP_OK; } -int8_t BSP_GPIO_EnableIRQ(uint16_t pin) { - switch (pin) { +// int8_t BSP_GPIO_EnableIRQ(uint16_t pin) { +// switch (pin) { - // case USER_KEY_Pin: - // HAL_NVIC_EnableIRQ(USER_KEY_EXTI_IRQn); - // break; +// case USER_KEY_Pin: +// HAL_NVIC_EnableIRQ(USER_KEY_EXTI_IRQn); +// break; - /* - case XXX_Pin: - HAL_NVIC_EnableIRQ(XXX_IRQn); - break; - */ +// /* +// case XXX_Pin: +// HAL_NVIC_EnableIRQ(XXX_IRQn); +// break; +// */ - default: - return BSP_ERR; - } - return BSP_OK; -} +// default: +// return BSP_ERR; +// } +// return BSP_OK; +// } -int8_t BSP_GPIO_DisableIRQ(uint16_t pin) { - switch (pin) { +// int8_t BSP_GPIO_DisableIRQ(uint16_t pin) { +// switch (pin) { - // case USER_KEY_Pin: - // HAL_NVIC_DisableIRQ(USER_KEY_EXTI_IRQn); - // break; +// // case USER_KEY_Pin: +// // HAL_NVIC_DisableIRQ(USER_KEY_EXTI_IRQn); +// // break; - /* - case XXX_Pin: - HAL_NVIC_EnableIRQ(XXX_IRQn); - break; - */ +// /* +// case XXX_Pin: +// HAL_NVIC_EnableIRQ(XXX_IRQn); +// break; +// */ - default: - return BSP_ERR; - } - return BSP_OK; -} +// default: +// return BSP_ERR; +// } +// return BSP_OK; +// } diff --git a/User/device/detect.c b/User/device/detect.c index 3c48a2b..66dee52 100644 --- a/User/device/detect.c +++ b/User/device/detect.c @@ -27,12 +27,12 @@ void detect_init(void) BSP_GPIO_RegisterCallback(KEY_Pin, detect_exit); BSP_GPIO_RegisterCallback(BALL_Pin, detect_ball); - // 启用按键中断 - if (BSP_GPIO_EnableIRQ(KEY_Pin) != BSP_OK) { - // 错误处理 - } - if (BSP_GPIO_EnableIRQ(BALL_Pin) != BSP_OK) { - // 错误处理 - } + // // 启用按键中断 + // if (BSP_GPIO_EnableIRQ(KEY_Pin) != BSP_OK) { + // // 错误处理 + // } + // if (BSP_GPIO_EnableIRQ(BALL_Pin) != BSP_OK) { + // // 错误处理 + // } } diff --git a/User/module/ball.cpp b/User/module/ball.cpp index 534d011..5561f9b 100644 --- a/User/module/ball.cpp +++ b/User/module/ball.cpp @@ -49,6 +49,9 @@ Ball ::Ball() // G键 sw[6]👆 200 中 1000 👇1800 // sw[5] 👆 200 👇1800 //左旋 sw[7] 200 --1800 + +int last_sw5 = 1800; // 上一次拨杆状态 + void Ball::rc_mode() { if(rc_ctrl.sw[6]==200) @@ -73,14 +76,17 @@ void Ball::rc_mode() extern_key=OUT; } - if(rc_ctrl.sw[5]==1800) + if (rc_ctrl.sw[5] == 200 && last_sw5 == 1800) // 只在1800->200的瞬间触发 { - ready_key=SIDE; + rc_key = DOWN2; } - if(rc_ctrl.sw[5]==200) + else { - ready_key=0; //默认不准备 + rc_key = 0; // 其他情况不触发 } + last_sw5 = rc_ctrl.sw[5]; + + } void Ball::Send_control() @@ -119,30 +125,8 @@ void Ball::ball_control() Move_Extend(); - switch (rc_key){ - case MIDDLE2: - HAL_GPIO_WritePin(CLOSE_GPIO_Port, CLOSE_Pin, GPIO_PIN_RESET); //确保爪气缸关闭 - HAL_GPIO_WritePin(DOWN_GPIO_Port, DOWN_Pin, GPIO_PIN_RESET); // 确保下气缸关闭 - if (currentState1 == BALL_FINISH) - { - currentState1 = BALL_IDLE; - } - else { - currentState1 = BALL_IDLE; // 默认回到空闲状态 - } - break; - case UP2: - ballDown(); - break; - - case DOWN2: - ballHadling(); - //test_Handling(); - - break; - - } + ballHadling_two(); // 执行运球处理 Send_control(); @@ -162,8 +146,6 @@ void Ball::ballHadling(void) HAL_GPIO_WritePin(DOWN_GPIO_Port, DOWN_Pin, GPIO_PIN_RESET); // 确保下气缸关闭 if (rc_key == DOWN2) // 检测按键是否被按下 { - - currentState1 = BALL_FORWARD; } break; @@ -220,6 +202,75 @@ void Ball::ballHadling(void) } + int runCount = 0; // 运球次数计数 + +void Ball::ballHadling_two(void) +{ + switch (currentState1) + { + case BALL_IDLE: + HAL_GPIO_WritePin(CLOSE_GPIO_Port, CLOSE_Pin, GPIO_PIN_RESET); //确保爪气缸关闭 + HAL_GPIO_WritePin(DOWN_GPIO_Port, DOWN_Pin, GPIO_PIN_RESET); //确保下气缸关闭 + if (rc_key == DOWN2) + { + runCount = 0; // 每次拨动重新计数 + currentState1 = BALL_FORWARD; + } + break; + + case BALL_FORWARD: + HAL_GPIO_WritePin(CLOSE_GPIO_Port, CLOSE_Pin, GPIO_PIN_SET); // 打开气缸爪子 + osDelay(5); + HAL_GPIO_WritePin(DOWN_GPIO_Port, DOWN_Pin, GPIO_PIN_SET); // 打开下气缸 + currentState1 = BALL_DROP; + break; + + case BALL_DROP: + osDelay(100); + HAL_GPIO_WritePin(DOWN_GPIO_Port, DOWN_Pin, GPIO_PIN_RESET); // 关闭下气缸 + if (ball_state == 1 && last_ball_state == 0) // 球离开 + { + currentState1 = BALL_FLAG; + } + last_ball_state = ball_state; + break; + + case BALL_FLAG: + osDelay(10); + if (ball_state == 0 && last_ball_state == 1) // 球弹回 + { + currentState1 = BALL_CLOSE; + } + last_ball_state = ball_state; + break; + + case BALL_CLOSE: + osDelay(25); + HAL_GPIO_WritePin(CLOSE_GPIO_Port, CLOSE_Pin, GPIO_PIN_RESET); // 闭合气缸爪子 + currentState1 = BALL_FINISH; + break; + + case BALL_FINISH: + osDelay(50); + HAL_GPIO_WritePin(CLOSE_GPIO_Port, CLOSE_Pin, GPIO_PIN_RESET); // 确保气缸爪子闭合 + HAL_GPIO_WritePin(DOWN_GPIO_Port, DOWN_Pin, GPIO_PIN_RESET); // 确保下气缸关闭 + runCount++; + if (runCount < 2) + { + currentState1 = BALL_FORWARD; // 继续下一次运球 + } + else + { + currentState1 = BALL_IDLE; // 完成两次,回到空闲 + } + break; + + default: + currentState1 = BALL_IDLE; + break; + } +} + #endif diff --git a/User/module/ball.hpp b/User/module/ball.hpp index f92b606..85cdad1 100644 --- a/User/module/ball.hpp +++ b/User/module/ball.hpp @@ -55,7 +55,7 @@ public: void Move_Extend(void); void Idle_control(void); void rc_mode(void); - void test_Handling(void); + void ballHadling_two(void); void ball_control(void); BallState_t currentState1; // 运球任务状态机