int ret = snprintf(buffer, sizeof(buffer), "%.2f\r", yaw);
// 检查格式化结果
if(ret > 0 && ret < sizeof(buffer)){
uart0_send_string(buffer);
} else {
// 发送错误标记,方便调试
uart0_send_string("Err\r");
}
格式化问题可以参考上期
发送格式化数据:
// 存储格式化后的yaw字符串
char yaw_str[20];
int str_len = snprintf(yaw_str, sizeof(yaw_str), "%f", yaw);
// 检查字符串格式化是否成功
if(str_len > 0 && str_len < sizeof(yaw_str)){
// 计算数据包总长度:帧头(1) + 数据长度 + 校验位(1) + 帧尾(1)
int packet_len = 1 + str_len + 2;
char packet[packet_len];
uint8_t checksum = 0;
int i = 0;
// 1. 添加帧头
packet[i++] = 0xA5;
// 2. 添加数据并计算校验和
for(int j = 0; j < str_len; j++){
packet[i++] = yaw_str[j];
checksum += yaw_str[j]; // 累加所有数据字节
}
// 3. 添加校验位(只取低8位)
packet[i++] = checksum & 0xFF;
// 4. 添加帧尾
packet[i++] = 0x5A;
// 发送完整数据包
for(int j = 0; j < packet_len; j++){
uart0_send_char(packet[j]);
}
} else {
// 发送错误标记数据包
const char err_packet[] = {0xA5, 'E', 'r', 'r', 0x03, 0x5A}; // 0x03是"Err"的校验和
for(int j = 0; j < sizeof(err_packet); j++){
uart0_send_char(err_packet[j]);
}
}
发送字节数据
// 定义数据包:帧头(1) + float数据(4) + 校验位(1) + 帧尾(1),共7字节
uint8_t packet[7];
uint8_t checksum = 0;
int i = 0;
// 1. 添加帧头
packet[i++] = 0xA5;
// 2. 将float拆分为4个字节并添加到数据包
// 使用指针将float转换为字节数组(注意大小端问题)
uint8_t* yaw_bytes = (uint8_t*)&yaw;
for(int j = 0; j < 4; j++){
packet[i++] = yaw_bytes[j];
checksum += yaw_bytes[j]; // 累加数据字节计算校验和
}
// 3. 添加校验位(只取低8位)
packet[i++] = checksum & 0xFF;
// 4. 添加帧尾
packet[i++] = 0x5A;
// 发送完整数据包(共7字节)
for(int j = 0; j < 7; j++){
uart0_send_char(packet[j]);
}
蓝牙单字节遥控
// //将保存的数据再发送出去
// uart0_send_char(uart_data);
//static int speed = 600;
// if(uart_data == 'A'){
//motor(speed,speed);
//}else if(uart_data == 'Z'){
//motor(0,0);
//}else if(uart_data == 'C'){
//motor(speed,-speed);
//}else if(uart_data == 'G'){
//motor(-speed,speed);
//}else if(uart_data == 'E'){
//motor(-speed,-speed);
//}else if(uart_data == 'B'){
//motor(speed,speed - 200);
//}else if(uart_data == 'H'){
//motor(speed - 200,speed);
//}else if(uart_data == 'F'){
//motor(-speed + 200,-speed);
//}else if(uart_data == 'D'){
//motor(-speed,-speed + 200);
//}else if(uart_data == 'X'){
//speed += 100;
//}else if(uart_data == 'Y'){
//speed -= 100;
//}else if(uart_data == 'a'){
//DL_GPIO_setPins(GPIOB, TRACE_PIN_BEEP_PIN);
//delay_ms(200);
//DL_GPIO_clearPins(GPIOB, TRACE_PIN_BEEP_PIN);
//}