diff --git a/main/displays/calibratevoltagedisplay.h b/main/displays/calibratevoltagedisplay.h index 025e88d..9c10ab1 100644 --- a/main/displays/calibratevoltagedisplay.h +++ b/main/displays/calibratevoltagedisplay.h @@ -40,10 +40,23 @@ namespace { } }; + class ResetCalibrationAction : public virtual ActionInterface + { + public: + void triggered() override { + settings.battery.front30VoltCalibration = 3000; + settings.battery.back30VoltCalibration = 3000; + settings.battery.front50VoltCalibration = 5000; + settings.battery.back50VoltCalibration = 5000; + saveSettings(); + } + }; + class BatteryVoltageCalibrationFront30VText : public virtual TextInterface { public: std::string text() const override { return fmt::format("30V Front: {:.2f}V", fixBatVoltage(settings.battery.front30VoltCalibration)); } }; class BatteryVoltageCalibrationBack30VText : public virtual TextInterface { public: std::string text() const override { return fmt::format("30V Back: {:.2f}V", fixBatVoltage(settings.battery.back30VoltCalibration)); } }; class BatteryVoltageCalibrationFront50VText : public virtual TextInterface { public: std::string text() const override { return fmt::format("50V Front: {:.2f}V", fixBatVoltage(settings.battery.front50VoltCalibration)); } }; class BatteryVoltageCalibrationBack50VText : public virtual TextInterface { public: std::string text() const override { return fmt::format("50V Back: {:.2f}V", fixBatVoltage(settings.battery.back50VoltCalibration)); } }; + class BatteryVoltageCalibratedText : public virtual TextInterface { public: std::string text() const override { if (settings.battery.applyCalibration) return fmt::format("F{:.2f}V B{:.2f}", fixFrontBatVoltage(controllers.front.feedback.batVoltage), fixFrontBatVoltage(controllers.back.feedback.batVoltage)); else return "Not activated"; } }; } namespace { @@ -55,18 +68,19 @@ namespace { public: CalibrateVoltageDisplay() { - constructMenuItem, Save30VCalibrationAction>>(); - constructMenuItem, Save50VCalibrationAction>>(); - constructMenuItem, ToggleBoolAction, CheckboxIcon, BatteryApplyCalibrationAccessor>>(); - constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); + constructMenuItem, Save30VCalibrationAction>>(); + constructMenuItem, Save50VCalibrationAction>>(); + constructMenuItem, ToggleBoolAction, CheckboxIcon, BatteryApplyCalibrationAccessor>>(); + constructMenuItem, SwitchScreenAction, StaticMenuItemIcon<&espgui::icons::back>>>(); - constructMenuItem>(); + constructMenuItem>(); - constructMenuItem>(); + constructMenuItem>(); constructMenuItem>(); - constructMenuItem>(); + constructMenuItem>(); constructMenuItem>(); - + constructMenuItem>(); + constructMenuItem, ResetCalibrationAction>>(); } }; } // Namespace diff --git a/main/texts.h b/main/texts.h index e1eae2d..a452db2 100644 --- a/main/texts.h +++ b/main/texts.h @@ -100,6 +100,7 @@ constexpr char TEXT_BATTERY_TYPE_MH1[] = "MH1 cells"; constexpr char TEXT_BATTERY_TYPE_VTC5[] = "VTC5 cells"; constexpr char TEXT_BATTERY_WHKM[] = "Wh per km"; constexpr char TEXT_BATTERY_APPLYCALIB[] = "Apply calibration"; +constexpr char TEXT_VOLTAGECALIBRATION_RESET[] = "Reset calibration"; //CalibrateVoltageDisplay constexpr char TEXT_VOLTAGECALIBRATION_30V[] = "Calibrate 30.0V"; diff --git a/main/utils.h b/main/utils.h index 98a6c0f..742012c 100644 --- a/main/utils.h +++ b/main/utils.h @@ -67,13 +67,17 @@ float fixBatVoltage(int16_t value) float fixFrontBatVoltage(int16_t value) { float frontVoltage = fixBatVoltage(value); - // settings.battery.front30VoltCalibration // Front 30.0V - // settings.battery.back30VoltCalibration // Back 30.0V - // settings.battery.front50VoltCalibration // Front 50.0V - // settings.battery.back50VoltCalibration // Back 50.0V + frontVoltage = ((frontVoltage - fixBatVoltage(settings.battery.front30VoltCalibration)) * (20.f / (fixBatVoltage(settings.battery.front50VoltCalibration) - fixBatVoltage(settings.battery.front30VoltCalibration))) + 30.f); return frontVoltage; } +float fixBackBatVoltage(int16_t value) +{ + float backVoltage = fixBatVoltage(value); + backVoltage = ((backVoltage - fixBatVoltage(settings.battery.back30VoltCalibration)) * (20.f / (fixBatVoltage(settings.battery.back50VoltCalibration) - fixBatVoltage(settings.battery.back30VoltCalibration))) + 30.f); + return backVoltage; +} + float fixBoardTemp(int16_t value) { return value/10.;