mirror of
https://github.com/wled/WLED.git
synced 2025-04-19 12:27:17 +00:00

Issue: When taking the initial voltage reading after first powering on, voltage hasn't had chance to stabilize so the reading can be inaccurate, which in turn may incorrectly trigger the low-power preset. (Manifests when the user has selected a low read interval and/or is using a capacitor). Resolution: A non-blocking, fixed 10 second delay has been added to the initial voltage reading to give the voltage time to stabilize. This is a reworked version of the (now closed) PR here: https://github.com/Aircoookie/WLED/pull/3959 - Rebased the update for 0_15. - Added a constant so the delay can be modified via my_config.h. - Small adjustments to make the PR compatible again after the recent restructuring in this PR: (https://github.com/Aircoookie/WLED/pull/3003). Thankyou!
140 lines
3.5 KiB
C
140 lines
3.5 KiB
C
#ifndef UMBDefaults_h
|
|
#define UMBDefaults_h
|
|
|
|
#include "wled.h"
|
|
|
|
// pin defaults
|
|
// for the esp32 it is best to use the ADC1: GPIO32 - GPIO39
|
|
// https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/adc.html
|
|
#ifndef USERMOD_BATTERY_MEASUREMENT_PIN
|
|
#ifdef ARDUINO_ARCH_ESP32
|
|
#define USERMOD_BATTERY_MEASUREMENT_PIN 35
|
|
#else //ESP8266 boards
|
|
#define USERMOD_BATTERY_MEASUREMENT_PIN A0
|
|
#endif
|
|
#endif
|
|
|
|
// The initial delay before the first battery voltage reading after power-on.
|
|
// This allows the voltage to stabilize before readings are taken, improving accuracy of initial reading.
|
|
#ifndef USERMOD_BATTERY_INITIAL_DELAY
|
|
#define USERMOD_BATTERY_INITIAL_DELAY 10000 // (milliseconds)
|
|
#endif
|
|
|
|
// the frequency to check the battery, 30 sec
|
|
#ifndef USERMOD_BATTERY_MEASUREMENT_INTERVAL
|
|
#define USERMOD_BATTERY_MEASUREMENT_INTERVAL 30000
|
|
#endif
|
|
|
|
|
|
/* Default Battery Type
|
|
* 0 = unkown
|
|
* 1 = Lipo
|
|
* 2 = Lion
|
|
*/
|
|
#ifndef USERMOD_BATTERY_DEFAULT_TYPE
|
|
#define USERMOD_BATTERY_DEFAULT_TYPE 0
|
|
#endif
|
|
/*
|
|
*
|
|
* Unkown 'Battery' defaults
|
|
*
|
|
*/
|
|
#ifndef USERMOD_BATTERY_UNKOWN_MIN_VOLTAGE
|
|
// Extra save defaults
|
|
#define USERMOD_BATTERY_UNKOWN_MIN_VOLTAGE 3.3f
|
|
#endif
|
|
#ifndef USERMOD_BATTERY_UNKOWN_MAX_VOLTAGE
|
|
#define USERMOD_BATTERY_UNKOWN_MAX_VOLTAGE 4.2f
|
|
#endif
|
|
|
|
/*
|
|
*
|
|
* Lithium polymer (Li-Po) defaults
|
|
*
|
|
*/
|
|
#ifndef USERMOD_BATTERY_LIPO_MIN_VOLTAGE
|
|
// LiPo "1S" Batteries should not be dischared below 3V !!
|
|
#define USERMOD_BATTERY_LIPO_MIN_VOLTAGE 3.2f
|
|
#endif
|
|
#ifndef USERMOD_BATTERY_LIPO_MAX_VOLTAGE
|
|
#define USERMOD_BATTERY_LIPO_MAX_VOLTAGE 4.2f
|
|
#endif
|
|
|
|
/*
|
|
*
|
|
* Lithium-ion (Li-Ion) defaults
|
|
*
|
|
*/
|
|
#ifndef USERMOD_BATTERY_LION_MIN_VOLTAGE
|
|
// default for 18650 battery
|
|
#define USERMOD_BATTERY_LION_MIN_VOLTAGE 2.6f
|
|
#endif
|
|
#ifndef USERMOD_BATTERY_LION_MAX_VOLTAGE
|
|
#define USERMOD_BATTERY_LION_MAX_VOLTAGE 4.2f
|
|
#endif
|
|
|
|
// the default ratio for the voltage divider
|
|
#ifndef USERMOD_BATTERY_VOLTAGE_MULTIPLIER
|
|
#ifdef ARDUINO_ARCH_ESP32
|
|
#define USERMOD_BATTERY_VOLTAGE_MULTIPLIER 2.0f
|
|
#else //ESP8266 boards
|
|
#define USERMOD_BATTERY_VOLTAGE_MULTIPLIER 4.2f
|
|
#endif
|
|
#endif
|
|
|
|
#ifndef USERMOD_BATTERY_AVERAGING_ALPHA
|
|
#define USERMOD_BATTERY_AVERAGING_ALPHA 0.1f
|
|
#endif
|
|
|
|
// offset or calibration value to fine tune the calculated voltage
|
|
#ifndef USERMOD_BATTERY_CALIBRATION
|
|
#define USERMOD_BATTERY_CALIBRATION 0
|
|
#endif
|
|
|
|
// auto-off feature
|
|
#ifndef USERMOD_BATTERY_AUTO_OFF_ENABLED
|
|
#define USERMOD_BATTERY_AUTO_OFF_ENABLED true
|
|
#endif
|
|
|
|
#ifndef USERMOD_BATTERY_AUTO_OFF_THRESHOLD
|
|
#define USERMOD_BATTERY_AUTO_OFF_THRESHOLD 10
|
|
#endif
|
|
|
|
// low power indication feature
|
|
#ifndef USERMOD_BATTERY_LOW_POWER_INDICATOR_ENABLED
|
|
#define USERMOD_BATTERY_LOW_POWER_INDICATOR_ENABLED true
|
|
#endif
|
|
|
|
#ifndef USERMOD_BATTERY_LOW_POWER_INDICATOR_PRESET
|
|
#define USERMOD_BATTERY_LOW_POWER_INDICATOR_PRESET 0
|
|
#endif
|
|
|
|
#ifndef USERMOD_BATTERY_LOW_POWER_INDICATOR_THRESHOLD
|
|
#define USERMOD_BATTERY_LOW_POWER_INDICATOR_THRESHOLD 20
|
|
#endif
|
|
|
|
#ifndef USERMOD_BATTERY_LOW_POWER_INDICATOR_DURATION
|
|
#define USERMOD_BATTERY_LOW_POWER_INDICATOR_DURATION 5
|
|
#endif
|
|
|
|
// battery types
|
|
typedef enum
|
|
{
|
|
unknown=0,
|
|
lipo=1,
|
|
lion=2
|
|
} batteryType;
|
|
|
|
// used for initial configuration after boot
|
|
typedef struct bconfig_t
|
|
{
|
|
batteryType type;
|
|
float minVoltage;
|
|
float maxVoltage;
|
|
float voltage; // current voltage
|
|
int8_t level; // current level
|
|
float calibration; // offset or calibration value to fine tune the calculated voltage
|
|
float voltageMultiplier;
|
|
} batteryConfig;
|
|
|
|
#endif |