#ifndef SHOOT_HPP #define SHOOT_HPP #include "djiMotor.h" #include "pid.h" #include "GO_M8010_6_Driver.h" #include "nuc.h" #include "usart.h" // 定义状态枚举 typedef enum { SHOOT_IDLE, // 空闲状态 SHOOT_TOP, // 顶部状态 SHOOT_TENSION, // 拉回到设定 SHOOT_READY, SHOOT_WAIT, SHOOT_FIRE, // 发射状态 SHOOT_RETURN // 自动返回状态 } ShootState_t; // // 定义状态枚举 // typedef enum { // BALL_IDLE, // 空闲状态 // BALL_FINISH, // 完成状态 // //持球状态 // BALL_TAKE, // BALL_LOSE // } BallState_t; typedef enum { UP1=1, MIDDLE1, DOWN1, SHOOT, WAIT }rc_mode; // 光电传感器读取宏 #define IS_PHOTOELECTRIC_TRIGGERED() (HAL_GPIO_ReadPin(STOP_GPIO_Port, STOP_Pin) == GPIO_PIN_RESET) class Shoot { public: Shoot(); void rc_mode(); void trigger_control(void); void distanceGet(const NUC_t &nuc); void shoot_control(void); void shoot_Current(void); void RemoveError(void); int GO_SendData(float pos,float limit); //go电机 GO_MotorCmd_t go1; GO_MotorData_t *go1_data;//存放go电机数据 float control_pos; //控制位置 float fire_pos; //发射位置 struct feedback { float fd_gopos; float fd_tpos; }feedback; //扳机 float speed_trigger; int16_t result; float t_speedSet; float t_posSet;//扳机位置 float fd_tpos; //扳机反馈位置 motor_measure_t *trigger_Motor; //==========================公共变量========================== int16_t rc_key; //遥控器按键 int16_t trigger_key; ShootState_t currentState; //状态机 //volatile BallState_t ballStatus;//是否有球 volatile uint32_t flag_thread;//接收传回的线程通知 float distance; //视觉距离 private: //扳机2006 static const float M2006_speed_PID[3]; static const float M2006_angle_PID[3]; //电机速度pid结构体 pid_type_def speed_pid; //位置环pid pid_type_def angle_pid; bool is_hooked; // 标记钩子是否已经钩住拉簧 }; #endif