Refactored battery measurement function
This commit is contained in:
@@ -37,22 +37,28 @@ static CayenneLPP cayenne(51);
|
||||
|
||||
#if MBED_CONF_APP_BATTERY_ENABLED
|
||||
AnalogIn bat(MBED_CONF_APP_BATTERY_ADC);
|
||||
AnalogIn vrefint(ADC_VREF);
|
||||
AnalogIn vref(ADC_VREF);
|
||||
|
||||
static float battery_voltage() {
|
||||
float vbat = bat.read();
|
||||
double vdd = (1.224f) / vrefint.read();
|
||||
float vrefin = vref.read();
|
||||
|
||||
return vbat * MBED_CONF_APP_BATTERY_RATIO * vdd;
|
||||
float vrefcal = (float)(*(uint16_t*)VREFINT_CAL_ADDR) * (1.0f / (float)0xFFF);
|
||||
float vdda = 3.0f * vrefcal / vrefin;
|
||||
|
||||
return vbat * vdda * MBED_CONF_APP_BATTERY_RATIO;
|
||||
}
|
||||
|
||||
static uint8_t battery_level() {
|
||||
float vbat = battery_voltage();
|
||||
|
||||
double ratio = 253.0f / (4.2f - 3.3f);
|
||||
int value = ratio * (vbat - 3.4f) + 1.0f;
|
||||
|
||||
return value < 1 ? 1 : (value > 254 ? 254 : value);
|
||||
if (vbat >= MBED_CONF_APP_BATTERY_MAX) {
|
||||
return 254;
|
||||
} else if (vbat > MBED_CONF_APP_BATTERY_MIN && vbat < MBED_CONF_APP_BATTERY_MAX) {
|
||||
return ( 253 * ( vbat - MBED_CONF_APP_BATTERY_MIN ) ) / ( MBED_CONF_APP_BATTERY_MAX - MBED_CONF_APP_BATTERY_MIN ) + 1;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -28,6 +28,8 @@
|
||||
"battery-lpp-id": { "value": 1 },
|
||||
"battery-in-lpp": { "value": "false" },
|
||||
"battery-adc": { "value": "NC" },
|
||||
"battery-min": { "value": "3.20f" },
|
||||
"battery-max": { "value": "4.15f" },
|
||||
"battery-ratio": { "value": "2.0f" },
|
||||
"hx711-enabled": { "value": "false" },
|
||||
"hx711-lpp-id": { "value": 2 },
|
||||
|
||||
Reference in New Issue
Block a user