forked from StopPointTeam/TaiChi
servo 库新增控制单个舵机转动的功能
This commit is contained in:
parent
48712b9897
commit
1df82d551a
@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
Servo::Servo()
|
Servo::Servo()
|
||||||
{
|
{
|
||||||
SerialX = &Serial1; //默认使用 Mega 板 18 19 作为串口通信端口
|
SerialX = &DEFAULT_SERVO_SERIAL_NUM; //默认使用 Mega 板 18 19 作为串口通信端口
|
||||||
SerialX->begin(SERVO_BAUD_RATE);
|
SerialX->begin(SERVO_BAUD_RATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -24,6 +24,33 @@ Servo::Servo(HardwareSerial& serial_num)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//控制单个舵机转动
|
||||||
|
//servo_id: 舵机ID, position: 目标位置, time: 转动时间
|
||||||
|
void Servo::MoveServo(uint8_t servo_id, uint16_t position, uint16_t time)
|
||||||
|
{
|
||||||
|
uint8_t buf[11];
|
||||||
|
buf[0] = FRAME_HEADER; //填充帧头
|
||||||
|
buf[1] = FRAME_HEADER;
|
||||||
|
buf[2] = 8; //数据长度=要控制舵机数*3+5,此处=1*3+5
|
||||||
|
buf[3] = CMD_SERVO_MOVE; //填充舵机移动指令
|
||||||
|
buf[4] = 1; //要控制的舵机个数
|
||||||
|
buf[5] = GET_LOW_BYTE(time); //填充时间的低八位
|
||||||
|
buf[6] = GET_HIGH_BYTE(time); //填充时间的高八位
|
||||||
|
buf[7] = servo_id; //舵机ID
|
||||||
|
buf[8] = GET_LOW_BYTE(position); //填充目标位置的低八位
|
||||||
|
buf[9] = GET_HIGH_BYTE(position); //填充目标位置的高八位
|
||||||
|
|
||||||
|
SerialX->write(buf, 10);
|
||||||
|
|
||||||
|
#ifdef SERVO_DEBUG
|
||||||
|
//调试输出动作组执行信息
|
||||||
|
Serial.print("#SERVO: MoveServo: "); Serial.print((int)servo_id);
|
||||||
|
Serial.print(" position: "); Serial.print((int)position);
|
||||||
|
Serial.print(" time: "); Serial.println((int)time);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//运行指定动作组
|
//运行指定动作组
|
||||||
//action_num: 动作组序号, times: 执行次数
|
//action_num: 动作组序号, times: 执行次数
|
||||||
//times = 0 时无限循环
|
//times = 0 时无限循环
|
||||||
@ -100,6 +127,13 @@ void Servo::SetAllActionGroupSpeed(float speed)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//打开爪子
|
||||||
|
void Servo::OpenClaw(void)
|
||||||
|
{
|
||||||
|
MoveServo(CLAW_SERVO_ID, CLAW_OPEN_POSITION, CLAW_OPEN_USE_TIME);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//恢复初始状态,指定速度
|
//恢复初始状态,指定速度
|
||||||
void Servo::Reset(float speed)
|
void Servo::Reset(float speed)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -9,11 +9,26 @@
|
|||||||
#define SERVO_DEBUG
|
#define SERVO_DEBUG
|
||||||
|
|
||||||
|
|
||||||
|
//默认与舵机控制板连接串口
|
||||||
|
//默认使用 Mega 板 18 19 作为串口通信端口
|
||||||
|
#define DEFAULT_SERVO_SERIAL_NUM Serial1
|
||||||
|
|
||||||
|
|
||||||
|
//与舵机控制板串口通信波特率
|
||||||
#define SERVO_BAUD_RATE 9600
|
#define SERVO_BAUD_RATE 9600
|
||||||
|
|
||||||
|
|
||||||
|
//爪子舵机 id
|
||||||
|
#define CLAW_SERVO_ID 15
|
||||||
|
//爪子打开时舵机位置
|
||||||
|
#define CLAW_OPEN_POSITION 500
|
||||||
|
//爪子打开用时
|
||||||
|
#define CLAW_OPEN_USE_TIME 1000
|
||||||
|
|
||||||
|
|
||||||
//发送部分的指令
|
//发送部分的指令
|
||||||
#define FRAME_HEADER 0x55 //帧头
|
#define FRAME_HEADER 0x55 //帧头
|
||||||
|
#define CMD_SERVO_MOVE 0x03 //舵机移动指令
|
||||||
#define CMD_ACTION_GROUP_RUN 0x06 //运行动作组指令
|
#define CMD_ACTION_GROUP_RUN 0x06 //运行动作组指令
|
||||||
#define CMD_ACTION_GROUP_STOP 0x07 //停止动作组运行指令
|
#define CMD_ACTION_GROUP_STOP 0x07 //停止动作组运行指令
|
||||||
#define CMD_ACTION_GROUP_SPEED 0x0B //设置动作组运行速度指令
|
#define CMD_ACTION_GROUP_SPEED 0x0B //设置动作组运行速度指令
|
||||||
@ -35,11 +50,15 @@ public:
|
|||||||
Servo();
|
Servo();
|
||||||
Servo(HardwareSerial &serial_num); //构造函数,指定串口通信端口
|
Servo(HardwareSerial &serial_num); //构造函数,指定串口通信端口
|
||||||
|
|
||||||
|
void MoveServo(uint8_t servo_id, uint16_t position, uint16_t time); //控制单个舵机转动
|
||||||
|
|
||||||
void RunActionGroup(uint8_t action_num, uint16_t times); //运行指定动作组
|
void RunActionGroup(uint8_t action_num, uint16_t times); //运行指定动作组
|
||||||
void StopActionGroup(void); //停止动作组运行
|
void StopActionGroup(void); //停止动作组运行
|
||||||
void SetActionGroupSpeed(uint8_t action_num, float speed); //设定指定动作组的运行速度
|
void SetActionGroupSpeed(uint8_t action_num, float speed); //设定指定动作组的运行速度
|
||||||
void SetAllActionGroupSpeed(float speed); //设置所有动作组的运行速度
|
void SetAllActionGroupSpeed(float speed); //设置所有动作组的运行速度
|
||||||
|
|
||||||
|
void OpenClaw(void); //打开爪子
|
||||||
|
|
||||||
void Reset(float speed = SERVO_NORMAL_SPEED); //恢复初始状态,指定速度
|
void Reset(float speed = SERVO_NORMAL_SPEED); //恢复初始状态,指定速度
|
||||||
void Catch(float speed = SERVO_NORMAL_SPEED); //抓取,指定速度
|
void Catch(float speed = SERVO_NORMAL_SPEED); //抓取,指定速度
|
||||||
void Release(float speed = SERVO_NORMAL_SPEED); //释放,指定速度
|
void Release(float speed = SERVO_NORMAL_SPEED); //释放,指定速度
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user