40 lines
875 B
C++
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
|