? ? ? ? 本章节作为上一章节的续版,增添了设置ID,单独发送ID控制舵机的代码,以及设置波特率的舵机驱动代码(并不是所有舵机都支持修改波特率),代码仅供参考,真实使用需要配合自己舵机的数据手册和编程手册进行编写驱动程序。
void send_set_id(uint8_t id)
{
uint8_t i = 0;
uint8_t Data_buffer[15];
Data_buffer[0] = 0xFF; //头地址
Data_buffer[1] = 0xFF; //头地址
Data_buffer[2] = 0xFE; //广播
Data_buffer[3] = 0x04; //长度
Data_buffer[4] = 0x03; //WRITE DATA
Data_buffer[5] = 0X05; //舵机ID
Data_buffer[6] = id;
Data_buffer[7]= (~(Data_buffer[2] + Data_buffer[3] + Data_buffer[4] + Data_buffer[5] + Data_buffer[6])) & 0xFF;
for(i = 0;i <= 7;i ++)
{
printf("%c",Data_buffer[i]);//一个一个发送出
}
}
void send_Baud_Rate(uint8_t Baud_Rate) //5=115200 9=1000000
{
uint8_t i = 0;
uint8_t Data_buffer[10];
Data_buffer[0]=0xFF; //头地址
Data_buffer[1]=0xFF; //头地址
Data_buffer[2]=0xFE; //广播
Data_buffer[3]=0x04; //长度
Data_buffer[4]=0x03; //WRITE DATA
Data_buffer[5]=0x1E; //角度存储地址
Data_buffer[6]=Baud_Rate;
Data_buffer[7]= (~(Data_buffer[2] + Data_buffer[3] + Data_buffer[4] + Data_buffer[5] + Data_buffer[6])) & 0xFF;
for(i = 0;i <= 7;i ++)
{
printf("%c",Data_buffer[i]);//一个一个发送出
}
}
void send_position(uint8_t id,unsigned short Control_Angle) //有效范围:0~4095
{
uint8_t j = 0;
uint8_t Data_buffer[15];
Data_buffer[0]=0xFF; //头地址
Data_buffer[1]=0xFF; //头地址
Data_buffer[2]=id; //广播
Data_buffer[3]=0x05; //长度
Data_buffer[4]=0x04; //Reg Write
Data_buffer[5]=0X2A; //角度存储地址
//因为unsigned short是16位,uint8_t是8位,需要取出上8位和下8位
Data_buffer[6]=Control_Angle >> 8;//上8位
Data_buffer[7]=(Control_Angle << 8) >> 8;//下8位
//校验位是除开头地址之外,其他地址和
Data_buffer[8]= (~(Data_buffer[2] + Data_buffer[3] + Data_buffer[4] + Data_buffer[5] + Data_buffer[6] + Data_buffer[7])) & 0xFF;
for(j = 0;j <= 8;j ++)
{
printf("%c",Data_buffer[j]);//一个一个发送出
}
}
void send_position_time(uint8_t id,unsigned short Control_Angle,unsigned short Time) //有效范围:0~4095
{
uint8_t j = 0;
uint8_t Data_buffer[15];
Data_buffer[0]=0xFF; //头地址
Data_buffer[1]=0xFF; //头地址
Data_buffer[2]=id; //0xFE广播
Data_buffer[3]=0x07; //长度
Data_buffer[4]=0x04; //Reg Write
Data_buffer[5]=0X2A; //角度存储地址
//因为unsigned short是16位,uint8_t是8位,需要取出上8位和下8位
Data_buffer[6]=Control_Angle >> 8;//上8位
Data_buffer[7]=(Control_Angle << 8) >> 8;//下8位
Data_buffer[8]=Time >> 8;//上8位
Data_buffer[9]=(Time << 8) >> 8;//下8位
//校验位是除开头地址之外,其他地址和
Data_buffer[10]= (~(Data_buffer[2] + Data_buffer[3] + Data_buffer[4] + Data_buffer[5] + Data_buffer[6] + Data_buffer[7] + Data_buffer[8] + Data_buffer[9])) & 0xFF;
for(j = 0;j <= 10;j ++)
{
printf("%c",Data_buffer[j]);//一个一个发送出
}
}
? ? ? ? 开源是为了相互提升,相互帮助,如果对代码有疑问可在评论区进行探讨,希望大家可以一起加油成长!