esp_ble_mouse/mouse/BatteryMonitor.h

40 lines
875 B
C++

#ifndef BATTERY_MONITOR_H
#define BATTERY_MONITOR_H
#include <Arduino.h>
class BatteryMonitor {
private:
uint8_t _adcPin;
const float _vref = 3.3;
const int _adcMax = 4095;
const float _voltageDividerRatio;
const float _vMax;
const float _vMin;
public:
BatteryMonitor(uint8_t adcPin,
float voltageDividerRatio = 2.0,
float vMax = 4.2,
float vMin = 3.0) :
_adcPin(adcPin),
_voltageDividerRatio(voltageDividerRatio),
_vMax(vMax),
_vMin(vMin)
{
pinMode(_adcPin, INPUT);
}
uint8_t readLevelPercent() {
int raw = analogRead(_adcPin);
float voltage = (raw * (_vref / _adcMax)) * _voltageDividerRatio;
if (voltage >= _vMax) return 100;
if (voltage <= _vMin) return 0;
return (uint8_t)(100 * (voltage - _vMin) / (_vMax - _vMin));
}
};
#endif // BATTERY_MONITOR_H