Moved into seperate functions

This commit is contained in:
CommanderRedYT
2021-11-18 01:11:20 +01:00
parent 1c18aa2dd7
commit e2c3699eb9
4 changed files with 271 additions and 0 deletions

163
main/drivingstatistics.cpp Normal file
View File

@@ -0,0 +1,163 @@
#include "drivingstatistics.h"
// 3rd party
#include <FastLED.h>
#include "TFT_eSPI.h"
// Local
#include "globals.h"
#include "battery.h"
#include "utils.h"
float getAvgWhPerKm()
{
return drivingStatistics.wh_used / (drivingStatistics.meters_driven / 1000.f);
}
std::string getEfficiencyClassString()
{
const float avgWhPerKm = getAvgWhPerKm();
if (avgWhPerKm <= 14)
{
return "A+++";
}
else if (avgWhPerKm <= 16)
{
return "A++";
}
else if (avgWhPerKm <= 18)
{
return "A+";
}
else if (avgWhPerKm <= 20)
{
return "A";
}
else if (avgWhPerKm <= 24)
{
return "B";
}
else if (avgWhPerKm <= 28)
{
return "C";
}
else if (avgWhPerKm <= 32)
{
return "D";
}
else if (avgWhPerKm <= 36)
{
return "E";
}
else if (avgWhPerKm <= 40)
{
return "F";
}
else
{
return "G";
}
}
uint16_t getEfficiencyClassColor()
{
const float avgWhPerKm = getAvgWhPerKm();
if (avgWhPerKm <= 14)
{
return 0x1700;
}
else if (avgWhPerKm <= 16)
{
return 0x3640;
}
else if (avgWhPerKm <= 18)
{
return 0x5560;
}
else if (avgWhPerKm <= 20)
{
return 0x6CA0;
}
else if (avgWhPerKm <= 24)
{
return 0x83E0;
}
else if (avgWhPerKm <= 28)
{
return 0x9B20;
}
else if (avgWhPerKm <= 32)
{
return 0xB240;
}
else if (avgWhPerKm <= 36)
{
return 0xC980;
}
else if (avgWhPerKm <= 40)
{
return 0xE0C0;
}
else
{
return 0xF800;
}
}
void calculateStatistics()
{
EVERY_N_MILLIS( 10 ) {
static bool saveTotal = false;
if ((settings.savedStatistics.totalCentimeters / 100.f) > drivingStatistics.totalMeters)
{
drivingStatistics.totalMeters = settings.savedStatistics.totalCentimeters / 100.f;
drivingStatistics.last_cm_written = settings.savedStatistics.totalCentimeters;
}
static auto last_km_calculation = espchrono::millis_clock::now();
const auto duration = espchrono::ago(last_km_calculation).count() / 1000.0f;
last_km_calculation = espchrono::millis_clock::now();
const float meters_driven_now = (abs(avgSpeedKmh) / 3.6) * duration;
drivingStatistics.meters_driven += meters_driven_now;
drivingStatistics.totalMeters += meters_driven_now; // Udate meters driven
if (abs(avgSpeedKmh) > 1)
{
if (!saveTotal && abs(avgSpeedKmh) > 5)
{
saveTotal = true;
}
drivingStatistics.currentDrivingTime += duration;
float avgVoltage = 0;
for (auto &controller : controllers)
{
avgVoltage += controller.getCalibratedVoltage();
}
avgVoltage = avgVoltage / controllers.size();
auto watt = sumCurrent * avgVoltage;
const float ws_driven_now = watt * duration;
drivingStatistics.wh_used += ws_driven_now / 3600; // Wh
drivingStatistics.batteryWhEstimate -= ws_driven_now / 3600;
}
else
{
drivingStatistics.wh_used += (13 * duration) / 3600; // Wh
drivingStatistics.batteryWhEstimate = getRemainingWattHours();
}
if ((drivingStatistics.totalMeters > ((drivingStatistics.last_cm_written / 100.f) + 100)) || (saveTotal && abs(avgSpeedKmh) < 0.5))
{
if (saveTotal)
{
saveTotal = false;
}
drivingStatistics.last_cm_written = drivingStatistics.totalMeters * 100; // Save total Meters
settings.savedStatistics.totalCentimeters = drivingStatistics.last_cm_written;
saveSettings();
}
}
}