Changed to running average to improve accuracy
This commit is contained in:
parent
2713573b9b
commit
81e70925c4
@ -126,6 +126,8 @@ class UsermodBattery : public Usermod
|
|||||||
if (pinManager.allocatePin(batteryPin, false, PinOwner::UM_Battery)) {
|
if (pinManager.allocatePin(batteryPin, false, PinOwner::UM_Battery)) {
|
||||||
DEBUG_PRINTLN(F("Battery pin allocation succeeded."));
|
DEBUG_PRINTLN(F("Battery pin allocation succeeded."));
|
||||||
success = true;
|
success = true;
|
||||||
|
//initialize voltage again with analog read as that will give us faster precision
|
||||||
|
voltage = (analogReadMilliVolts(batteryPin) / 1000.0f + calibration / 2.0f) * 2.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!success) {
|
if (!success) {
|
||||||
@ -178,9 +180,9 @@ class UsermodBattery : public Usermod
|
|||||||
|
|
||||||
#ifdef ARDUINO_ARCH_ESP32
|
#ifdef ARDUINO_ARCH_ESP32
|
||||||
// use calibrated millivolts analogread on esp32 (150 mV ~ 2450 mV)
|
// use calibrated millivolts analogread on esp32 (150 mV ~ 2450 mV)
|
||||||
rawValue = analogReadMilliVolts(batteryPin);
|
rawValue = analogReadMilliVolts(batteryPin) / 1000.0f + calibration / 2.0f;
|
||||||
// calculate the voltage
|
// calculate the voltage with a 1/20th weighted running average
|
||||||
voltage = (rawValue / 1000.0f) + calibration;
|
voltage = ((voltage / 2.0f) * 19.0f + rawValue) / 20.0f;
|
||||||
// usually a voltage divider (50%) is used on ESP32, so we need to multiply by 2
|
// usually a voltage divider (50%) is used on ESP32, so we need to multiply by 2
|
||||||
voltage *= 2.0f;
|
voltage *= 2.0f;
|
||||||
#else
|
#else
|
||||||
@ -191,8 +193,8 @@ class UsermodBattery : public Usermod
|
|||||||
voltage = ((rawValue / getAdcPrecision()) * maxBatteryVoltage) + calibration;
|
voltage = ((rawValue / getAdcPrecision()) * maxBatteryVoltage) + calibration;
|
||||||
#endif
|
#endif
|
||||||
// check if voltage is within specified voltage range, allow 10% over/under voltage
|
// check if voltage is within specified voltage range, allow 10% over/under voltage
|
||||||
voltage = ((voltage < minBatteryVoltage * 0.85f) || (voltage > maxBatteryVoltage * 1.1f)) ? -1.0f : voltage;
|
//voltage = ((voltage < minBatteryVoltage * 0.85f) || (voltage > maxBatteryVoltage * 1.1f)) ? -1.0f : voltage;
|
||||||
|
|
||||||
// translate battery voltage into percentage
|
// translate battery voltage into percentage
|
||||||
/*
|
/*
|
||||||
the standard "map" function doesn't work
|
the standard "map" function doesn't work
|
||||||
|
Loading…
Reference in New Issue
Block a user