From b8acf12fd12f16ad29ab81da9feb8f578d590bee Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Sun, 21 Nov 2021 01:51:01 +0100 Subject: [PATCH] Fixed drivingstatistics ms rounding errors --- main/drivingstatistics.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/main/drivingstatistics.cpp b/main/drivingstatistics.cpp index 9b6a99e..3104d37 100644 --- a/main/drivingstatistics.cpp +++ b/main/drivingstatistics.cpp @@ -10,6 +10,8 @@ #include "battery.h" #include "utils.h" +using namespace std::chrono_literals; + DrivingStatistics drivingStatistics; float getAvgWhPerKm() @@ -62,7 +64,7 @@ void calculateStatistics() const auto duration = espchrono::ago(last_km_calculation); last_km_calculation = espchrono::millis_clock::now(); - const float meters_driven_now = (abs(avgSpeedKmh) / 3.6) * std::chrono::floor(duration).count(); + const float meters_driven_now = (abs(avgSpeedKmh) / 3.6) * (duration.count() / 1000.); drivingStatistics.meters_driven += meters_driven_now; drivingStatistics.totalMeters += meters_driven_now; // Udate meters driven @@ -82,13 +84,13 @@ void calculateStatistics() avgVoltage = avgVoltage / controllers.size(); auto watt = sumCurrent * avgVoltage; - const float ws_driven_now = watt * std::chrono::floor(duration).count(); + const float ws_driven_now = watt * (duration.count() / 1000.); drivingStatistics.wh_used += ws_driven_now / 3600; // Wh drivingStatistics.batteryWhEstimate -= ws_driven_now / 3600; } else { - drivingStatistics.wh_used += (13 * std::chrono::floor(duration).count()) / 3600; // Wh + drivingStatistics.wh_used += (13 * (duration.count() / 1000.)) / 3600; // Wh drivingStatistics.batteryWhEstimate = getRemainingWattHours(); } @@ -108,8 +110,13 @@ void calculateStatistics() std::string get_current_driving_time_string() { auto converted = date::make_time(drivingStatistics.currentDrivingTime); - return fmt::format("Drive: {:02d}:{:02d}:{:02d}", + auto msecs = drivingStatistics.currentDrivingTime + - converted.hours() + - converted.minutes() + - converted.seconds(); + return fmt::format("Drive: {:02d}:{:02d}:{:02d}.{:03d}", converted.hours().count(), converted.minutes().count(), - converted.seconds().count()); + converted.seconds().count(), + msecs.count()); }