You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
902 B
51 lines
902 B
/* |
|
* AP_BatteryMonitor.h |
|
* |
|
*/ |
|
|
|
#ifndef AP_BATTERYMONITOR_H_ |
|
#define AP_BATTERYMONITOR_H_ |
|
|
|
#include <inttypes.h> |
|
#include <wiring.h> |
|
|
|
namespace apo { |
|
|
|
class AP_BatteryMonitor { |
|
public: |
|
AP_BatteryMonitor(uint8_t pin, float voltageDivRatio, float minVolt, float maxVolt) : |
|
_pin(pin), _voltageDivRatio(voltageDivRatio), |
|
_minVolt(minVolt), _maxVolt(maxVolt), _voltage(maxVolt) { |
|
} |
|
|
|
void update() { |
|
// low pass filter on voltage |
|
_voltage = _voltage*.9 + (analogRead(_pin)/255)*_voltageDivRatio*0.1; |
|
} |
|
|
|
/** |
|
* Accessors |
|
*/ |
|
float getVoltage() { |
|
return _voltage; |
|
} |
|
|
|
uint8_t getPercentage() { |
|
float norm = (_voltage-_minVolt)/(_maxVolt-_minVolt); |
|
if (norm < 0) norm = 0; |
|
else if (norm > 1) norm = 1; |
|
return 100*norm; |
|
} |
|
|
|
private: |
|
|
|
uint8_t _pin; |
|
float _voltageDivRatio; |
|
float _voltage; |
|
float _minVolt; |
|
float _maxVolt; |
|
}; |
|
|
|
} // namespace apo |
|
|
|
#endif /* AP_BATTERYMONITOR_H_ */
|
|
|