From c9c6a3d003289d4faeada56ad969b63463bc912b Mon Sep 17 00:00:00 2001 From: Anthony Hinsinger Date: Tue, 12 Mar 2019 23:50:12 +0100 Subject: [PATCH] Refactored battery measurement function --- main.cpp | 20 +++++++++++++------- mbed_app.json | 2 ++ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/main.cpp b/main.cpp index 7c285d8..758cb3f 100644 --- a/main.cpp +++ b/main.cpp @@ -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 diff --git a/mbed_app.json b/mbed_app.json index 5b6c5cc..5c33375 100644 --- a/mbed_app.json +++ b/mbed_app.json @@ -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 },