From ec3771a1a2e63efdb9929057f55ead97a0176dea Mon Sep 17 00:00:00 2001
From: ws <1621320660@qq.com>
Date: Sat, 26 Apr 2025 17:45:08 +0800
Subject: [PATCH] =?UTF-8?q?=E8=BF=90=E7=90=83=E4=B8=8A=E8=BD=A6=E5=89=8D?=
=?UTF-8?q?=E9=83=BDok=E4=BA=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 9 ++
Core/Src/gpio.c | 2 +-
MDK-ARM/.vscode/keil-assistant.log | 32 +++++
MDK-ARM/.vscode/settings.json | 4 +-
MDK-ARM/.vscode/uv4.log | 6 +-
MDK-ARM/.vscode/uv4.log.lock | 2 +-
MDK-ARM/R1-shooter.uvoptx | 30 +++--
R1-shooter.ioc | 2 +-
User/bsp/can_init.c | 27 ++++
User/device/detect.c | 2 +-
User/device/djiMotor.c | 13 +-
User/device/vofa.c | 6 +-
User/device/vofa.h | 7 +-
User/module/ball.cpp | 191 ++++++++++++++++++++++++-----
User/module/ball.hpp | 3 +
User/task/ballTask.cpp | 24 +++-
User/task/encodeCan.cpp | 8 +-
User/task/nucTask.cpp | 6 +-
User/task/userTask.c | 4 +-
19 files changed, 312 insertions(+), 66 deletions(-)
diff --git a/.gitignore b/.gitignore
index fe9c9c5..5981417 100644
--- a/.gitignore
+++ b/.gitignore
@@ -99,3 +99,12 @@ JLinkLog.txt
# Other Files
+# Log files
+*.log
+*.log.lock
+
+# JSON files
+*.json
+
+# uVision Options
+*.uvoptx
diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c
index 59f14c6..b618657 100644
--- a/Core/Src/gpio.c
+++ b/Core/Src/gpio.c
@@ -121,7 +121,7 @@ void MX_GPIO_Init(void)
/*Configure GPIO pin : PtPin */
GPIO_InitStruct.Pin = STOP_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(STOP_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pin : PtPin */
diff --git a/MDK-ARM/.vscode/keil-assistant.log b/MDK-ARM/.vscode/keil-assistant.log
index c3bdeca..b3c05a0 100644
--- a/MDK-ARM/.vscode/keil-assistant.log
+++ b/MDK-ARM/.vscode/keil-assistant.log
@@ -22,3 +22,35 @@
[info] Log at : 2025/4/16|16:20:32|GMT+0800
+[info] Log at : 2025/4/19|19:27:22|GMT+0800
+
+[info] Log at : 2025/4/19|21:14:34|GMT+0800
+
+[info] Log at : 2025/4/19|23:02:49|GMT+0800
+
+[info] Log at : 2025/4/20|14:28:49|GMT+0800
+
+[info] Log at : 2025/4/20|15:44:16|GMT+0800
+
+[info] Log at : 2025/4/20|16:25:11|GMT+0800
+
+[info] Log at : 2025/4/21|17:04:22|GMT+0800
+
+[info] Log at : 2025/4/22|10:54:46|GMT+0800
+
+[info] Log at : 2025/4/22|19:20:19|GMT+0800
+
+[info] Log at : 2025/4/23|14:36:25|GMT+0800
+
+[info] Log at : 2025/4/23|17:15:10|GMT+0800
+
+[info] Log at : 2025/4/24|22:10:33|GMT+0800
+
+[info] Log at : 2025/4/24|23:29:19|GMT+0800
+
+[info] Log at : 2025/4/25|18:41:24|GMT+0800
+
+[info] Log at : 2025/4/25|18:59:20|GMT+0800
+
+[info] Log at : 2025/4/26|16:18:23|GMT+0800
+
diff --git a/MDK-ARM/.vscode/settings.json b/MDK-ARM/.vscode/settings.json
index cdb910e..9d1717c 100644
--- a/MDK-ARM/.vscode/settings.json
+++ b/MDK-ARM/.vscode/settings.json
@@ -9,6 +9,8 @@
"task.h": "c",
"djimotor.h": "c",
"nuc.h": "c",
- "crc_ccitt.h": "c"
+ "crc_ccitt.h": "c",
+ "functional": "cpp",
+ "vofa.h": "c"
}
}
\ No newline at end of file
diff --git a/MDK-ARM/.vscode/uv4.log b/MDK-ARM/.vscode/uv4.log
index 84f9363..2ac5c03 100644
--- a/MDK-ARM/.vscode/uv4.log
+++ b/MDK-ARM/.vscode/uv4.log
@@ -1,4 +1,8 @@
*** Using Compiler 'V5.06 update 7 (build 960)', folder: 'D:\keil\ARM\ARMCC\Bin'
Build target 'R1-shooter'
+compiling ball.cpp...
+linking...
+Program Size: Code=26644 RO-data=1812 RW-data=240 ZI-data=23520
+FromELF: creating hex file...
"R1-shooter\R1-shooter.axf" - 0 Error(s), 0 Warning(s).
-Build Time Elapsed: 00:00:01
+Build Time Elapsed: 00:00:03
diff --git a/MDK-ARM/.vscode/uv4.log.lock b/MDK-ARM/.vscode/uv4.log.lock
index 8787f84..e1bf9c5 100644
--- a/MDK-ARM/.vscode/uv4.log.lock
+++ b/MDK-ARM/.vscode/uv4.log.lock
@@ -1 +1 @@
-2025/4/13 22:09:19
\ No newline at end of file
+2025/4/26 16:32:18
\ No newline at end of file
diff --git a/MDK-ARM/R1-shooter.uvoptx b/MDK-ARM/R1-shooter.uvoptx
index 6ae841a..a3a851b 100644
--- a/MDK-ARM/R1-shooter.uvoptx
+++ b/MDK-ARM/R1-shooter.uvoptx
@@ -103,7 +103,7 @@
1
0
0
- 6
+ 3
@@ -114,9 +114,14 @@
- STLink\ST-LINKIII-KEIL_SWO.dll
+ BIN\CMSIS_AGDI.dll
+
+ 0
+ CMSIS_AGDI
+ -X"Any" -UAny -O206 -S8 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F407IGHx$CMSIS\Flash\STM32F4xx_1024.FLM)
+
0
ARMRTXEVENTFLAGS
@@ -135,7 +140,7 @@
0
DLGUARM
- (105=-1,-1,-1,-1,0)
+
0
@@ -145,7 +150,7 @@
0
ST-LINKIII-KEIL_SWO
- -U-O142 -O2254 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(2BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F407IGHx$CMSIS\Flash\STM32F4xx_1024.FLM)
+ -U00160029510000164E574E32 -O2254 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(2BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F407IGHx$CMSIS\Flash\STM32F4xx_1024.FLM)
@@ -218,22 +223,22 @@
13
1
- abc,0x0A
+ \\R1_shooter\../User/task/ballTask.cpp\ball,0x0A
14
1
- \\R1_shooter\../User/task/ballTask.cpp\ball,0x0A
+ currentState1
15
1
- speedm,0x0A
+ abc,0x0A
16
1
- abc,0x0A
+ ball_state,0x0A
17
@@ -243,7 +248,12 @@
18
1
- ball_state,0x0A
+ triggerCount,0x0A
+
+
+ 19
+ 1
+ last_ball_state,0x0A
@@ -261,7 +271,7 @@
1
1
0
- 0
+ 1
0
0
1
diff --git a/R1-shooter.ioc b/R1-shooter.ioc
index 2091ec3..9332e11 100644
--- a/R1-shooter.ioc
+++ b/R1-shooter.ioc
@@ -260,7 +260,7 @@ PE14.Locked=true
PE14.Signal=GPIO_Output
PE9.GPIOParameters=GPIO_PuPd,GPIO_Label
PE9.GPIO_Label=STOP
-PE9.GPIO_PuPd=GPIO_PULLUP
+PE9.GPIO_PuPd=GPIO_PULLDOWN
PE9.Locked=true
PE9.Signal=GPIO_Input
PF6.GPIOParameters=GPIO_Speed,GPIO_Label
diff --git a/User/bsp/can_init.c b/User/bsp/can_init.c
index 27b0c5e..e1830be 100644
--- a/User/bsp/can_init.c
+++ b/User/bsp/can_init.c
@@ -32,3 +32,30 @@ void can_filter_init(void)
HAL_CAN_ActivateNotification(&hcan2, CAN_IT_RX_FIFO1_MSG_PENDING);
}
+// void can_filter_init(void)
+// {
+
+// CAN_FilterTypeDef can_filter_st;
+// can_filter_st.FilterActivation = ENABLE;
+// can_filter_st.FilterMode = CAN_FILTERMODE_IDMASK;
+// can_filter_st.FilterScale = CAN_FILTERSCALE_32BIT;
+// can_filter_st.FilterIdHigh = 0x0000;
+// can_filter_st.FilterIdLow = 0x0000;
+// can_filter_st.FilterMaskIdHigh = 0x0000;
+// can_filter_st.FilterMaskIdLow = 0x0000;
+// can_filter_st.FilterBank = 0;
+// can_filter_st.FilterFIFOAssignment = CAN_RX_FIFO0;
+// HAL_CAN_ConfigFilter(&hcan1, &can_filter_st);
+// HAL_CAN_Start(&hcan1);
+// HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING);
+
+
+// can_filter_st.SlaveStartFilterBank = 14;
+// can_filter_st.FilterBank = 14;
+// HAL_CAN_ConfigFilter(&hcan2, &can_filter_st);
+// HAL_CAN_Start(&hcan2);
+// HAL_CAN_ActivateNotification(&hcan2, CAN_IT_RX_FIFO1_MSG_PENDING);
+
+
+
+// }
diff --git a/User/device/detect.c b/User/device/detect.c
index 2775d38..90b75ed 100644
--- a/User/device/detect.c
+++ b/User/device/detect.c
@@ -24,7 +24,7 @@ void detect_init(void)
{
BSP_GPIO_RegisterCallback(KEY_Pin, detect_exit);
- //BSP_GPIO_RegisterCallback(ext_up_Pin, detect_led);
+ // BSP_GPIO_RegisterCallback(ext_up_Pin, detect_led);
// 注册按键中断回调函数
if (BSP_GPIO_RegisterCallback(KEY_Pin, detect_exit) != BSP_OK) {
// 错误处理
diff --git a/User/device/djiMotor.c b/User/device/djiMotor.c
index eb2fc65..e2042c4 100644
--- a/User/device/djiMotor.c
+++ b/User/device/djiMotor.c
@@ -160,6 +160,7 @@ void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
}
#else
static osEventFlagsId_t eventReceive;
+static osThreadId_t thread_alert;
/**
* @brief 自定义大疆电机回调函数
* @param[in] none
@@ -169,8 +170,8 @@ void Dji_Motor_CB()
{
HAL_CAN_GetRxMessage(&hcan1, CAN_RX_FIFO0, &dji_rx_header, dji_rx_data);
-
- osEventFlagsSet(eventReceive, EVENT_CAN);
+ osThreadFlagsSet(thread_alert, EVENT_CAN);
+ // osEventFlagsSet(eventReceive, EVENT_CAN);
}
void can2_Motor_CB(void)
{
@@ -184,6 +185,7 @@ void can2_Motor_CB(void)
*/
void djiInit(void)
{
+ thread_alert = osThreadGetId();
BSP_CAN_RegisterCallback(BSP_CAN_1, HAL_CAN_RX_FIFO0_MSG_PENDING_CB,
Dji_Motor_CB);
BSP_CAN_RegisterCallback(BSP_CAN_2, HAL_CAN_RX_FIFO1_MSG_PENDING_CB,
@@ -197,8 +199,11 @@ void djiInit(void)
*/
uint32_t waitNewDji()
{
- return osEventFlagsWait(
- eventReceive, EVENT_CAN,osFlagsWaitAny, osWaitForever);
+ // return osEventFlagsWait(
+ // eventReceive, EVENT_CAN,osFlagsWaitAny, osWaitForever);
+ return osThreadFlagsWait(
+ EVENT_CAN, osFlagsWaitAll, osWaitForever);
+
}
#endif
diff --git a/User/device/vofa.c b/User/device/vofa.c
index 5d06c50..2a044de 100644
--- a/User/device/vofa.c
+++ b/User/device/vofa.c
@@ -32,11 +32,11 @@ void vofa_tx_main(float *data)
//用dma用不了
//HAL_UART_Transmit_DMA(&huart6, ( uint8_t *)fdata, sizeof(fdata));
- HAL_UART_Transmit(&huart6, ( uint8_t *)fdata, sizeof(fdata),0xFFFF); //发送第一组数据
+ HAL_UART_Transmit(&huart1, ( uint8_t *)fdata, sizeof(fdata),0xFFFF); //发送第一组数据
osDelay(1);
//HAL_UART_Transmit_DMA(&huart6, tail, 4);
- HAL_UART_Transmit(&huart6, tail, 4,0xFFFF); //发送第二组数据
- osDelay(1);
+ HAL_UART_Transmit(&huart1, tail, 4,0xFFFF); //发送第二组数据
+ osDelay(1);
//用虚拟串口c板开启不了
// CDC_Transmit_FS( ( uint8_t *)fdata, sizeof(fdata));
diff --git a/User/device/vofa.h b/User/device/vofa.h
index 8f83b9a..3f454fd 100644
--- a/User/device/vofa.h
+++ b/User/device/vofa.h
@@ -1,6 +1,8 @@
#ifndef _VOFA_H_
#define _VOFA_H_
-
+#ifdef __cplusplus
+extern "C"{
+#endif
@@ -12,6 +14,9 @@ void vofa_tx_main(float *data);
extern float vofa_send[8];
+#ifdef __cplusplus
+}
+#endif
#endif
diff --git a/User/module/ball.cpp b/User/module/ball.cpp
index 05bc2ef..d51f707 100644
--- a/User/module/ball.cpp
+++ b/User/module/ball.cpp
@@ -14,7 +14,7 @@ int speedm1=0;
#define MOTOR_SPEED 1000
-const fp32 Ball:: M3508_speed_PID[3] = {5, 0, 0};
+const fp32 Ball:: M3508_speed_PID[3] = {5, 0.01, 0};
//PE11 气缸
@@ -29,7 +29,7 @@ Ball ::Ball()
if(i <=3)
{
hand_Motor[i]->type = M3508;//设置电机类型
- PID_init(&speed_pid[i],PID_POSITION,M3508_speed_PID,16000, 6000);//pid初始化
+ PID_init(&speed_pid[i],PID_POSITION,M3508_speed_PID,16000, 10000);//pid初始化
}
result[i] = 0;
speedSet[i] = 0;
@@ -37,29 +37,25 @@ Ball ::Ball()
}
+#if HANDLING3 == 1
+
void Ball ::Spin(float speed,float speed2)
{
speedSet[MOTOR_1] = -speed;
result[MOTOR_1] = PID_calc(&speed_pid[MOTOR_1],hand_Motor[MOTOR_1]->speed_rpm,speedSet[MOTOR_1]);
- speedSet[MOTOR_2] = speed2;
+ speedSet[MOTOR_2] = speed;
result[MOTOR_2] = PID_calc(&speed_pid[MOTOR_2],hand_Motor[MOTOR_2]->speed_rpm,speedSet[MOTOR_2]);
- speedSet[MOTOR_3] = speed;
+ speedSet[MOTOR_3] = speed2;
result[MOTOR_3] = PID_calc(&speed_pid[MOTOR_3],hand_Motor[MOTOR_3]->speed_rpm,speedSet[MOTOR_3]);
- // for(int i = 1;i < MOTOR_NUM;i ++)
- // {
- // speedSet[i] = speed;
- // result[i] = PID_calc(&speed_pid[i],hand_Motor[i]->speed_rpm,speedSet[i]);
-
- // }
-
}
int flag =0;
int ball_state = 0;
+
void Ball::ballHadling(void)
{
@@ -71,16 +67,16 @@ void Ball::ballHadling(void)
if (key > 0) // 检测按键是否被按下
{
speedm=-4500;
- speedm1=-3500;
+ speedm1=-4500;
currentState1 = BALL_FORWARD; // 切换到正转状态
}
break;
case BALL_FORWARD:
- if ( hand_Motor[MOTOR_1]->speed_rpm >= 4480&&hand_Motor[MOTOR_1]->speed_rpm <= 4520 &&
- hand_Motor[MOTOR_2]->speed_rpm <= -2980-500&&hand_Motor[MOTOR_2]->speed_rpm >= -3020-500 &&
- hand_Motor[MOTOR_3]->speed_rpm <= -4480&&hand_Motor[MOTOR_3]->speed_rpm >= -4020-1000 )
+ if ( hand_Motor[MOTOR_1]->speed_rpm >= 4480&&hand_Motor[MOTOR_1]->speed_rpm <= 4530 &&
+ hand_Motor[MOTOR_2]->speed_rpm <= -4480&&hand_Motor[MOTOR_2]->speed_rpm >= -4530 &&
+ hand_Motor[MOTOR_3]->speed_rpm <= -4480&&hand_Motor[MOTOR_3]->speed_rpm >= -4530 )
{
HAL_GPIO_WritePin(CLOSE_GPIO_Port, CLOSE_Pin, GPIO_PIN_SET);// 打开气缸
currentState1 = BALL_DROP; // 切换到球下落状态
@@ -92,8 +88,8 @@ void Ball::ballHadling(void)
if (ball_state == 1) //读光电 有球 0 无球 1
{
osDelay(200); // 延时200ms
- speedm=3000;
- speedm1=3000;
+ speedm=4500;
+ speedm1=4500;
currentState1 = BALL_REVERSE; // 切换到反转状态
}
@@ -104,7 +100,7 @@ void Ball::ballHadling(void)
if (ball_state == 0)
{
- flag=2; //抽象的计次
+ //flag=2; //抽象的计次
speedm=0; // 停止电机
speedm1=0;
currentState1 = BALL_CLOSE; // 切换到完成状态
@@ -113,21 +109,26 @@ void Ball::ballHadling(void)
break;
case BALL_CLOSE:
- osDelay(200); // 延时50ms
- if (flag == 2)
- {
- if(ball_state == 0)
- {
- HAL_GPIO_WritePin(CLOSE_GPIO_Port, CLOSE_Pin, GPIO_PIN_RESET);
- currentState1 = BALL_FINISH; // 切换到完成状态
- }
+ // osDelay(200); // 延时50ms
+ if(ball_state == 0)
+ {
+ HAL_GPIO_WritePin(CLOSE_GPIO_Port, CLOSE_Pin, GPIO_PIN_RESET);
+ currentState1 = BALL_FINISH; // 切换到完成状态
+ }
+ // if (flag == 2)
+ // {
+ // if(ball_state == 0)
+ // {
+ // HAL_GPIO_WritePin(CLOSE_GPIO_Port, CLOSE_Pin, GPIO_PIN_RESET);
+ // currentState1 = BALL_FINISH; // 切换到完成状态
+ // }
- }
+ // }
break;
case BALL_FINISH:
osDelay(200); // 延时50ms
- key = 0; // 重置按键状态
+ key=0; // 重置按键状态
flag=0;
speedm=0;
speedm1=0;
@@ -144,6 +145,140 @@ void Ball::ballHadling(void)
void Ball::Send_control()
{
CAN_cmd_200(result[MOTOR_1],result[MOTOR_2],result[MOTOR_3],0,&hcan1);
+ osDelay(2);
}
+#else
+int flag =0;
+int ball_state = 0;
+// void Ball::ballHadling(void)
+// {
+// ball_state =HAL_GPIO_ReadPin(up_ball_GPIO_Port, up_ball_Pin);//有球 0 无球 1
+// switch (currentState1)
+// {
+// case BALL_IDLE:
+
+// if (key > 0) // 检测按键是否被按下
+// {
+// currentState1 = BALL_FORWARD; // 切换到正转状态
+
+// }
+// break;
+
+// case BALL_FORWARD:
+// HAL_GPIO_WritePin(PAW_GPIO_Port, PAW_Pin, GPIO_PIN_SET);
+// osDelay(50);
+// 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);
+// currentState1 = BALL_CLOSE; // 切换到反转状态
+// break;
+
+// case BALL_CLOSE:
+// osDelay(100);
+// if(ball_state == 0)
+// {
+// HAL_GPIO_WritePin(PAW_GPIO_Port, PAW_Pin, GPIO_PIN_RESET);
+// currentState1 = BALL_REVERSE; // 切换到反转状态
+// }
+
+
+
+// break;
+
+// case BALL_REVERSE:
+// osDelay(50); // 延时200ms
+// HAL_GPIO_WritePin(PAW_GPIO_Port, PAW_Pin, GPIO_PIN_RESET);
+// HAL_GPIO_WritePin(DOWN_GPIO_Port, DOWN_Pin, GPIO_PIN_RESET);
+// key=0; // 重置按键状态
+// currentState1 = BALL_IDLE; // 回到空闲状态
+// break;
+
+// default:
+// currentState1 = BALL_IDLE; // 默认回到空闲状态
+// break;
+// }
+
+// }
+ int triggerCount = 0; // 光电传感器触发计数
+ int last_ball_state = 1; // 上一次的光电状态
+void Ball::ballHadling(void)
+{
+
+ ball_state = HAL_GPIO_ReadPin(up_ball_GPIO_Port, up_ball_Pin); // 读取光电状态(有球 0,无球 1)
+
+ switch (currentState1)
+ {
+ case BALL_IDLE:
+ HAL_GPIO_WritePin(CLOSE_GPIO_Port, CLOSE_Pin, GPIO_PIN_RESET); // 确保气缸闭合
+ if (key > 0) // 检测按键是否被按下
+ {
+ key = 0; // 重置按键状态
+ triggerCount = 0; // 重置触发计数
+ currentState1 = BALL_FORWARD; // 切换到正转状态
+ }
+ break;
+
+ case BALL_FORWARD:
+ HAL_GPIO_WritePin(PAW_GPIO_Port, PAW_Pin, GPIO_PIN_SET); // 打开气缸爪子
+ osDelay(10);
+ 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); // 关闭下气缸
+ if (ball_state == 0 && last_ball_state == 1) // 检测到状态从无球变为有球
+ {
+ //osDelay(10); // 延时去抖动
+ triggerCount++; // 增加触发计数
+ if (triggerCount == 1) // 第一次触发
+ {
+ currentState1 = BALL_FLAG; // 切换到等待第二次触发状态
+ }
+ }
+ last_ball_state = ball_state; // 更新上一次的状态
+ break;
+
+ case BALL_FLAG:
+ osDelay(10); // 延时 50ms
+ if (triggerCount == 1 && ball_state == 0 && last_ball_state == 1) // 第二次检测到球
+ {
+ triggerCount++; // 增加触发计数
+ currentState1 = BALL_CLOSE; // 切换到闭合气缸状态
+ }
+ last_ball_state = ball_state; // 更新上一次的状态
+ break;
+
+ case BALL_CLOSE:
+ if (triggerCount == 2) // 确保是第二次触发
+ {
+ //osDelay(10); // 延时去抖
+ HAL_GPIO_WritePin(PAW_GPIO_Port, PAW_Pin, GPIO_PIN_RESET); // 闭合气缸爪子
+ currentState1 = BALL_REVERSE; // 切换到反转状态
+ }
+ break;
+
+ case BALL_REVERSE:
+ osDelay(50); // 延时 50ms
+ HAL_GPIO_WritePin(PAW_GPIO_Port, PAW_Pin, GPIO_PIN_RESET); // 确保气缸爪子闭合
+ HAL_GPIO_WritePin(DOWN_GPIO_Port, DOWN_Pin, GPIO_PIN_RESET); // 确保下气缸关闭
+ key = 0; // 重置按键状态
+ triggerCount = 0; // 重置触发计数
+ currentState1 = BALL_IDLE; // 回到空闲状态
+ break;
+
+ default:
+ currentState1 = BALL_IDLE; // 默认回到空闲状态
+ break;
+ }
+}
+ #endif
+
diff --git a/User/module/ball.hpp b/User/module/ball.hpp
index ab4c7b6..d880f97 100644
--- a/User/module/ball.hpp
+++ b/User/module/ball.hpp
@@ -7,12 +7,15 @@
#include "djiMotor.h"
#include "pid.h"
+#define HANDLING3 0
+
// 定义状态枚举
typedef enum {
BALL_IDLE, // 空闲状态
BALL_FORWARD, // 正转状态
BALL_DROP, // 球下落状态
BALL_REVERSE, // 反转状态
+ BALL_FLAG,
BALL_CLOSE, // 关闭状态
BALL_FINISH // 完成状态
} BallState_t;
diff --git a/User/task/ballTask.cpp b/User/task/ballTask.cpp
index 972153a..a4fadf6 100644
--- a/User/task/ballTask.cpp
+++ b/User/task/ballTask.cpp
@@ -5,8 +5,10 @@
#include
#include "ball.hpp"
#include "remote_control.h"
+#include "vofa.h"
extern RC_ctrl_t rc_ctrl;
Ball ball;
+float vofa[8];
int abc=0;
extern int speedm;
@@ -16,8 +18,8 @@ void FunctionBall(void *argument)
{
(void)argument; /* 未使用argument,消除警告 */
- const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_BALL;
- uint32_t tick = osKernelGetTickCount();
+ // const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_BALL;
+ // uint32_t tick = osKernelGetTickCount();
while(1)
{
@@ -25,12 +27,22 @@ void FunctionBall(void *argument)
task_struct.stack_water_mark.ball = osThreadGetStackSpace(osThreadGetId());
#endif
abc=HAL_GPIO_ReadPin(up_ball_GPIO_Port, up_ball_Pin);
+ //abc=HAL_GPIO_ReadPin(STOP_GPIO_Port, STOP_Pin);
ball.ballHadling(); // 处理摩擦轮转动
- ball.Spin(speedm,speedm1);
- ball.Send_control();
+// speedm=4000;
+// speedm1=4000;
+// ball.Spin(speedm,speedm1);
+// ball.Send_control();
- tick += delay_tick; /* 计算下一个唤醒时刻 */
- osDelayUntil(tick);
+// vofa[0] = speedm; // 发送电机角度数据
+// vofa[1] = -ball.hand_Motor[0]->speed_rpm; // 发送电机角度数据
+// vofa[2] = ball.hand_Motor[1]->speed_rpm; // 发送电机速度数据
+// vofa[3] = ball.hand_Motor[2]->speed_rpm; // 发送电机速度数据
+
+// vofa_tx_main(vofa); // 发送数据到虚拟串口
+
+ // tick += delay_tick; /* 计算下一个唤醒时刻 */
+ // osDelayUntil(tick);
}
}
diff --git a/User/task/encodeCan.cpp b/User/task/encodeCan.cpp
index 261904d..2791a76 100644
--- a/User/task/encodeCan.cpp
+++ b/User/task/encodeCan.cpp
@@ -15,11 +15,11 @@ void FunctionCan(void *argument)
{
(void)argument; /* 未使用argument,消除警告 */
- const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_CAN;
+ //const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_CAN;
djiInit();
- uint32_t tick = osKernelGetTickCount();
+ //uint32_t tick = osKernelGetTickCount();
while(1)
{
#ifdef DEBUG
@@ -30,7 +30,7 @@ void FunctionCan(void *argument)
djiMotorEncode();
can2MotorEncode();
- tick += delay_tick; /* 计算下一个唤醒时刻 */
- osDelayUntil(tick);
+ // tick += delay_tick; /* 计算下一个唤醒时刻 */
+ // osDelayUntil(tick);
}
}
diff --git a/User/task/nucTask.cpp b/User/task/nucTask.cpp
index 5f3497a..901a127 100644
--- a/User/task/nucTask.cpp
+++ b/User/task/nucTask.cpp
@@ -4,6 +4,7 @@
#include "TopDefine.h"//事件组的一些东西
#include "FreeRTOS.h"
#include
+#include
#ifdef DEBUG
@@ -21,6 +22,7 @@ void Function_nuc(void *argument)
NUC_Init(&cmd_fromnuc);
+
uint32_t tick = osKernelGetTickCount();
while(1)
@@ -31,8 +33,8 @@ void Function_nuc(void *argument)
NUC_StartReceiving();
NUC_RawParse(&cmd_fromnuc);
-
- NUC_SendPacket(&send, sizeof(send)); // 发送数据包
+
+ //NUC_SendPacket(&send, sizeof(send)); // 发送数据包
//掉线处理有空写
// if(NUC_WaitDmaCplt())
// {
diff --git a/User/task/userTask.c b/User/task/userTask.c
index 3282ca4..0d66988 100644
--- a/User/task/userTask.c
+++ b/User/task/userTask.c
@@ -24,7 +24,7 @@ const osThreadAttr_t attr_take = {
const osThreadAttr_t attr_can = {
.name = "can",
.priority = osPriorityRealtime,
- .stack_size = 128 * 6,
+ .stack_size = 128 * 8,
};
const osThreadAttr_t attr_rc = {
@@ -36,7 +36,7 @@ const osThreadAttr_t attr_rc = {
const osThreadAttr_t attr_ball = {
.name = "ball",
.priority = osPriorityRealtime,
- .stack_size = 128 * 4,
+ .stack_size = 128 * 8,
};
const osThreadAttr_t attr_nuc = {
.name = "nuc",