#ifndef BATTERY_MONITOR_H #define BATTERY_MONITOR_H #include 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