#ifndef SHOOT_HPP #define SHOOT_HPP #include "djiMotor.h" #include "pid.h" #include "GO_M8010_6_Driver.h" #include "nuc.h" #include "usart.h" #include "filter.h" // 定义状态枚举 typedef enum { SHOOT_IDLE, // 空闲状态 SHOOT_TOP, // 顶部状态 SHOOT_TENSION, // 拉回到设定 SHOOT_READY, SHOOT_WAIT, SHOOT_FIRE, // 发射状态 SHOOT_RETURN, // 自动返回状态 //运射配合 GO_TOP, BAKC, WAIT_CHANGE } ShootState_t; // // 定义状态枚举 // typedef enum { // BALL_IDLE, // 空闲状态 // BALL_FINISH, // 完成状态 // //持球状态 // BALL_TAKE, // BALL_LOSE // } BallState_t; typedef enum { UP1=1, MIDDLE1, DOWN1, SHOOT, WAIT, TEST, VSION, PASS, OFFENSIVE, DEFENSE }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); void ball_receive(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; //滤波器 LowPassFilter2p_t distance_filter; // 用于滤波视觉距离 LowPassFilter2p_t pass_filter; //==========================公共变量========================== int16_t rc_key; //遥控器按键 int16_t mode_key; int16_t ready_key; int16_t trigger_key; ShootState_t currentState; //状态机 volatile uint32_t shoot_thread;//接收传回的线程通知 fp32 distance; //视觉距离 fp32 pass_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;// 标记钩子是否已经钩住拉簧 float limit_speed;//go电机限速 int shoot_wait; }; #endif