Fix battery voltage readouts

This commit is contained in:
Nik Rozman
2026-03-02 15:45:01 +01:00
parent ee1d13f177
commit c41a2932ba
3 changed files with 8 additions and 3 deletions

View File

@@ -20,7 +20,8 @@ void initBatteryADC() {
float readBatteryVoltage() {
// 8 quick reads, no delay() calls, no analogReference() change
int32_t raw=0; for (int i=0; i<8; i++) raw += analogRead(PIN_VBAT_READ); raw /= 8;
return (raw / 4096.0f) * 3.0f * 2.0f;
// Seeed XIAO nRF52840 Sense: 1MΩ + 510kΩ voltage divider on VBAT → multiply by 1510/510
return (raw / 4096.0f) * 3.0f * (1510.0f / 510.0f);
}
int batteryPercent(float v) {

View File

@@ -231,7 +231,7 @@ void setup() {
blehid.begin();
#ifdef FEATURE_BATTERY_MONITOR
blebas.begin(); blebas.write(100);
blebas.begin(); blebas.write(batteryPercent(readBatteryVoltage()));
#endif
#ifdef FEATURE_CONFIG_SERVICE

View File

@@ -125,8 +125,12 @@ async function discoverServices() {
// Telemetry notify (1 Hz) — also carries chargeStatus
chars.telemetry.addEventListener('characteristicvaluechanged', e => parseTelemetry(e.target.value));
await chars.telemetry.startNotifications();
// Initial read so values show immediately
// Initial read so values show immediately. Also force updateChargeUI() here
// because parseTelemetry() only calls it on a *change*, and currentChargeStatus
// starts at 0 (discharging) — so a discharging device would never trigger the
// update and ciStatus would stay at '--'.
parseTelemetry(await chars.telemetry.readValue());
updateChargeUI();
// IMU stream — subscribed on demand via play button
chars.imuStream.addEventListener('characteristicvaluechanged', e => parseImuStream(e.target.value));