BatteryInterface.cpp 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #include "BatteryInterface.h"
  2. BatteryInterface::BatteryInterface() {
  3. }
  4. void BatteryInterface::main(uint32_t currentTime) {
  5. if (currentTime != 0) {
  6. if (currentTime - initTime >= 3000) {
  7. //Serial.println("Checking Battery Level");
  8. this->initTime = millis();
  9. int8_t new_level = this->getBatteryLevel();
  10. //this->battery_level = this->getBatteryLevel();
  11. if (this->battery_level != new_level) {
  12. Serial.println("Battery Level changed: " + (String)new_level);
  13. this->battery_level = new_level;
  14. }
  15. }
  16. }
  17. }
  18. void BatteryInterface::RunSetup() {
  19. Wire.begin(I2C_SDA, I2C_SCL);
  20. this->initTime = millis();
  21. }
  22. int8_t BatteryInterface::getBatteryLevel() {
  23. Wire.beginTransmission(IP5306_ADDR);
  24. Wire.write(0x78);
  25. if (Wire.endTransmission(false) == 0 &&
  26. Wire.requestFrom(0x75, 1)) {
  27. this->i2c_supported = true;
  28. switch (Wire.read() & 0xF0) {
  29. case 0xE0: return 25;
  30. case 0xC0: return 50;
  31. case 0x80: return 75;
  32. case 0x00: return 100;
  33. default: return 0;
  34. }
  35. }
  36. this->i2c_supported = false;
  37. return -1;
  38. }