#ifndef BALL_HPP
#define BALL_HPP
#include "main.h"
#include "cmsis_os.h"
#include "FreeRTOS.h"
#include "bsp_delay.h"
#include "djiMotor.h"
#include "pid.h"

#define HANDLING3  1

// 定义状态枚举
typedef enum {
    BALL_IDLE,         // 空闲状态
    BALL_FORWARD,      // 正转状态
    BALL_DROP,         // 球下落状态
    BALL_REVERSE,      // 反转状态
    BALL_FLAG,
    BALL_CLOSE,         // 关闭状态
    BALL_FINISH        // 完成状态
} BallState_t;

typedef enum
{
    MOTOR_1 = 0,
    MOTOR_2 = 1,
    MOTOR_3 = 2,
    MOTOR_DOWN = 3,
    MOTOR_NUM
}motorhangd_e;

// 定义光电传感器检测宏
#define IS_PHOTOELECTRIC_BALL() (HAL_GPIO_ReadPin(up_ball_GPIO_Port, up_ball_Pin) == GPIO_PIN_RESET)

class Ball
{
public:
    Ball();
    void Spin(float speed,float speed2);
    void ballHadling(void);
    void Send_control(void);
    void ballStateMachine(void);

    int16_t result[MOTOR_NUM];
    motor_measure_t *hand_Motor[MOTOR_NUM];
private:

    int up_ball_state; //上球状态 0:无球 1:有球
  
    //三个摩擦轮
    static const float M3508_speed_PID[3];
    static const float M3508_angle_PID[3];

    //电机速度pid结构体
    pid_type_def speed_pid[MOTOR_NUM];
    //位置环pid
    pid_type_def angle_pid[MOTOR_NUM];

    float angleSet;
    float speedSet[MOTOR_NUM];
};

#endif