mirror of
https://github.com/justcallmekoko/ESP32Marauder.git
synced 2025-12-12 15:50:36 -08:00
Add MAX17048 battery monitor
This commit is contained in:
@@ -14,30 +14,79 @@ void BatteryInterface::main(uint32_t currentTime) {
|
|||||||
if (this->battery_level != new_level) {
|
if (this->battery_level != new_level) {
|
||||||
Serial.println(text00 + (String)new_level);
|
Serial.println(text00 + (String)new_level);
|
||||||
this->battery_level = new_level;
|
this->battery_level = new_level;
|
||||||
|
Serial.println("Battery Level: " + (String)this->battery_level);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BatteryInterface::RunSetup() {
|
void BatteryInterface::RunSetup() {
|
||||||
|
byte error;
|
||||||
|
byte addr;
|
||||||
|
|
||||||
Wire.begin(I2C_SDA, I2C_SCL);
|
Wire.begin(I2C_SDA, I2C_SCL);
|
||||||
|
|
||||||
|
Serial.println("Checking for battery monitors...");
|
||||||
|
|
||||||
|
for(addr = 1; addr < 127; addr++ ) {
|
||||||
|
Wire.beginTransmission(addr);
|
||||||
|
error = Wire.endTransmission();
|
||||||
|
|
||||||
|
if (error == 0)
|
||||||
|
{
|
||||||
|
Serial.print("I2C device found at address 0x");
|
||||||
|
|
||||||
|
if (addr<16)
|
||||||
|
Serial.print("0");
|
||||||
|
|
||||||
|
Serial.println(addr,HEX);
|
||||||
|
|
||||||
|
if (addr == IP5306_ADDR) {
|
||||||
|
this->has_ip5306 = true;
|
||||||
|
this->i2c_supported = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (addr == MAX17048_ADDR) {
|
||||||
|
if (maxlipo.begin()) {
|
||||||
|
Serial.println("Detected MAX17048");
|
||||||
|
this->has_max17048 = true;
|
||||||
|
this->i2c_supported = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*if (this->maxlipo.begin()) {
|
||||||
|
Serial.println("Detected MAX17048");
|
||||||
|
this->has_max17048 = true;
|
||||||
|
this->i2c_supported = true;
|
||||||
|
}*/
|
||||||
|
|
||||||
this->initTime = millis();
|
this->initTime = millis();
|
||||||
}
|
}
|
||||||
|
|
||||||
int8_t BatteryInterface::getBatteryLevel() {
|
int8_t BatteryInterface::getBatteryLevel() {
|
||||||
Wire.beginTransmission(IP5306_ADDR);
|
|
||||||
Wire.write(0x78);
|
if (this->has_ip5306) {
|
||||||
if (Wire.endTransmission(false) == 0 &&
|
Wire.beginTransmission(IP5306_ADDR);
|
||||||
Wire.requestFrom(0x75, 1)) {
|
Wire.write(0x78);
|
||||||
this->i2c_supported = true;
|
if (Wire.endTransmission(false) == 0 &&
|
||||||
switch (Wire.read() & 0xF0) {
|
Wire.requestFrom(IP5306_ADDR, 1)) {
|
||||||
case 0xE0: return 25;
|
this->i2c_supported = true;
|
||||||
case 0xC0: return 50;
|
switch (Wire.read() & 0xF0) {
|
||||||
case 0x80: return 75;
|
case 0xE0: return 25;
|
||||||
case 0x00: return 100;
|
case 0xC0: return 50;
|
||||||
default: return 0;
|
case 0x80: return 75;
|
||||||
|
case 0x00: return 100;
|
||||||
|
default: return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
this->i2c_supported = false;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (this->has_max17048) {
|
||||||
|
return this->maxlipo.cellPercent();
|
||||||
}
|
}
|
||||||
this->i2c_supported = false;
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,21 +6,24 @@
|
|||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
|
||||||
#include "configs.h"
|
#include "configs.h"
|
||||||
|
#include "Adafruit_MAX1704X.h"
|
||||||
|
|
||||||
#include <Wire.h>
|
#include <Wire.h>
|
||||||
|
|
||||||
#define I2C_SDA 33
|
|
||||||
#define I2C_SCL 22
|
|
||||||
#define IP5306_ADDR 0x75
|
#define IP5306_ADDR 0x75
|
||||||
|
#define MAX17048_ADDR 0x36
|
||||||
|
|
||||||
class BatteryInterface {
|
class BatteryInterface {
|
||||||
private:
|
private:
|
||||||
uint32_t initTime = 0;
|
uint32_t initTime = 0;
|
||||||
|
Adafruit_MAX17048 maxlipo;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
int8_t battery_level = 0;
|
int8_t battery_level = 0;
|
||||||
int8_t old_level = 0;
|
int8_t old_level = 0;
|
||||||
bool i2c_supported = false;
|
bool i2c_supported = false;
|
||||||
|
bool has_max17048 = false;
|
||||||
|
bool has_ip5306 = false;
|
||||||
|
|
||||||
BatteryInterface();
|
BatteryInterface();
|
||||||
|
|
||||||
|
|||||||
@@ -1002,7 +1002,10 @@ void MenuFunctions::battery(bool initial)
|
|||||||
if ((battery_obj.battery_level != battery_obj.old_level) || (initial)) {
|
if ((battery_obj.battery_level != battery_obj.old_level) || (initial)) {
|
||||||
battery_obj.old_level = battery_obj.battery_level;
|
battery_obj.old_level = battery_obj.battery_level;
|
||||||
display_obj.tft.fillRect(204, 0, SCREEN_WIDTH, STATUS_BAR_WIDTH, STATUSBAR_COLOR);
|
display_obj.tft.fillRect(204, 0, SCREEN_WIDTH, STATUS_BAR_WIDTH, STATUSBAR_COLOR);
|
||||||
display_obj.tft.setCursor(0, 1);
|
}
|
||||||
|
|
||||||
|
display_obj.tft.setCursor(0, 1);
|
||||||
|
/*if (!this->disable_touch) {
|
||||||
display_obj.tft.drawXBitmap(186,
|
display_obj.tft.drawXBitmap(186,
|
||||||
0,
|
0,
|
||||||
menu_icons[STATUS_BAT],
|
menu_icons[STATUS_BAT],
|
||||||
@@ -1010,8 +1013,8 @@ void MenuFunctions::battery(bool initial)
|
|||||||
16,
|
16,
|
||||||
STATUSBAR_COLOR,
|
STATUSBAR_COLOR,
|
||||||
the_color);
|
the_color);
|
||||||
display_obj.tft.drawString((String)battery_obj.battery_level + "%", 204, 0, 2);
|
}*/
|
||||||
}
|
display_obj.tft.drawString((String)battery_obj.battery_level + "%", 204, 0, 2);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -1099,14 +1102,15 @@ void MenuFunctions::updateStatusBar()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Draw battery info
|
// Draw battery info
|
||||||
//MenuFunctions::battery(false);
|
MenuFunctions::battery(false);
|
||||||
display_obj.tft.fillRect(190, 0, SCREEN_WIDTH, STATUS_BAR_WIDTH, STATUSBAR_COLOR);
|
display_obj.tft.fillRect(186, 0, 16, STATUS_BAR_WIDTH, STATUSBAR_COLOR);
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAS_ILI9341
|
#ifdef HAS_ILI9341
|
||||||
#ifdef HAS_BUTTONS
|
#ifdef HAS_BUTTONS
|
||||||
if (this->disable_touch) {
|
if (this->disable_touch) {
|
||||||
display_obj.tft.setCursor(0, 1);
|
display_obj.tft.setCursor(0, 1);
|
||||||
display_obj.tft.drawXBitmap(190,
|
display_obj.tft.drawXBitmap(186,
|
||||||
0,
|
0,
|
||||||
menu_icons[DISABLE_TOUCH],
|
menu_icons[DISABLE_TOUCH],
|
||||||
16,
|
16,
|
||||||
@@ -1207,14 +1211,15 @@ void MenuFunctions::drawStatusBar()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
//MenuFunctions::battery2(true);
|
MenuFunctions::battery(true);
|
||||||
display_obj.tft.fillRect(190, 0, SCREEN_WIDTH, STATUS_BAR_WIDTH, STATUSBAR_COLOR);
|
display_obj.tft.fillRect(186, 0, 16, STATUS_BAR_WIDTH, STATUSBAR_COLOR);
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAS_ILI9341
|
#ifdef HAS_ILI9341
|
||||||
#ifdef HAS_BUTTONS
|
#ifdef HAS_BUTTONS
|
||||||
if (this->disable_touch) {
|
if (this->disable_touch) {
|
||||||
display_obj.tft.setCursor(0, 1);
|
display_obj.tft.setCursor(0, 1);
|
||||||
display_obj.tft.drawXBitmap(190,
|
display_obj.tft.drawXBitmap(186,
|
||||||
0,
|
0,
|
||||||
menu_icons[DISABLE_TOUCH],
|
menu_icons[DISABLE_TOUCH],
|
||||||
16,
|
16,
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
//#define MARAUDER_REV_FEATHER
|
//#define MARAUDER_REV_FEATHER
|
||||||
//// END BOARD TARGETS
|
//// END BOARD TARGETS
|
||||||
|
|
||||||
#define MARAUDER_VERSION "v1.1.0"
|
#define MARAUDER_VERSION "v1.2.0"
|
||||||
|
|
||||||
//// HARDWARE NAMES
|
//// HARDWARE NAMES
|
||||||
#ifdef MARAUDER_M5STICKC
|
#ifdef MARAUDER_M5STICKC
|
||||||
@@ -1011,6 +1011,36 @@
|
|||||||
#endif
|
#endif
|
||||||
//// END GPS STUFF
|
//// END GPS STUFF
|
||||||
|
|
||||||
|
//// BATTERY STUFF
|
||||||
|
#ifdef HAS_BATTERY
|
||||||
|
|
||||||
|
#ifdef MARAUDER_V4
|
||||||
|
#define I2C_SDA 33
|
||||||
|
#define I2C_SCL 22
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef MARAUDER_V6
|
||||||
|
#define I2C_SDA 33
|
||||||
|
#define I2C_SCL 22
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef MARAUDER_V6_1
|
||||||
|
#define I2C_SDA 33
|
||||||
|
#define I2C_SCL 22
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef MARAUDER_M5STICKC
|
||||||
|
#define I2C_SDA 33
|
||||||
|
#define I2C_SCL 22
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef MARAUDER_KIT
|
||||||
|
#define I2C_SDA 33
|
||||||
|
#define I2C_SCL 22
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
//// MARAUDER TITLE STUFF
|
//// MARAUDER TITLE STUFF
|
||||||
#ifdef MARAUDER_V4
|
#ifdef MARAUDER_V4
|
||||||
#define MARAUDER_TITLE_BYTES 13578
|
#define MARAUDER_TITLE_BYTES 13578
|
||||||
|
|||||||
@@ -182,6 +182,9 @@ void setup()
|
|||||||
|
|
||||||
Serial.begin(115200);
|
Serial.begin(115200);
|
||||||
|
|
||||||
|
while(!Serial)
|
||||||
|
delay(10);
|
||||||
|
|
||||||
Serial.println("ESP-IDF version is: " + String(esp_get_idf_version()));
|
Serial.println("ESP-IDF version is: " + String(esp_get_idf_version()));
|
||||||
|
|
||||||
#ifdef HAS_SCREEN
|
#ifdef HAS_SCREEN
|
||||||
|
|||||||
Reference in New Issue
Block a user