93 lines
2.0 KiB
C
93 lines
2.0 KiB
C
#include "shoot.h"
|
|
#include "remote_control.h"
|
|
|
|
extern RC_mess_t RC_mess;
|
|
extern motor_measure_t *trigger_motor_data;//3508电机数据
|
|
|
|
|
|
#define GO1_SHOOT 0
|
|
#define ODRIVE_SHOOT 1
|
|
|
|
#define KP 0.12
|
|
#define KD 0.008
|
|
|
|
|
|
#if GO1_SHOOT == 1
|
|
GO_SHOOT goshoot;
|
|
|
|
void shooterInit(void)
|
|
{
|
|
int i;
|
|
GO_M8010_init();
|
|
for(i = 0;i < GO_NUM;i ++)
|
|
{
|
|
goshoot.goData[i] = getGoPoint(i);//获取电机数据指针
|
|
|
|
goshoot.angleSetgo[i] = 0;
|
|
goshoot.offestAngle[i] = 0;
|
|
// GO_M8010_send_data(&huart1, i,0,0,0,0,0,0);
|
|
GO_M8010_send_data(&huart6, i,0,0,0,0,0,0);
|
|
goshoot.offestAngle[i] = goshoot.goData[i]->Pos;
|
|
HAL_Delay(100);
|
|
// GO_M8010_send_data(&huart1, i,0,0,0,0,0,0);
|
|
GO_M8010_send_data(&huart6, i,0,0,0,0,0,0);
|
|
goshoot.offestAngle[i] = goshoot.goData[i]->Pos;
|
|
HAL_Delay(100);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
void shoot_ball(int key)
|
|
{
|
|
|
|
|
|
//蓄力
|
|
if(trigger_motor_data->real_angle ==60)//扳机已闭合
|
|
{
|
|
goshoot.angleSetgo[0] = 10;
|
|
GO_M8010_send_data(&huart6, 0,0,0,goshoot.angleSetgo[0],1,KP,KD);
|
|
}
|
|
if (key ==2)//上升准备蓄力
|
|
{
|
|
goshoot.angleSetgo[0] = 0;
|
|
GO_M8010_send_data(&huart6, 0,0,0,goshoot.angleSetgo[0],1,KP,KD);
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
#elif ODRIVE_SHOOT == 1
|
|
//初始位置在最上面, 有球放过来, 电机转动到最下面等待发射
|
|
//发射指令,当到最高点时,扳机离合
|
|
//返回扳机,远动到最下面
|
|
|
|
extern float angle_encoder;
|
|
extern volatile int32_t multi_turn_angle ;
|
|
extern volatile uint16_t last_angle ;
|
|
|
|
void shoot_odrive(int angle)
|
|
{
|
|
// if(ball)
|
|
// {
|
|
// if(multi_turn_angle==8)
|
|
// {
|
|
// //di
|
|
// odrive_accel_cmd(AXIS0_NODE,200,200);
|
|
// odrive_pos_cmd(AXIS0_NODE,0);
|
|
// }
|
|
// else if(multi_turn_angle==0)
|
|
// {
|
|
|
|
// }
|
|
// }
|
|
odrive_accel_cmd(AXIS0_NODE,200,200);
|
|
osDelay(2);
|
|
odrive_pos_cmd(AXIS0_NODE,angle);
|
|
|
|
}
|
|
|
|
#endif
|
|
|