【类 型】:fix

【原  因】:mavlink拿的飞控电压 数据类型是int_16 只能显示65伏 超出会溢出
【过  程】:改用case MAVLINK_MSG_ID_BATTERY_STATUS: // #147: 高压/多电芯电池状态 拿电压
【影  响】:
This commit is contained in:
air 2025-06-18 20:14:39 +08:00
parent fcbafffa9d
commit 1d7b31716c

View File

@ -721,12 +721,12 @@ void mavlink_receiveCallback(uint8_t c)
{
mavlink_sys_status_t sys_status; // 解构的数据放到这个对象
mavlink_msg_sys_status_decode(&msg, &sys_status); // 解构msg数据
// 电压
sprintf(buf, "%.2f", (double)sys_status.voltage_battery / 1000);
if (topicPubMsg[1] != buf)
{ // 有更新 则更新数据
topicPubMsg[1] = buf;
}
// // 电压
// sprintf(buf, "%.2f", (double)sys_status.voltage_battery / 1000);
// if (topicPubMsg[1] != buf)
// { // 有更新 则更新数据
// topicPubMsg[1] = buf;
// }
// 电流
sprintf(buf, "%.2f", (double)sys_status.current_battery / 100); // 解构中 1=10毫安 所以这里/100 最终单位是A 安培
if (topicPubMsg[2] != buf)
@ -742,6 +742,28 @@ void mavlink_receiveCallback(uint8_t c)
}
break;
case MAVLINK_MSG_ID_BATTERY_STATUS: // #147: 高压/多电芯电池状态
{
mavlink_battery_status_t battery_status;
mavlink_msg_battery_status_decode(&msg, &battery_status);
float total_voltage = 0.0f;
for (int i = 0; i < 10; ++i)
{
if (battery_status.voltages[i] != UINT16_MAX)
{ // 65535表示无效
total_voltage += battery_status.voltages[i] / 1000.0f; // 转换成 V
}
}
sprintf(buf, "%.2f", total_voltage); // 转成字符串
if (topicPubMsg[1] != buf)
{
topicPubMsg[1] = buf; // 更新电压显示
}
}
break;
case MAVLINK_MSG_ID_RAW_IMU: // #27: RAW_IMU
{
mavlink_raw_imu_t raw_imu;