Skip to Content
DocumentationStandard ServicesBattery Level ServiceArduino

Arduino

This sample code shows how to use the Battery Level Service in an Arduino project.

// Adafruit Bluefruit nRF52 (e.g. Feather nRF52832 / nRF52840) #include <bluefruit.h> // Battery Service (0x180F) with Battery Level characteristic (0x2A19) BLEBas blebas; // Battery sense: A7 on nRF52832, A6 on nRF52840 Feather #if defined(NRF52840_XXAA) #define VBAT_PIN A6 #else #define VBAT_PIN A7 #endif // Convert ADC to voltage (Feather divider); then LiPo 3.0V–4.2V -> 0–100% uint8_t readBatteryPercent() { analogReference(AR_INTERNAL_3_0); analogReadResolution(12); int raw = analogRead(VBAT_PIN); float v = (float)raw * (3.0f / 4096.0f) * (3.0f / 2.0f); // divider on Feather if (v < 3.0f) return 0; if (v > 4.2f) return 100; return (uint8_t)((v - 3.0f) / 1.2f * 100.0f); } void setup() { Serial.begin(115200); Bluefruit.begin(); Bluefruit.setName("Arduino-Battery"); blebas.begin(); blebas.write(0); // initial value; updated in loop // Advertise Battery Service Bluefruit.Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE); Bluefruit.Advertising.addTxPower(); Bluefruit.Advertising.addService(blebas); Bluefruit.ScanResponse.addName(); Bluefruit.Advertising.restartOnDisconnect(true); Bluefruit.Advertising.setInterval(32, 244); Bluefruit.Advertising.start(0); } void loop() { uint8_t pct = readBatteryPercent(); blebas.write(pct); Serial.print("Battery: "); Serial.print(pct); Serial.println("%"); delay(15000); }
Last updated on