bug fixes

This commit is contained in:
Maximilian Mewes 2024-04-30 15:24:02 +02:00
parent 3cc60fa4d4
commit a13f1a9bee
4 changed files with 75 additions and 45 deletions

View File

@ -32,7 +32,14 @@ class Battery
this->setCalibration(USERMOD_BATTERY_CALIBRATION);
}
virtual void update(batteryConfig cfg) = 0;
virtual void update(batteryConfig cfg)
{
if(cfg.minVoltage) this->setMinVoltage(cfg.minVoltage);
if(cfg.maxVoltage) this->setMaxVoltage(cfg.maxVoltage);
if(cfg.level) this->setLevel(cfg.level);
if(cfg.calibration) this->setCalibration(cfg.calibration);
if(cfg.voltageMultiplier) this->setVoltageMultiplier(cfg.voltageMultiplier);
}
/**
* Corresponding battery curves
@ -49,10 +56,10 @@ class Battery
/*
*
* Getter and Setter
*
*/
*
* Getter and Setter
*
*/
/*
* Get lowest configured battery voltage
@ -63,26 +70,26 @@ class Battery
}
/*
* Set lowest battery voltage
* can't be below 0 volt
*/
* Set lowest battery voltage
* can't be below 0 volt
*/
virtual void setMinVoltage(float voltage)
{
this->minVoltage = max(0.0f, voltage);
}
/*
* Get highest configured battery voltage
*/
* Get highest configured battery voltage
*/
virtual float getMaxVoltage()
{
return this->maxVoltage;
}
/*
* Set highest battery voltage
* can't be below minVoltage
*/
* Set highest battery voltage
* can't be below minVoltage
*/
virtual void setMaxVoltage(float voltage)
{
this->maxVoltage = max(getMinVoltage()+.5f, voltage);
@ -110,43 +117,43 @@ class Battery
void setLevel(float level)
{
this->level = constrain(level, 0.0f, 110.0f);;
this->level = constrain(level, 0.0f, 110.0f);
}
/*
* Get the configured calibration value
* a offset value to fine-tune the calculated voltage.
*/
* Get the configured calibration value
* a offset value to fine-tune the calculated voltage.
*/
virtual float getCalibration()
{
return calibration;
}
/*
* Set the voltage calibration offset value
* a offset value to fine-tune the calculated voltage.
*/
* Set the voltage calibration offset value
* a offset value to fine-tune the calculated voltage.
*/
virtual void setCalibration(float offset)
{
calibration = offset;
}
/*
* Get the configured calibration value
* a value to set the voltage divider ratio
*/
* Get the configured calibration value
* a value to set the voltage divider ratio
*/
virtual float getVoltageMultiplier()
{
return voltageMultiplier;
}
/*
* Set the voltage multiplier value
* a value to set the voltage divider ratio.
*/
* Set the voltage multiplier value
* a value to set the voltage divider ratio.
*/
virtual void setVoltageMultiplier(float multiplier)
{
voltageMultiplier = voltageMultiplier;
voltageMultiplier = multiplier;
}
};

View File

@ -19,14 +19,6 @@ class Lion : public Battery
this->setMaxVoltage(USERMOD_BATTERY_LION_MAX_VOLTAGE);
}
void update(batteryConfig cfg)
{
if(cfg.minVoltage) this->setMinVoltage(cfg.minVoltage);
if(cfg.maxVoltage) this->setMaxVoltage(cfg.maxVoltage);
if(cfg.level) this->setLevel(cfg.level);
if(cfg.calibration) this->setCalibration(cfg.calibration);
}
float mapVoltage(float v, float min, float max) override
{
return this->linearMapping(v, min, max); // basic mapping

View File

@ -19,14 +19,6 @@ class Lipo : public Battery
this->setMaxVoltage(USERMOD_BATTERY_LIPO_MAX_VOLTAGE);
}
void update(batteryConfig cfg)
{
if(cfg.minVoltage) this->setMinVoltage(cfg.minVoltage);
if(cfg.maxVoltage) this->setMaxVoltage(cfg.maxVoltage);
if(cfg.level) this->setLevel(cfg.level);
if(cfg.calibration) this->setCalibration(cfg.calibration);
}
/**
* LiPo batteries have a differnt discharge curve, see
* https://blog.ampow.com/lipo-voltage-chart/

View File

@ -264,6 +264,7 @@ class UsermodBattery : public Usermod
battery[F("min-voltage")] = bat->getMinVoltage();
battery[F("max-voltage")] = bat->getMaxVoltage();
battery[F("calibration")] = bat->getCalibration();
battery[F("voltage-multiplier")] = bat->getVoltageMultiplier();
battery[FPSTR(_readInterval)] = readingInterval;
JsonObject ao = battery.createNestedObject(F("auto-off")); // auto off section
@ -283,6 +284,7 @@ class UsermodBattery : public Usermod
getJsonValue(battery[F("min-voltage")], cfg.minVoltage);
getJsonValue(battery[F("max-voltage")], cfg.maxVoltage);
getJsonValue(battery[F("calibration")], cfg.calibration);
getJsonValue(battery[F("voltage-multiplier")], cfg.voltageMultiplier);
setReadingInterval(battery[FPSTR(_readInterval)] | readingInterval);
@ -459,6 +461,7 @@ class UsermodBattery : public Usermod
setMinBatteryVoltage(battery[F("min-voltage")] | bat->getMinVoltage());
setMaxBatteryVoltage(battery[F("max-voltage")] | bat->getMaxVoltage());
setCalibration(battery[F("calibration")] | calibration);
setVoltageMultiplier(battery[F("voltage-multiplier")] | voltageMultiplier);
setReadingInterval(battery[FPSTR(_readInterval)] | readingInterval);
getUsermodConfigFromJsonObject(battery);
@ -537,7 +540,25 @@ class UsermodBattery : public Usermod
return USERMOD_ID_BATTERY;
}
/**
* get currently active battery type
*/
batteryType getBatteryType()
{
return cfg.type;
}
/**
* Set currently active battery type
*/
batteryType setBatteryType(batteryType type)
{
cfg.type = type;
}
/**
*
*/
unsigned long getReadingInterval()
{
return readingInterval;
@ -561,7 +582,7 @@ class UsermodBattery : public Usermod
/**
* Set lowest battery voltage
* cant be below 0 volt
* can't be below 0 volt
*/
void setMinBatteryVoltage(float voltage)
{
@ -622,6 +643,24 @@ class UsermodBattery : public Usermod
bat->setCalibration(offset);
}
/**
* Set the voltage multiplier value
* A multiplier that may need adjusting for different voltage divider setups
*/
void setVoltageMultiplier(float multiplier)
{
bat->setVoltageMultiplier(multiplier);
}
/*
* Get the voltage multiplier value
* A multiplier that may need adjusting for different voltage divider setups
*/
float getVoltageMultiplier()
{
return bat->getVoltageMultiplier();
}
/**
* Get auto-off feature enabled status
* is auto-off enabled, true/false
@ -727,7 +766,7 @@ class UsermodBattery : public Usermod
}
/**
* Get low-power-indicator status when the indication is done thsi returns true
* Get low-power-indicator status when the indication is done this returns true
*/
bool getLowPowerIndicatorDone()
{