diff --git a/main/displays/speedinfodisplay.cpp b/main/displays/speedinfodisplay.cpp index 7e0c1b4..4cd37bf 100644 --- a/main/displays/speedinfodisplay.cpp +++ b/main/displays/speedinfodisplay.cpp @@ -8,6 +8,7 @@ #include "displays/batteryinfodisplay.h" #include "displays/menus/mainmenu.h" #include "displays/statusdisplay.h" +#include "drivingstatistics.h" void SpeedInfoDisplay::initScreen() { @@ -28,14 +29,38 @@ void SpeedInfoDisplay::redraw() tft.setTextColor(TFT_WHITE, TFT_BLACK); tft.setTextFont(4); - tft.setTextSize(3); + tft.setTextSize(4); - m_labelSpeed.redraw(fmt::format(avgSpeedKmh < 10 ? "{:.3f}" : "{:.1f}", avgSpeedKmh)); + m_labelSpeed.redraw(fmt::format( + std::abs(avgSpeedKmh) < 10 ? "{:.2f}" : + (std::abs(avgSpeedKmh) < 100 ? "{:.1f}" : "{:.0f}"), + avgSpeedKmh)); + + tft.setTextSize(1); + m_batteryPercentLabel.redraw(getBatteryPercentageString()); + + if (const auto avgVoltage = controllers.getAvgVoltage(); avgVoltage) { + auto watt = sumCurrent * *avgVoltage; + auto wh_per_km = std::abs(avgSpeedKmh) > 0.1 ? watt / std::abs(avgSpeedKmh) : 0; + + m_voltageLabel.redraw(fmt::format("{:.1f} V", avgVoltage.value())); + m_currentConsumptionLabel.redraw(fmt::format("{:.1f} Wh/km", wh_per_km)); + } else { + m_voltageLabel.redraw("No voltage"); + m_currentConsumptionLabel.redraw("No comsumption"); + } + + m_distanceLabel.redraw(fmt::format( + drivingStatistics.meters_driven > 1000 ? "{:.3f} km" : + (drivingStatistics.meters_driven > 100 ? "{:.1f} m" : "{:.2f} m"), + drivingStatistics.meters_driven > 1000 ? + drivingStatistics.meters_driven / 1000 : + drivingStatistics.meters_driven)); tft.setTextSize(1); - m_dischargingBar.redraw(sumCurrent<0.f?(-sumCurrent):0.f); - m_chargingBar.redraw(sumCurrent>0.f?sumCurrent:0.f); + m_dischargingBar.redraw(sumCurrent < 0.f ? (-sumCurrent) : 0.f); + m_chargingBar.redraw(sumCurrent > 0.f ? sumCurrent : 0.f); } void SpeedInfoDisplay::buttonPressed(espgui::Button button) diff --git a/main/displays/speedinfodisplay.h b/main/displays/speedinfodisplay.h index 928136a..1ddb05c 100644 --- a/main/displays/speedinfodisplay.h +++ b/main/displays/speedinfodisplay.h @@ -19,8 +19,13 @@ public: void buttonPressed(espgui::Button button) override; private: - espgui::Label m_labelSpeed{28, 70}; + espgui::Label m_labelSpeed{5, 5}; - espgui::ReverseProgressBar m_dischargingBar{10, 155, espgui::tft.width()/2 - 10, 25, 0, 40, TFT_GREEN}; - espgui::ProgressBar m_chargingBar{espgui::tft.width()/2, 155, espgui::tft.width()/2 - 10, 25, 0, 40, TFT_RED}; + espgui::ReverseProgressBar m_dischargingBar{10, 110, espgui::tft.width()/2 - 10, 25, 0, 40, TFT_GREEN}; + espgui::ProgressBar m_chargingBar{espgui::tft.width()/2, 110, espgui::tft.width()/2 - 10, 25, 0, 40, TFT_RED}; + + espgui::Label m_batteryPercentLabel{5, 150}; + espgui::Label m_voltageLabel{5, 190}; + espgui::Label m_distanceLabel{5, 230}; + espgui::Label m_currentConsumptionLabel{5, 270}; };