diff --git a/src/commser.cpp b/src/commser.cpp index bf7cccf..8bbc5cb 100644 --- a/src/commser.cpp +++ b/src/commser.cpp @@ -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;