|
|
|
@ -37,22 +37,28 @@ static CayenneLPP cayenne(51); |
|
|
|
|
|
|
|
|
|
|
|
#if MBED_CONF_APP_BATTERY_ENABLED |
|
|
|
#if MBED_CONF_APP_BATTERY_ENABLED |
|
|
|
AnalogIn bat(MBED_CONF_APP_BATTERY_ADC); |
|
|
|
AnalogIn bat(MBED_CONF_APP_BATTERY_ADC); |
|
|
|
AnalogIn vrefint(ADC_VREF); |
|
|
|
AnalogIn vref(ADC_VREF); |
|
|
|
|
|
|
|
|
|
|
|
static float battery_voltage() { |
|
|
|
static float battery_voltage() { |
|
|
|
float vbat = bat.read(); |
|
|
|
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() { |
|
|
|
static uint8_t battery_level() { |
|
|
|
float vbat = battery_voltage(); |
|
|
|
float vbat = battery_voltage(); |
|
|
|
|
|
|
|
|
|
|
|
double ratio = 253.0f / (4.2f - 3.3f); |
|
|
|
if (vbat >= MBED_CONF_APP_BATTERY_MAX) { |
|
|
|
int value = ratio * (vbat - 3.4f) + 1.0f; |
|
|
|
return 254; |
|
|
|
|
|
|
|
} else if (vbat > MBED_CONF_APP_BATTERY_MIN && vbat < MBED_CONF_APP_BATTERY_MAX) { |
|
|
|
return value < 1 ? 1 : (value > 254 ? 254 : value); |
|
|
|
return ( 253 * ( vbat - MBED_CONF_APP_BATTERY_MIN ) ) / ( MBED_CONF_APP_BATTERY_MAX - MBED_CONF_APP_BATTERY_MIN ) + 1; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
return 1; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
|