diff --git a/data/index.html b/data/index.html
index 58a3e4c..7344687 100644
--- a/data/index.html
+++ b/data/index.html
@@ -22,6 +22,8 @@
%TITLE%
+ Battery Voltage: %BATTERY_VOLTAGE% V
+ Battery Level: %BATTERY_LEVEL% %
diff --git a/src/defaults.h b/src/defaults.h
index 7184ca6..550f1ac 100644
--- a/src/defaults.h
+++ b/src/defaults.h
@@ -9,6 +9,11 @@
#define WIFI_PASS "CaptureTheFlag"
#endif
+
+#ifndef BAT_LOW_PERCENT
+#define BAT_LOW_PERCENT 10
+#endif
+
#ifndef FACTION_1_NAME
#define FACTION_1_NAME "Team A"
#endif
diff --git a/src/main.cpp b/src/main.cpp
index d1e80c7..2245904 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -70,6 +70,12 @@ uint8_t Faction_1_dot = 0;
uint8_t Faction_2_dot = 0;
uint8_t Faction_3_dot = 0;
+float loadvoltage = 0;
+int battery_level = 0;
+
+const uint8_t sevenSeg_bat[] = {0x00, 0b01111100, 0b01110111, 0b01111000};
+const uint8_t sevenSeg_low[] = {0b00111000, 0b01011100, 0x00, 0x00};
+
String processor(const String &var)
{
char buffer[16] = {0};
@@ -104,6 +110,16 @@ String processor(const String &var)
if (var == "TITLE")
return WIFI_SSID;
+ if (var == "BATTERY_LEVEL")
+ {
+ sprintf(buffer, "%d", battery_level);
+ return String(buffer);
+ }
+ if (var == "BATTERY_VOLTAGE")
+ {
+ sprintf(buffer, "%f", loadvoltage);
+ return String(buffer);
+ }
return String(buffer);
}
@@ -210,6 +226,21 @@ public:
void SevenSeg_Output()
{
+ if (battery_level < BAT_LOW_PERCENT)
+ {
+ disp_FAC_1.setBrightness(0);
+ disp_FAC_2.setBrightness(0);
+ disp_FAC_3.setBrightness(0);
+
+ disp_FAC_3.setSegments(sevenSeg_bat);
+ disp_FAC_2.setSegments(sevenSeg_low);
+ if (millis() % 5000 > 2500)
+ disp_FAC_1.showNumberDec(battery_level);
+ else
+ disp_FAC_1.showNumberDecEx(loadvoltage * 100, 0x40);
+ }
+ else
+ {
disp_FAC_1.setBrightness(activeFaction == FACTION_1 ? 7 : 0);
disp_FAC_2.setBrightness(activeFaction == FACTION_2 ? 7 : 0);
disp_FAC_3.setBrightness(activeFaction == FACTION_3 ? 7 : 0);
@@ -284,10 +315,12 @@ void inputGetterTicker_callback()
void powerMonitorTicker_callback()
{
+
+ // loadvoltage and percentage is global, because of battery Monitoring
+
float shuntvoltage = 0;
- float busvoltage = 0;
float current_mA = 0;
- float loadvoltage = 0;
+ float busvoltage = 0;
float power_mW = 0;
shuntvoltage = ina219.getShuntVoltage_mV();
@@ -295,7 +328,9 @@ void powerMonitorTicker_callback()
current_mA = ina219.getCurrent_mA();
power_mW = ina219.getPower_mW();
loadvoltage = busvoltage + (shuntvoltage / 1000);
+ battery_level = map(loadvoltage * 100, 655, 840, 0, 100);
+ Serial.printf("Battery Level: %d %%\n", battery_level);
Serial.printf("Bus Voltage: %f V\n", busvoltage);
Serial.printf("Shunt Voltage: %f mV\n", shuntvoltage);
Serial.printf("Load Voltage: %f V\n", loadvoltage);