diff --git a/MDK-ARM/.vscode/c_cpp_properties.json b/MDK-ARM/.vscode/c_cpp_properties.json index 3a004ed..851fd02 100644 --- a/MDK-ARM/.vscode/c_cpp_properties.json +++ b/MDK-ARM/.vscode/c_cpp_properties.json @@ -3,26 +3,26 @@ { "name": "R1", "includePath": [ - "d:\\Desktop\\yunqiu\\R1_up\\Core\\Inc", - "d:\\Desktop\\yunqiu\\R1_up\\Drivers\\STM32F4xx_HAL_Driver\\Inc", - "d:\\Desktop\\yunqiu\\R1_up\\Drivers\\STM32F4xx_HAL_Driver\\Inc\\Legacy", - "d:\\Desktop\\yunqiu\\R1_up\\Middlewares\\Third_Party\\FreeRTOS\\Source\\include", - "d:\\Desktop\\yunqiu\\R1_up\\Middlewares\\Third_Party\\FreeRTOS\\Source\\CMSIS_RTOS_V2", - "d:\\Desktop\\yunqiu\\R1_up\\Middlewares\\Third_Party\\FreeRTOS\\Source\\portable\\RVDS\\ARM_CM4F", - "d:\\Desktop\\yunqiu\\R1_up\\Drivers\\CMSIS\\Device\\ST\\STM32F4xx\\Include", - "d:\\Desktop\\yunqiu\\R1_up\\Drivers\\CMSIS\\Include", - "d:\\Desktop\\yunqiu\\R1_up\\User\\bsp", - "d:\\Desktop\\yunqiu\\R1_up\\User\\module", - "d:\\Desktop\\yunqiu\\R1_up\\User\\task", - "d:\\Desktop\\yunqiu\\R1_up\\User\\lib", - "d:\\Desktop\\yunqiu\\R1_up\\User\\device", + "d:\\Desktop\\r1\\运球赛\\R1_up\\Core\\Inc", + "d:\\Desktop\\r1\\运球赛\\R1_up\\Drivers\\STM32F4xx_HAL_Driver\\Inc", + "d:\\Desktop\\r1\\运球赛\\R1_up\\Drivers\\STM32F4xx_HAL_Driver\\Inc\\Legacy", + "d:\\Desktop\\r1\\运球赛\\R1_up\\Middlewares\\Third_Party\\FreeRTOS\\Source\\include", + "d:\\Desktop\\r1\\运球赛\\R1_up\\Middlewares\\Third_Party\\FreeRTOS\\Source\\CMSIS_RTOS_V2", + "d:\\Desktop\\r1\\运球赛\\R1_up\\Middlewares\\Third_Party\\FreeRTOS\\Source\\portable\\RVDS\\ARM_CM4F", + "d:\\Desktop\\r1\\运球赛\\R1_up\\Drivers\\CMSIS\\Device\\ST\\STM32F4xx\\Include", + "d:\\Desktop\\r1\\运球赛\\R1_up\\Drivers\\CMSIS\\Include", + "d:\\Desktop\\r1\\运球赛\\R1_up\\User\\bsp", + "d:\\Desktop\\r1\\运球赛\\R1_up\\User\\module", + "d:\\Desktop\\r1\\运球赛\\R1_up\\User\\task", + "d:\\Desktop\\r1\\运球赛\\R1_up\\User\\lib", + "d:\\Desktop\\r1\\运球赛\\R1_up\\User\\device", "D:\\keil\\ARM\\ARMCC\\include", "D:\\keil\\ARM\\ARMCC\\include\\rw", - "d:\\Desktop\\yunqiu\\R1_up\\MDK-ARM", - "d:\\Desktop\\yunqiu\\R1_up\\Core\\Src", - "d:\\Desktop\\yunqiu\\R1_up\\Drivers\\STM32F4xx_HAL_Driver\\Src", - "d:\\Desktop\\yunqiu\\R1_up\\Middlewares\\Third_Party\\FreeRTOS\\Source", - "d:\\Desktop\\yunqiu\\R1_up\\Middlewares\\Third_Party\\FreeRTOS\\Source\\portable\\MemMang" + "d:\\Desktop\\r1\\运球赛\\R1_up\\MDK-ARM", + "d:\\Desktop\\r1\\运球赛\\R1_up\\Core\\Src", + "d:\\Desktop\\r1\\运球赛\\R1_up\\Drivers\\STM32F4xx_HAL_Driver\\Src", + "d:\\Desktop\\r1\\运球赛\\R1_up\\Middlewares\\Third_Party\\FreeRTOS\\Source", + "d:\\Desktop\\r1\\运球赛\\R1_up\\Middlewares\\Third_Party\\FreeRTOS\\Source\\portable\\MemMang" ], "defines": [ "USE_HAL_DRIVER", diff --git a/MDK-ARM/.vscode/keil-assistant.log b/MDK-ARM/.vscode/keil-assistant.log index e94b1fa..6af3257 100644 --- a/MDK-ARM/.vscode/keil-assistant.log +++ b/MDK-ARM/.vscode/keil-assistant.log @@ -96,3 +96,7 @@ [info] Log at : 2025/7/1|14:59:17|GMT+0800 +[info] Log at : 2025/7/2|14:47:50|GMT+0800 + +[info] Log at : 2025/7/2|19:49:16|GMT+0800 + diff --git a/MDK-ARM/.vscode/uv4.log b/MDK-ARM/.vscode/uv4.log index cb7385e..09d93f2 100644 --- a/MDK-ARM/.vscode/uv4.log +++ b/MDK-ARM/.vscode/uv4.log @@ -2,7 +2,7 @@ Build target 'R1' compiling ball.cpp... linking... -Program Size: Code=28876 RO-data=1832 RW-data=276 ZI-data=32252 +Program Size: Code=29032 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 diff --git a/MDK-ARM/.vscode/uv4.log.lock b/MDK-ARM/.vscode/uv4.log.lock index fffa201..b85248b 100644 --- a/MDK-ARM/.vscode/uv4.log.lock +++ b/MDK-ARM/.vscode/uv4.log.lock @@ -1 +1 @@ -2025/7/1 0:14:15 \ No newline at end of file +2025/7/2 19:50:14 \ No newline at end of file diff --git a/User/module/ball.cpp b/User/module/ball.cpp index e6c5fba..35f9c0a 100644 --- a/User/module/ball.cpp +++ b/User/module/ball.cpp @@ -6,75 +6,79 @@ #include "user_math.h" #include "shoot.hpp" + +#define HANGDING_TWO 0 // 是否使用两次运球 + extern RC_ctrl_t rc_ctrl; extern int ball_exit; //伸缩 -#define I_ANGLE 147 -#define O_ANGLE 187 -#define WAIT_POS 165 +//外死点168 外163 中150 内127 限位124.8 +#define I_ANGLE 127 +#define O_ANGLE 163 +#define WAIT_POS 150 +#define IN 124.8 +#define OUT 168 -//PE11 气缸 +// PE11 气缸 Ball ::Ball() -{ - detect_init(); +{ + detect_init(); - //小米电机 - feedback=get_CyberGear_point(); + // 小米电机 + feedback = get_CyberGear_point(); - //小米电机初始化 - xiaomi.position = I_ANGLE; // - xiaomi.speed = 25; // - xiaomi.K_P = 80; // 位置增益 - xiaomi.K_D =20; // 位置阻尼 - xiaomi.K_C = 12 ; // 力矩 - xiaomi.Pmax =1; //好像没啥用 + // 小米电机初始化 + xiaomi.position = I_ANGLE; // + xiaomi.speed = 25; // + xiaomi.K_P = 80; // 位置增益 + xiaomi.K_D = 20; // 位置阻尼 + xiaomi.K_C = 12; // 力矩 + xiaomi.Pmax = 1; // 好像没啥用 // //小米电机初始化 - // xiaomi.position = 0; // - // xiaomi.speed = 0; // - // xiaomi.K_P = 0; // - // xiaomi.K_D =0; // - // xiaomi.K_C = 0 ; + // xiaomi.position = 0; // + // xiaomi.speed = 0; // + // xiaomi.K_P = 0; // + // xiaomi.K_D =0; // + // xiaomi.K_C = 0 ; // xiaomi.Pmax =0; - //状态机状态初始化 - currentState1= BALL_IDLE; - + // 状态机状态初始化 + currentState1 = BALL_IDLE; } - -// E键 sw[1] 👆 200 shoot 中 1000 stop sw[2]👇1800 +// E键 sw[1] 👆 200 shoot 中 1000 stop sw[2]👇1800 // G键 sw[6]👆 200 中 1000 👇1800 // sw[5] 👆 200 👇1800 -// H键 sw[6] 👆200 👇1800 -//左旋 sw[7] 200 --1800 +// H键 sw[6] 👆200 👇1800 +// 左旋 sw[7] 200 --1800 int last_sw5 = 1800; // 上一次拨杆状态 void Ball::rc_mode() { - if(rc_ctrl.sw[6]==200) + if (rc_ctrl.sw[6] == 200) { - rc_key=UP2; + rc_key = UP2; } - if(rc_ctrl.sw[6]==1000) + if (rc_ctrl.sw[6] == 1000) { - rc_key=MIDDLE2; + rc_key = MIDDLE2; } - if(rc_ctrl.sw[6]==1800) + if (rc_ctrl.sw[6] == 1800) { - rc_key=DOWN2; + rc_key = DOWN2; } - if(rc_ctrl.sw[5]==200) + if (rc_ctrl.sw[5] == 200) { - extern_key=IN; + extern_key = IN; } - if(rc_ctrl.sw[5]==1800) + if (rc_ctrl.sw[5] == 1800) { - extern_key=OUT; + extern_key = OUT; } // if (rc_ctrl.sw[5] == 200 && last_sw5 == 1800) // 只在1800->200的瞬间触发 @@ -86,120 +90,68 @@ void Ball::rc_mode() // rc_key = 0; // 其他情况不触发 // } // last_sw5 = rc_ctrl.sw[5]; - - } void Ball::Send_control() { - - CAN_XiaoMi(1,&xiaomi,&hcan2); - osDelay(1); + CAN_XiaoMi(1, &xiaomi, &hcan2); + osDelay(1); } -#if ONE_CONTROL==0 +#if ONE_CONTROL == 0 void Ball::ballDown(void) { HAL_GPIO_WritePin(CLOSE_GPIO_Port, CLOSE_Pin, GPIO_PIN_SET); // 打开气缸爪子 HAL_GPIO_WritePin(DOWN_GPIO_Port, DOWN_Pin, GPIO_PIN_RESET); // 确保下气缸关闭 - } void Ball::Move_Extend() { - if(extern_key==IN) + if (extern_key == IN) { xiaomi.position = I_ANGLE; } - if(extern_key==OUT) + if (extern_key == OUT) { xiaomi.position = O_ANGLE; } } -// void Ball::ball_control() -// { -// ball_state = HAL_GPIO_ReadPin(up_ball_GPIO_Port, up_ball_Pin); // 读取光电状态(有球 0,无球 1) -// //ball_state = HAL_GPIO_ReadPin(TEST_GPIO_Port, TEST_Pin); // 读取光电状态(有球 0,无球 1) +int runCount = 0; // 运球次数计数 +int last_ball_state = 0; // 上一次的光电状态 +int step = 0; // 0:持球 1:击球 2:反弹 3:完全离开 -// Move_Extend(); +#if HANGDING_TWO == 0 -// 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(); -// //Close(); -// 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 DOWN2: - -// ballHadling(); - - -// break; - -// } - -// Send_control(); - -// } - - //int ball_state = 0; - int runCount = 0; // 运球次数计数 - int last_ball_state = 0; // 上一次的光电状态 - int step = 0; // 0:持球 1:击球 2:反弹 3:完全离开 - - void Ball::ball_control() +void Ball::ball_control() { ball_state = HAL_GPIO_ReadPin(up_ball_GPIO_Port, up_ball_Pin); // 读取光电状态(有球 0,无球 1) - Move_Extend(); + Move_Extend(); 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) // 检测按键是否被按下 + 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); + osDelay(5); HAL_GPIO_WritePin(DOWN_GPIO_Port, DOWN_Pin, GPIO_PIN_SET); // 打开下气缸 - currentState1 = BALL_DROP; // 切换到球下落状态 + currentState1 = BALL_DROP; // 切换到球下落状态 break; - case BALL_DROP: - osDelay(100); // 延时 100ms + case BALL_DROP: + osDelay(100); // 延时 100ms HAL_GPIO_WritePin(DOWN_GPIO_Port, DOWN_Pin, GPIO_PIN_RESET); // 关闭下气缸 // 一直检测有球(ball_state == 0),等球离开 if (ball_state == 1 && last_ball_state == 0) // 球离开 @@ -209,7 +161,7 @@ void Ball::Move_Extend() last_ball_state = ball_state; break; - case BALL_FLAG: + case BALL_FLAG: osDelay(10); // 延时 50ms // 等待球弹回再次检测到球 if (ball_state == 0 && last_ball_state == 1) // 球弹回 @@ -220,25 +172,95 @@ void Ball::Move_Extend() break; case BALL_CLOSE: - osDelay(100); - HAL_GPIO_WritePin(CLOSE_GPIO_Port, CLOSE_Pin, GPIO_PIN_RESET); // 闭合气缸爪子 - currentState1 = BALL_FINISH; // 切换到反转状态 + osDelay(100); + HAL_GPIO_WritePin(CLOSE_GPIO_Port, CLOSE_Pin, GPIO_PIN_RESET); // 闭合气缸爪子 + currentState1 = BALL_FINISH; // 切换到反转状态 break; case BALL_FINISH: - osDelay(200); // 延时 50ms + osDelay(50); // 延时 50ms HAL_GPIO_WritePin(CLOSE_GPIO_Port, CLOSE_Pin, GPIO_PIN_RESET); // 确保气缸爪子闭合 - HAL_GPIO_WritePin(DOWN_GPIO_Port, DOWN_Pin, GPIO_PIN_RESET); // 确保下气缸关闭 + HAL_GPIO_WritePin(DOWN_GPIO_Port, DOWN_Pin, GPIO_PIN_RESET); // 确保下气缸关闭 + + currentState1 = BALL_IDLE; // 回到空闲状态 + + break; + default: + currentState1 = BALL_IDLE; // 默认回到空闲状态 + break; + } + + Send_control(); +} + +#else + +void Ball::ball_control() +{ + ball_state = HAL_GPIO_ReadPin(up_ball_GPIO_Port, up_ball_Pin); // 读取光电状态(有球 0,无球 1) + + Move_Extend(); + + 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); // 延时 100ms + HAL_GPIO_WritePin(DOWN_GPIO_Port, DOWN_Pin, GPIO_PIN_RESET); // 关闭下气缸 + // 一直检测有球(ball_state == 0),等球离开 + if (ball_state == 1 && last_ball_state == 0) // 球离开 + { + currentState1 = BALL_FLAG; + } + last_ball_state = ball_state; + break; + + case BALL_FLAG: + osDelay(10); // 延时 50ms + // 等待球弹回再次检测到球 + if (ball_state == 0 && last_ball_state == 1) // 球弹回 + { + currentState1 = BALL_CLOSE; + } + last_ball_state = ball_state; + break; + + case BALL_CLOSE: + osDelay(100); + HAL_GPIO_WritePin(CLOSE_GPIO_Port, CLOSE_Pin, GPIO_PIN_RESET); // 闭合气缸爪子 + currentState1 = BALL_FINISH; // 切换到反转状态 + break; + + case BALL_FINISH: + osDelay(200); // 延时 50ms + HAL_GPIO_WritePin(CLOSE_GPIO_Port, CLOSE_Pin, GPIO_PIN_RESET); // 确保气缸爪子闭合 + HAL_GPIO_WritePin(DOWN_GPIO_Port, DOWN_Pin, GPIO_PIN_RESET); // 确保下气缸关闭 runCount++; - osDelay(200); // 延时 50ms + osDelay(200); // 延时 50ms if (runCount < 2) { currentState1 = BALL_FORWARD; // 继续下一次运球 - osDelay(50); + osDelay(50); } else { - currentState1 = BALL_IDLE; // 完成两次,回到空闲 + currentState1 = BALL_IDLE; // 完成两次,回到空闲 } break; @@ -247,85 +269,16 @@ void Ball::Move_Extend() break; } - - Send_control(); - + Send_control(); } -// void Ball::ball_control() -// { -// ball_state = HAL_GPIO_ReadPin(up_ball_GPIO_Port, up_ball_Pin); // 读取光电状态(有球 0,无球 1) - -// Move_Extend(); - -// 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) // 检测按键是否被按下 -// { -// 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); // 延时 100ms -// HAL_GPIO_WritePin(DOWN_GPIO_Port, DOWN_Pin, GPIO_PIN_RESET); // 关闭下气缸 -// // 一直检测有球(ball_state == 0),等球离开 -// if (ball_state == 1 && last_ball_state == 0) // 球离开 -// { -// currentState1 = BALL_FLAG; -// } -// last_ball_state = ball_state; -// break; - -// case BALL_FLAG: -// osDelay(10); // 延时 50ms -// // 等待球弹回再次检测到球 -// if (ball_state == 0 && last_ball_state == 1) // 球弹回 -// { -// currentState1 = BALL_CLOSE; -// } -// last_ball_state = ball_state; -// break; - -// case BALL_CLOSE: -// osDelay(100); -// HAL_GPIO_WritePin(CLOSE_GPIO_Port, CLOSE_Pin, GPIO_PIN_RESET); // 闭合气缸爪子 -// currentState1 = BALL_FINISH; // 切换到反转状态 -// break; - -// case BALL_FINISH: -// osDelay(50); // 延时 50ms -// HAL_GPIO_WritePin(CLOSE_GPIO_Port, CLOSE_Pin, GPIO_PIN_RESET); // 确保气缸爪子闭合 -// HAL_GPIO_WritePin(DOWN_GPIO_Port, DOWN_Pin, GPIO_PIN_RESET); // 确保下气缸关闭 - -// currentState1 = BALL_IDLE; // 回到空闲状态 - -// break; -// default: -// currentState1 = BALL_IDLE; // 默认回到空闲状态 -// break; -// } - - -// Send_control(); - -// } +#endif void Ball::Close(void) { - HAL_GPIO_WritePin(CLOSE_GPIO_Port, CLOSE_Pin, GPIO_PIN_RESET); // 确保爪气缸关闭 + HAL_GPIO_WritePin(CLOSE_GPIO_Port, CLOSE_Pin, GPIO_PIN_RESET); // 确保爪气缸关闭 HAL_GPIO_WritePin(DOWN_GPIO_Port, DOWN_Pin, GPIO_PIN_RESET); // 确保下气缸关闭 - currentState1 = BALL_IDLE; // 回到空闲状态 + currentState1 = BALL_IDLE; // 回到空闲状态 } void Ball::Hadling(void) @@ -333,24 +286,24 @@ void Ball::Hadling(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); //确保下气缸关闭 + 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) { ball_exit = 0; // 进入流程时清零 - currentState1 = BALL_FORWARD; + 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; // 切换到球下落状态 + osDelay(5); + HAL_GPIO_WritePin(DOWN_GPIO_Port, DOWN_Pin, GPIO_PIN_SET); // 打开下气缸 + currentState1 = BALL_DROP; // 切换到球下落状态 break; case BALL_DROP: - osDelay(100); // 延时 100ms + osDelay(100); // 延时 100ms HAL_GPIO_WritePin(DOWN_GPIO_Port, DOWN_Pin, GPIO_PIN_RESET); // 关闭下气缸 // 只响应第一次边沿 if (ball_exit == 1) @@ -366,24 +319,24 @@ void Ball::exit_Handling(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); //确保下气缸关闭 + 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) { ball_exit = 0; // 进入流程时清零 - currentState1 = BALL_FORWARD; + 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; // 切换到球下落状态 + osDelay(5); + HAL_GPIO_WritePin(DOWN_GPIO_Port, DOWN_Pin, GPIO_PIN_SET); // 打开下气缸 + currentState1 = BALL_DROP; // 切换到球下落状态 break; case BALL_DROP: - osDelay(100); // 延时 100ms + osDelay(100); // 延时 100ms HAL_GPIO_WritePin(DOWN_GPIO_Port, DOWN_Pin, GPIO_PIN_RESET); // 关闭下气缸 // 只响应第一次边沿 if (ball_exit == 1) @@ -393,8 +346,8 @@ void Ball::exit_Handling(void) break; case BALL_FLAG: - //osDelay(10); // 延时 10ms - // 只响应第二次边沿 + // osDelay(10); // 延时 10ms + // 只响应第二次边沿 if (ball_exit == 3) { currentState1 = BALL_CLOSE; @@ -402,15 +355,15 @@ void Ball::exit_Handling(void) break; case BALL_CLOSE: - osDelay(25); + osDelay(25); HAL_GPIO_WritePin(CLOSE_GPIO_Port, CLOSE_Pin, GPIO_PIN_RESET); // 闭合气缸爪子 - currentState1 = BALL_FINISH; // 切换到反转状态 + currentState1 = BALL_FINISH; // 切换到反转状态 break; case BALL_FINISH: HAL_GPIO_WritePin(CLOSE_GPIO_Port, CLOSE_Pin, GPIO_PIN_RESET); // 确保气缸爪子闭合 HAL_GPIO_WritePin(DOWN_GPIO_Port, DOWN_Pin, GPIO_PIN_RESET); // 确保下气缸关闭 - ball_exit = 0; // 流程完成后清零 + ball_exit = 0; // 流程完成后清零 break; default: @@ -419,32 +372,30 @@ void Ball::exit_Handling(void) } } - - void Ball::test_up(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) // 检测按键是否被按下 + 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) // 检测按键是否被按下 { step = 0; - currentState1 = BALL_FORWARD; + 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; // 切换到球下落状态 + osDelay(5); + HAL_GPIO_WritePin(DOWN_GPIO_Port, DOWN_Pin, GPIO_PIN_SET); // 打开下气缸 + currentState1 = BALL_DROP; // 切换到球下落状态 break; case BALL_DROP: - osDelay(50); // 延时 100ms + osDelay(50); // 延时 100ms HAL_GPIO_WritePin(DOWN_GPIO_Port, DOWN_Pin, GPIO_PIN_RESET); // 关闭下气缸 // 步骤0:等待球离开(持球->无球) @@ -467,47 +418,47 @@ void Ball::test_up(void) break; case BALL_CLOSE: - //osDelay(25); + // osDelay(25); HAL_GPIO_WritePin(CLOSE_GPIO_Port, CLOSE_Pin, GPIO_PIN_RESET); // 闭合气缸爪子 - currentState1 = BALL_FINISH; // 切换到完成状态 + currentState1 = BALL_FINISH; // 切换到完成状态 break; case BALL_FINISH: - osDelay(50); // 延时 50ms + osDelay(50); // 延时 50ms HAL_GPIO_WritePin(CLOSE_GPIO_Port, CLOSE_Pin, GPIO_PIN_RESET); // 确保气缸爪子闭合 HAL_GPIO_WritePin(DOWN_GPIO_Port, DOWN_Pin, GPIO_PIN_RESET); // 确保下气缸关闭 - //currentState1 = BALL_IDLE; // 可选:回到空闲状态 + // currentState1 = BALL_IDLE; // 可选:回到空闲状态 break; default: currentState1 = BALL_IDLE; // 默认回到空闲状态 break; } -} +} void Ball::ballHadling(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) // 检测按键是否被按下 + 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) // 检测按键是否被按下 { - currentState1 = BALL_FORWARD; + currentState1 = BALL_FORWARD; } break; case BALL_FORWARD: HAL_GPIO_WritePin(CLOSE_GPIO_Port, CLOSE_Pin, GPIO_PIN_SET); // 打开气缸爪子 - osDelay(5); + osDelay(5); HAL_GPIO_WritePin(DOWN_GPIO_Port, DOWN_Pin, GPIO_PIN_SET); // 打开下气缸 - currentState1 = BALL_DROP; // 切换到球下落状态 + currentState1 = BALL_DROP; // 切换到球下落状态 break; - case BALL_DROP: - osDelay(100); // 延时 100ms + case BALL_DROP: + osDelay(100); // 延时 100ms HAL_GPIO_WritePin(DOWN_GPIO_Port, DOWN_Pin, GPIO_PIN_RESET); // 关闭下气缸 // 一直检测有球(ball_state == 0),等球离开 if (ball_state == 1 && last_ball_state == 0) // 球离开 @@ -517,7 +468,7 @@ void Ball::ballHadling(void) last_ball_state = ball_state; break; - case BALL_FLAG: + case BALL_FLAG: osDelay(10); // 延时 50ms // 等待球弹回再次检测到球 if (ball_state == 0 && last_ball_state == 1) // 球弹回 @@ -528,17 +479,17 @@ void Ball::ballHadling(void) break; case BALL_CLOSE: - osDelay(100); - HAL_GPIO_WritePin(CLOSE_GPIO_Port, CLOSE_Pin, GPIO_PIN_RESET); // 闭合气缸爪子 - currentState1 = BALL_FINISH; // 切换到反转状态 + osDelay(100); + HAL_GPIO_WritePin(CLOSE_GPIO_Port, CLOSE_Pin, GPIO_PIN_RESET); // 闭合气缸爪子 + currentState1 = BALL_FINISH; // 切换到反转状态 break; case BALL_FINISH: - osDelay(50); // 延时 50ms + osDelay(50); // 延时 50ms HAL_GPIO_WritePin(CLOSE_GPIO_Port, CLOSE_Pin, GPIO_PIN_RESET); // 确保气缸爪子闭合 - HAL_GPIO_WritePin(DOWN_GPIO_Port, DOWN_Pin, GPIO_PIN_RESET); // 确保下气缸关闭 + HAL_GPIO_WritePin(DOWN_GPIO_Port, DOWN_Pin, GPIO_PIN_RESET); // 确保下气缸关闭 - //currentState1 = BALL_IDLE; // 回到空闲状态 + // currentState1 = BALL_IDLE; // 回到空闲状态 break; @@ -546,18 +497,15 @@ void Ball::ballHadling(void) currentState1 = BALL_IDLE; // 默认回到空闲状态 break; } - - - } - +} 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); //确保下气缸关闭 + 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; // 每次拨动重新计数 @@ -568,14 +516,14 @@ void Ball::ballHadling_two(void) 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); // 打开下气缸 + 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) // 球离开 + if (ball_state == 1 && last_ball_state == 0) // 球离开 { currentState1 = BALL_FLAG; } @@ -608,7 +556,7 @@ void Ball::ballHadling_two(void) } else { - currentState1 = BALL_IDLE; // 完成两次,回到空闲 + currentState1 = BALL_IDLE; // 完成两次,回到空闲 } break; @@ -618,7 +566,4 @@ void Ball::ballHadling_two(void) } } - - #endif -