diff --git a/Core/Inc/main.h b/Core/Inc/main.h
index 9f65da1..9d6d8cb 100644
--- a/Core/Inc/main.h
+++ b/Core/Inc/main.h
@@ -75,11 +75,17 @@ void Error_Handler(void);
#define ACCL_INT_Pin GPIO_PIN_4
#define ACCL_INT_GPIO_Port GPIOC
#define ACCL_INT_EXTI_IRQn EXTI4_IRQn
+#define LIGHT_C_Pin GPIO_PIN_13
+#define LIGHT_C_GPIO_Port GPIOE
#define GYRO_INT_Pin GPIO_PIN_5
#define GYRO_INT_GPIO_Port GPIOC
#define GYRO_INT_EXTI_IRQn EXTI9_5_IRQn
-#define FlagForUpper_Pin GPIO_PIN_9
-#define FlagForUpper_GPIO_Port GPIOE
+#define LIGHT_A_Pin GPIO_PIN_9
+#define LIGHT_A_GPIO_Port GPIOE
+#define LIGHT_B_Pin GPIO_PIN_11
+#define LIGHT_B_GPIO_Port GPIOE
+#define RELAY_Pin GPIO_PIN_14
+#define RELAY_GPIO_Port GPIOE
#define GYRO_CS_Pin GPIO_PIN_0
#define GYRO_CS_GPIO_Port GPIOB
diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c
index 7b59a61..3fe1da3 100644
--- a/Core/Src/gpio.c
+++ b/Core/Src/gpio.c
@@ -61,7 +61,7 @@ void MX_GPIO_Init(void)
HAL_GPIO_WritePin(ACCL_CS_GPIO_Port, ACCL_CS_Pin, GPIO_PIN_SET);
/*Configure GPIO pin Output Level */
- HAL_GPIO_WritePin(FlagForUpper_GPIO_Port, FlagForUpper_Pin, GPIO_PIN_SET);
+ HAL_GPIO_WritePin(RELAY_GPIO_Port, RELAY_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GYRO_CS_GPIO_Port, GYRO_CS_Pin, GPIO_PIN_SET);
@@ -92,12 +92,18 @@ void MX_GPIO_Init(void)
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+ /*Configure GPIO pins : PEPin PEPin */
+ GPIO_InitStruct.Pin = LIGHT_C_Pin|LIGHT_B_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+ GPIO_InitStruct.Pull = GPIO_PULLDOWN;
+ HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
+
/*Configure GPIO pin : PtPin */
- GPIO_InitStruct.Pin = FlagForUpper_Pin;
+ GPIO_InitStruct.Pin = RELAY_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
+ GPIO_InitStruct.Pull = GPIO_PULLDOWN;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- HAL_GPIO_Init(FlagForUpper_GPIO_Port, &GPIO_InitStruct);
+ HAL_GPIO_Init(RELAY_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pin : PtPin */
GPIO_InitStruct.Pin = GYRO_CS_Pin;
diff --git a/Core/Src/main.c b/Core/Src/main.c
index 557aee4..f48044b 100644
--- a/Core/Src/main.c
+++ b/Core/Src/main.c
@@ -80,7 +80,7 @@ int main(void)
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
- HAL_Init();
+ HAL_Init();
/* USER CODE BEGIN Init */
diff --git a/MDK-ARM/R2.uvoptx b/MDK-ARM/R2.uvoptx
index 19d1e8d..df637c7 100644
--- a/MDK-ARM/R2.uvoptx
+++ b/MDK-ARM/R2.uvoptx
@@ -208,7 +208,12 @@
11
1
- \\R2\../User/task/up_task.c\UP.motorfeedback.DJmotor_feedback
+ Nor_Vx
+
+
+ 12
+ 1
+ Nor_Vy
@@ -972,18 +977,6 @@
0
0
0
- ..\User\bsp\map.c
- map.c
- 0
- 0
-
-
- 7
- 56
- 1
- 0
- 0
- 0
..\User\bsp\bsp_can.c
bsp_can.c
0
@@ -991,7 +984,7 @@
7
- 57
+ 56
1
0
0
@@ -1003,7 +996,7 @@
7
- 58
+ 57
1
0
0
@@ -1015,7 +1008,7 @@
7
- 59
+ 58
5
0
0
@@ -1027,7 +1020,7 @@
7
- 60
+ 59
1
0
0
@@ -1039,7 +1032,7 @@
7
- 61
+ 60
1
0
0
@@ -1051,7 +1044,7 @@
7
- 62
+ 61
1
0
0
@@ -1071,7 +1064,7 @@
0
8
- 63
+ 62
1
0
0
@@ -1083,7 +1076,7 @@
8
- 64
+ 63
1
0
0
@@ -1095,7 +1088,7 @@
8
- 65
+ 64
1
0
0
@@ -1107,7 +1100,7 @@
8
- 66
+ 65
1
0
0
@@ -1119,7 +1112,7 @@
8
- 67
+ 66
1
0
0
@@ -1131,7 +1124,7 @@
8
- 68
+ 67
1
0
0
@@ -1143,7 +1136,7 @@
8
- 69
+ 68
1
0
0
@@ -1155,7 +1148,7 @@
8
- 70
+ 69
1
0
0
@@ -1167,7 +1160,7 @@
8
- 71
+ 70
1
0
0
@@ -1179,7 +1172,7 @@
8
- 72
+ 71
1
0
0
@@ -1199,7 +1192,7 @@
0
9
- 73
+ 72
1
0
0
@@ -1211,7 +1204,7 @@
9
- 74
+ 73
1
0
0
@@ -1223,7 +1216,7 @@
9
- 75
+ 74
1
0
0
@@ -1235,7 +1228,7 @@
9
- 76
+ 75
1
0
0
@@ -1247,7 +1240,7 @@
9
- 77
+ 76
1
0
0
@@ -1259,7 +1252,7 @@
9
- 78
+ 77
1
0
0
@@ -1279,7 +1272,7 @@
0
10
- 79
+ 78
1
0
0
@@ -1291,7 +1284,7 @@
10
- 80
+ 79
1
0
0
@@ -1303,7 +1296,7 @@
10
- 81
+ 80
1
0
0
@@ -1315,7 +1308,7 @@
10
- 82
+ 81
1
0
0
@@ -1327,7 +1320,7 @@
10
- 83
+ 82
1
0
0
@@ -1339,7 +1332,7 @@
10
- 84
+ 83
1
0
0
@@ -1351,7 +1344,7 @@
10
- 85
+ 84
1
0
0
@@ -1371,7 +1364,7 @@
0
11
- 86
+ 85
1
0
0
@@ -1383,7 +1376,7 @@
11
- 87
+ 86
1
0
0
@@ -1395,7 +1388,7 @@
11
- 88
+ 87
1
0
0
@@ -1415,7 +1408,7 @@
0
12
- 89
+ 88
1
0
0
@@ -1435,7 +1428,7 @@
0
13
- 90
+ 89
1
0
0
@@ -1447,7 +1440,7 @@
13
- 91
+ 90
1
0
0
@@ -1459,7 +1452,7 @@
13
- 92
+ 91
1
0
0
@@ -1471,7 +1464,7 @@
13
- 93
+ 92
1
0
0
diff --git a/MDK-ARM/R2.uvprojx b/MDK-ARM/R2.uvprojx
index ee3c96d..2e3293a 100644
--- a/MDK-ARM/R2.uvprojx
+++ b/MDK-ARM/R2.uvprojx
@@ -1143,11 +1143,6 @@
1
..\User\bsp\pwm.c
-
- map.c
- 1
- ..\User\bsp\map.c
-
bsp_can.c
1
diff --git a/MDK-ARM/R2/R2.axf b/MDK-ARM/R2/R2.axf
index d54ecb2..d1b083c 100644
Binary files a/MDK-ARM/R2/R2.axf and b/MDK-ARM/R2/R2.axf differ
diff --git a/R2.ioc b/R2.ioc
index 730c0b8..4b4230a 100644
--- a/R2.ioc
+++ b/R2.ioc
@@ -155,25 +155,28 @@ Mcu.Pin22=PD14
Mcu.Pin23=PA0-WKUP
Mcu.Pin24=PA4
Mcu.Pin25=PC4
-Mcu.Pin26=PC5
-Mcu.Pin27=PE9
-Mcu.Pin28=PA7
-Mcu.Pin29=PB0
+Mcu.Pin26=PE13
+Mcu.Pin27=PC5
+Mcu.Pin28=PE9
+Mcu.Pin29=PE11
Mcu.Pin3=PB3
-Mcu.Pin30=VP_CRC_VS_CRC
-Mcu.Pin31=VP_FREERTOS_VS_CMSIS_V2
-Mcu.Pin32=VP_SYS_VS_Systick
-Mcu.Pin33=VP_TIM4_VS_ClockSourceINT
-Mcu.Pin34=VP_TIM7_VS_ClockSourceINT
-Mcu.Pin35=VP_TIM10_VS_ClockSourceINT
-Mcu.Pin36=VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS
+Mcu.Pin30=PE14
+Mcu.Pin31=PA7
+Mcu.Pin32=PB0
+Mcu.Pin33=VP_CRC_VS_CRC
+Mcu.Pin34=VP_FREERTOS_VS_CMSIS_V2
+Mcu.Pin35=VP_SYS_VS_Systick
+Mcu.Pin36=VP_TIM4_VS_ClockSourceINT
+Mcu.Pin37=VP_TIM7_VS_ClockSourceINT
+Mcu.Pin38=VP_TIM10_VS_ClockSourceINT
+Mcu.Pin39=VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS
Mcu.Pin4=PA14
Mcu.Pin5=PA13
Mcu.Pin6=PB7
Mcu.Pin7=PB6
Mcu.Pin8=PD0
Mcu.Pin9=PC11
-Mcu.PinsNb=37
+Mcu.PinsNb=40
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32F407IGHx
@@ -285,12 +288,28 @@ PD14.GPIOParameters=GPIO_Label
PD14.GPIO_Label=Buzzer
PD14.Locked=true
PD14.Signal=S_TIM4_CH3
+PE11.GPIOParameters=GPIO_PuPd,GPIO_Label
+PE11.GPIO_Label=LIGHT_B
+PE11.GPIO_PuPd=GPIO_PULLDOWN
+PE11.Locked=true
+PE11.Signal=GPIO_Input
+PE13.GPIOParameters=GPIO_PuPd,GPIO_Label
+PE13.GPIO_Label=LIGHT_C
+PE13.GPIO_PuPd=GPIO_PULLDOWN
+PE13.Locked=true
+PE13.Signal=GPIO_Input
+PE14.GPIOParameters=GPIO_PuPd,GPIO_Label
+PE14.GPIO_Label=RELAY
+PE14.GPIO_PuPd=GPIO_PULLDOWN
+PE14.Locked=true
+PE14.Signal=GPIO_Output
PE9.GPIOParameters=PinState,GPIO_PuPd,GPIO_Label
-PE9.GPIO_Label=FlagForUpper
-PE9.GPIO_PuPd=GPIO_PULLUP
+PE9.GPIO_Label=LIGHT_A
+PE9.GPIO_PuPd=GPIO_PULLDOWN
PE9.Locked=true
PE9.PinState=GPIO_PIN_SET
-PE9.Signal=GPIO_Output
+PE9.Signal=SharedStack_PE9
+PE9.Stacked=true
PF6.GPIOParameters=GPIO_Speed,GPIO_Label
PF6.GPIO_Label=IMU_HEAT_PWM
PF6.GPIO_Speed=GPIO_SPEED_FREQ_HIGH
@@ -401,6 +420,9 @@ SH.S_TIM10_CH1.0=TIM10_CH1,PWM Generation1 CH1
SH.S_TIM10_CH1.ConfNb=1
SH.S_TIM4_CH3.0=TIM4_CH3,PWM Generation3 CH3
SH.S_TIM4_CH3.ConfNb=1
+SH.SharedStack_PE9.0=GPIO_Output+0
+SH.SharedStack_PE9.1=GPIO_Input
+SH.SharedStack_PE9.ConfNb=2
SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_16
SPI1.CLKPhase=SPI_PHASE_2EDGE
SPI1.CLKPolarity=SPI_POLARITY_HIGH
diff --git a/User/Algorithm/user_math.c b/User/Algorithm/user_math.c
index 49ab692..ba15259 100644
--- a/User/Algorithm/user_math.c
+++ b/User/Algorithm/user_math.c
@@ -332,3 +332,45 @@ int abs_value(int num) {
bool is_reached(float current, float target, float mistake) {
return fabs(current - target) < mistake;
}
+
+
+
+/**
+ * @brief 读取标志位状态
+ * @param flag 当前标志位的值(0 或 1)
+ * @return 返回状态值:0、1、2...
+ */
+int read_flag_state(uint8_t flag) {
+ static uint8_t last_flag = 0; // 保存上一次的标志位状态
+ static int state = 0; // 当前状态值
+
+ if (flag == 1 && last_flag == 0) {
+ // 标志位从 0 变为 1,状态值递增
+ state++;
+ }
+
+ // 更新上一次的标志位状态
+ last_flag = flag;
+
+ return state;
+}
+// 归一化函数,将正方形坐标映射到单位圆
+void normalize_vector(double x, double y, double *out_x, double *out_y) {
+ // 处理原点情况
+ if (x == 0.0 && y == 0.0) {
+ *out_x = 0.0;
+ *out_y = 0.0;
+ return;
+ }
+
+ // 计算最大坐标绝对值和原始模长
+ const double abs_x = fabs(x);
+ const double abs_y = fabs(y);
+ const double s = fmax(abs_x, abs_y); // 最大坐标绝对值
+ const double r = sqrt(x*x + y*y); // 原始向量模长
+ const double scale = s / r; // 缩放因子
+
+ // 应用缩放并保持方向
+ *out_x = x * scale;
+ *out_y = y * scale;
+}
\ No newline at end of file
diff --git a/User/Algorithm/user_math.h b/User/Algorithm/user_math.h
index 0f5ce0e..01c3df7 100644
--- a/User/Algorithm/user_math.h
+++ b/User/Algorithm/user_math.h
@@ -161,5 +161,7 @@ uint8_t average(uint8_t arr[], uint8_t n);
int abs_value(int num);
float expo_map(float value, float expo_factor) ;
bool is_reached(float current, float target, float mistake) ;
+int read_flag_state(uint8_t flag) ;
+void normalize_vector(double x, double y, double *out_x, double *out_y) ;
#endif
diff --git a/User/Module/Chassis.c b/User/Module/Chassis.c
index 0291a32..3be8a8e 100644
--- a/User/Module/Chassis.c
+++ b/User/Module/Chassis.c
@@ -82,15 +82,16 @@ int8_t Chassis_init(Chassis_t *c,const Chassis_Param_t *param,float target_freq)
}
-void Chassis_speed_calculate(Chassis_t *c,fp32 Vx,fp32 Vy,fp32 Vw) //底盘逆运动学的解算
+void Chassis_speed_calculate(Chassis_t *c,fp32 Vx,fp32 Vy,fp32 Vw) //底盘逆运动学的解算,
{
+ fp64 Nor_Vx,Nor_Vy;//归一化后的数据
+ normalize_vector(Vx,Vy,&Nor_Vx,&Nor_Vy);
-
- c->hopemotorout.OmniSpeedOut[0] = -Vx+Vy+Vw + c->pos088 .bmi088.gyro.z;//右前
- c->hopemotorout.OmniSpeedOut[1] = -Vx-Vy+Vw + c->pos088 .bmi088.gyro.z;//右后
- c->hopemotorout.OmniSpeedOut[2] = Vx-Vy+Vw + c->pos088 .bmi088.gyro.z;//左后
- c->hopemotorout.OmniSpeedOut[3] = Vx+Vy+Vw + c->pos088 .bmi088.gyro.z;//左前
+ c->hopemotorout.OmniSpeedOut[0] = -Nor_Vx+Nor_Vy+Vw + c->pos088 .bmi088.gyro.z;//右前
+ c->hopemotorout.OmniSpeedOut[1] = -Nor_Vx-Nor_Vy+Vw + c->pos088 .bmi088.gyro.z;//右后
+ c->hopemotorout.OmniSpeedOut[2] = Nor_Vx-Nor_Vy+Vw + c->pos088 .bmi088.gyro.z;//左后
+ c->hopemotorout.OmniSpeedOut[3] = Nor_Vx+Nor_Vy+Vw + c->pos088 .bmi088.gyro.z;//左前
}
diff --git a/User/Module/config.c b/User/Module/config.c
index a21b32e..6440431 100644
--- a/User/Module/config.c
+++ b/User/Module/config.c
@@ -37,7 +37,7 @@ static const ConfigParam_t param ={
.out_limit = 3000.0f,
},
.Pitch_M2006_angle_param = {
- .p = 400.0f,
+ .p = 600.0f,
.i = 0.0f,
.d = 3.0f,
.i_limit = 2000.0f,
@@ -96,10 +96,16 @@ static const ConfigParam_t param ={
/*上层其他参数*/
/*运球*/
.DribbleConfig_Config = {
+ .dribble_flag=0,
.m3508_init_angle = 50,
- .m3508_translate_angle = 1200,
+ .m3508_translate_angle = -930,
.m3508_dribble_Reverse_speed=-3000,
. m3508_dribble_speed= 3000, // 转动速度
+ .m3508_dribble_init_speed=0,
+
+ .light_3508_flag=0,//3508平移处的光电,0初始,1到位置
+ .light_ball_flag=0,//检测球的flag
+
},
/*投球*/
@@ -109,7 +115,7 @@ static const ConfigParam_t param ={
.go1_init_position = -50,
.go1_release_threshold =-210,
.m2006_Screw_init=0,
- .Pitch_angle =57,
+ .Pitch_angle =56,
},
diff --git a/User/Module/up.c b/User/Module/up.c
index eb850c5..6ac4061 100644
--- a/User/Module/up.c
+++ b/User/Module/up.c
@@ -3,6 +3,15 @@
#include "user_math.h"
#include "bsp_buzzer.h"
#include "bsp_delay.h"
+/*接线
+
+上层用到三个光电
+1.PE9 发射用 输出高电平 LIGHTA
+2.PE11 运球上3508 输出高电平 LIGHTB
+3.PE13 三摩擦检测球 输出高电平LIGHTC
+
+
+*/
#define GEAR_RATIO_2006 (36) // 2006减速比
#define GEAR_RATIO_3508 (19)
@@ -15,8 +24,7 @@
// 定义继电器控制
-#define RELAY1_TOGGLE(state) HAL_GPIO_WritePin(GPIOE, GPIO_PIN_9, (state) ? GPIO_PIN_SET : GPIO_PIN_RESET)
-#define RELAY2_TOGGLE(state) HAL_GPIO_WritePin(GPIOE, GPIO_PIN_11, (state) ? GPIO_PIN_SET : GPIO_PIN_RESET)
+#define RELAY1_TOGGLE(state) HAL_GPIO_WritePin(GPIOE, RELAY_Pin, (state) ? GPIO_PIN_SET : GPIO_PIN_RESET)
int8_t up_init(UP_t *u,const UP_Param_t *param,float target_freq)
{
@@ -257,20 +265,19 @@ int8_t UP_control(UP_t *u,CAN_Output_t *out,CMD_t *c)
/*投篮*/
if(is_pitch){
u->motor_target .go_shoot =u->PitchContext .PitchConfig .go1_init_position ;
- is_pitch=0;
- }
- u->motor_target .Shoot_M2006_angle =u->PitchContext .PitchConfig .m2006_init_angle ;
u->motor_target .Shoot_Pitch_angle=u->PitchContext.PitchConfig.Pitch_angle;
+ is_pitch=0;
+ } //让初始go位置只读一次,后面按调整模式更改的来,后面稳定了之后,可以跟随调整模式下一块删
+ u->motor_target .Shoot_M2006_angle =u->PitchContext .PitchConfig .m2006_init_angle ;
u->PitchContext .PitchState = PITCH_PREPARE; //状态更新,开始夹球
/*运球*/
RELAY1_TOGGLE(0);//关闭气缸
-
- u->DribbleContext .DribbleState = DRIBBLE_PREPARE; //重置最初状态
u->motor_target.Dribble_M3508_speed=0;
-
+ u->motor_target .Dribble_translate_M3508_angle =u->DribbleContext .DribbleConfig .m3508_init_angle;
+ u->DribbleContext .DribbleState = DRIBBLE_PREPARE; //重置最初状态
break;
@@ -284,7 +291,8 @@ int8_t UP_control(UP_t *u,CAN_Output_t *out,CMD_t *c)
Pitch_Process(u,out,c);
break ;
- case UP_Adjust:
+ case UP_Adjust: //测试用
+
u->PitchContext.PitchConfig.go1_init_position += c->Vx ;
u->PitchContext.PitchConfig.Pitch_angle += c->Vy/100;
@@ -297,6 +305,10 @@ int8_t UP_control(UP_t *u,CAN_Output_t *out,CMD_t *c)
if(u->DribbleContext.DribbleState== DRIBBLE_PREPARE){
u->DribbleContext .DribbleState=DRIBBLE_PROCESS;
}
+ //光电状态更新
+ u->DribbleContext .DribbleConfig .light_ball_flag =read_flag_state(HAL_GPIO_ReadPin(LIGHT_C_GPIO_Port ,LIGHT_C_Pin));
+ u->DribbleContext .DribbleConfig .light_3508_flag =read_flag_state(HAL_GPIO_ReadPin(LIGHT_B_GPIO_Port ,LIGHT_B_Pin));
+
Dribble_Process(u,out);
}break ;
@@ -344,7 +356,7 @@ int8_t Pitch_Process(UP_t *u, CAN_Output_t *out,CMD_t *c)
case PITCH_PULL_TRIGGER:
- if(is_reached ( u->motorfeedback .DJmotor_feedback [0].total_angle,u->PitchContext .PitchConfig .m2006_trigger_angle,1.0f)) //当2006的总角度小于1,可以认为已经勾上,误差为1
+ if(is_reached ( u->motorfeedback .DJmotor_feedback [4].total_angle,u->PitchContext .PitchConfig .m2006_trigger_angle,1.0f)) //当2006的总角度小于1,可以认为已经勾上,误差为1
{
u->motor_target .go_shoot=u->PitchContext.PitchConfig.go1_init_position;
}
@@ -369,27 +381,41 @@ return 0;
int8_t Dribble_Process(UP_t *u, CAN_Output_t *out)
{
-
+
switch (u->DribbleContext.DribbleState) {
case DRIBBLE_TRANSLATE:
- u->motor_target .Dribble_translate_M3508_angle =u->DribbleContext .DribbleConfig.m3508_translate_angle;//平行移动
-
+ u->motor_target .Dribble_translate_M3508_angle =u->DribbleContext .DribbleConfig.m3508_translate_angle;//平行移动
+ if(is_reached(u->motorfeedback.DJmotor_feedback[3].total_angle ,u->DribbleContext .DribbleConfig.m3508_translate_angle,1.0f))
+ {
+ u->DribbleContext .DribbleState=DRIBBLE_PROCESS;//到达位置后,转移状态
+ }
break;
case DRIBBLE_PROCESS:
+
u->motor_target.Dribble_M3508_speed=u->DribbleContext .DribbleConfig.m3508_dribble_speed;
if(is_reached(u->motorfeedback .DJmotor_feedback [0].rpm,u->motor_target.Dribble_M3508_speed,70.0f)&&
is_reached(u->motorfeedback .DJmotor_feedback [1].rpm,u->motor_target.Dribble_M3508_speed,70.0f)&&
is_reached(u->motorfeedback .DJmotor_feedback [2].rpm,u->motor_target.Dribble_M3508_speed,70.0f)
) {
RELAY1_TOGGLE(1); //速度达到后打开气缸
+
+ if(u->DribbleContext .DribbleConfig .light_ball_flag == 1){//球下落检测,反转
u->motor_target.Dribble_M3508_speed=u->DribbleContext .DribbleConfig.m3508_dribble_Reverse_speed;
+ }
+ }
+ if(u->DribbleContext .DribbleConfig .light_ball_flag == 2){//球上升检测,速度给0,转移状态
+ u->DribbleContext .DribbleState=DRIBBLE_DONE;
+
}
-
break;
case DRIBBLE_DONE:
- u->motor_target.Dribble_M3508_speed=u->DribbleContext .DribbleConfig.m3508_dribble_speed;
-
+ u->motor_target.Dribble_M3508_speed=u->DribbleContext .DribbleConfig.m3508_dribble_init_speed ;//三摩擦速度归0
+ /*标志位清零*/
+ u->DribbleContext.DribbleConfig.light_ball_flag=0;
+ u->DribbleContext.DribbleConfig.light_3508_flag=0;
+
+
break;
default:
// 处理未知状态
diff --git a/User/Module/up.h b/User/Module/up.h
index 315be94..f2cdafb 100644
--- a/User/Module/up.h
+++ b/User/Module/up.h
@@ -85,11 +85,19 @@ typedef enum {
/* 参数配置结构体 */
typedef struct {
+ int8_t dribble_flag;//当移动三摩擦后为1,否则为0,防止发射撞到
+
fp32 m3508_init_angle; // 平移前位置
fp32 m3508_translate_angle; // 平移后位置
+ fp32 m3508_dribble_init_speed;
fp32 m3508_dribble_speed; // 转动速度
fp32 m3508_dribble_Reverse_speed;
+
+ /*光电标志位,初始值均为0,触发为1*/
+ uint8_t light_3508_flag;//3508平移处的光电,0初始,1到位置
+ uint8_t light_ball_flag;//检测球的flag
+
} DribbleConfig_t;
/* 状态机上下文 */
@@ -99,6 +107,8 @@ typedef struct {
uint8_t is_initialized;
+
+
} DribbleContext_t;
diff --git a/User/task/chassis_task.c b/User/task/chassis_task.c
index 40f6485..28549a0 100644
--- a/User/task/chassis_task.c
+++ b/User/task/chassis_task.c
@@ -51,9 +51,7 @@ void Task_Chassis(void *argument)
uint32_t tick = osKernelGetTickCount();
-
- HAL_GPIO_WritePin(FlagForUpper_GPIO_Port,FlagForUpper_Pin,GPIO_PIN_RESET); //拉低电平 避免未清除
-
+
while(1)
{
#ifdef DEBUG