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