diff --git a/src/Vehicle/Vehicle.cc b/src/Vehicle/Vehicle.cc index 7d8a87f764cbb32e35ac8ed057b29d57ce3eb69f..1ee46725703cfc8c77f4b26ee013aaa8ffde2d9e 100644 --- a/src/Vehicle/Vehicle.cc +++ b/src/Vehicle/Vehicle.cc @@ -300,6 +300,7 @@ Vehicle::Vehicle(LinkInterface* link, // Start csv logger connect(&_csvLogTimer, &QTimer::timeout, this, &Vehicle::_writeCsvLine); _csvLogTimer.start(1000); + _lastBatteryAnnouncement.start(); } // Disconnected Vehicle for offline editing @@ -1126,7 +1127,7 @@ void Vehicle::_handleAttitudeQuaternion(mavlink_message_t& message) // if repr_offset is valid, rotate attitude and rates if (repr_offset.norm() >= 0.5f) { quat = quat * repr_offset; - rates = repr_offset * rates; + rates = repr_offset * rates; } float roll, pitch, yaw; @@ -1550,12 +1551,16 @@ void Vehicle::_handleSysStatus(mavlink_message_t& message) } _battery1FactGroup.percentRemaining()->setRawValue(sysStatus.battery_remaining); + //-- Low battery warning if (sysStatus.battery_remaining > 0) { - if (sysStatus.battery_remaining < _settingsManager->appSettings()->batteryPercentRemainingAnnounce()->rawValue().toInt() && - sysStatus.battery_remaining < _lastAnnouncedLowBatteryPercent) { + int warnThreshold = _settingsManager->appSettings()->batteryPercentRemainingAnnounce()->rawValue().toInt(); + if (sysStatus.battery_remaining < warnThreshold && + sysStatus.battery_remaining < _lastAnnouncedLowBatteryPercent && + _lastBatteryAnnouncement.elapsed() > (sysStatus.battery_remaining < warnThreshold * 0.5 ? 15000 : 30000)) { _say(tr("%1 low battery: %2 percent remaining").arg(_vehicleIdSpeech()).arg(sysStatus.battery_remaining)); + _lastBatteryAnnouncement.start(); + _lastAnnouncedLowBatteryPercent = sysStatus.battery_remaining; } - _lastAnnouncedLowBatteryPercent = sysStatus.battery_remaining; } if (_onboardControlSensorsPresent != sysStatus.onboard_control_sensors_present) { @@ -1656,12 +1661,13 @@ void Vehicle::_updateArmed(bool armed) if (_armed != armed) { _armed = armed; emit armedChanged(_armed); - // We are transitioning to the armed state, begin tracking trajectory points for the map if (_armed) { _trajectoryPoints->start(); _flightTimerStart(); _clearCameraTriggerPoints(); + // Reset battery warning + _lastAnnouncedLowBatteryPercent = 100; } else { _trajectoryPoints->stop(); _flightTimerStop(); diff --git a/src/Vehicle/Vehicle.h b/src/Vehicle/Vehicle.h index 460aa434d76922b6a6cb7cd4b950c196744b778d..e222f42c9e661d9114b962395104b225a434324a 100644 --- a/src/Vehicle/Vehicle.h +++ b/src/Vehicle/Vehicle.h @@ -1507,7 +1507,8 @@ private: QString _gitHash; quint64 _uid; - int _lastAnnouncedLowBatteryPercent; + QTime _lastBatteryAnnouncement; + int _lastAnnouncedLowBatteryPercent; SharedLinkInterfacePointer _priorityLink; // We always keep a reference to the priority link to manage shutdown ordering bool _priorityLinkCommanded;