69 lines
1.6 KiB
C++
69 lines
1.6 KiB
C++
|
|
#define BATTERY_PIN 35 // Battery sensor of ESP32-PoE
|
|
#define VCC_PIN 39 // 5V Present sensor of ESP32-PoE
|
|
|
|
float battery_read()
|
|
{
|
|
unsigned long sum = 0; // sum of samples taken
|
|
float voltage = 0.0; // calculated voltage
|
|
float output = 0.0; // output value
|
|
|
|
// Make 200 measures to avoid error.
|
|
for (int i = 0; i < 200; i++)
|
|
{
|
|
sum += analogRead(BATTERY_PIN);
|
|
delayMicroseconds(1000);
|
|
}
|
|
// calculate the voltage
|
|
voltage = sum / (float)200;
|
|
// Max value for 3.6V is 2275 (ADC value / 470k + 470k bridge)
|
|
output=map(voltage, 0.0f, 2275.0f, 0, 100);
|
|
if (output < 100)
|
|
return output;
|
|
else
|
|
return 100.0f;
|
|
}
|
|
|
|
bool external_powered()
|
|
{
|
|
// This can used to calculate the 5V level but we will return powered or not
|
|
unsigned long sum = 0;
|
|
float voltage = 0.0;
|
|
float output = 0.0;
|
|
|
|
// Make 100 measures to avoid error.
|
|
for (int i = 0; i < 100; i++)
|
|
{
|
|
sum += analogRead(VCC_PIN);
|
|
delayMicroseconds(1000);
|
|
}
|
|
// Calculate the voltage
|
|
voltage = sum / (float)100;
|
|
// Max value for 3.6V is 4095 (ADC value / 470k + 470k bridge)
|
|
output=map(voltage, 0.0f, 4095.0f, 0, 100);
|
|
if (output < 100)
|
|
//return output;
|
|
return false;
|
|
else
|
|
//return 100.0f;
|
|
return true;
|
|
}
|
|
|
|
void setup()
|
|
{
|
|
Serial.begin(115200);
|
|
}
|
|
|
|
void loop()
|
|
{
|
|
Serial.print("Battery Level: ");
|
|
Serial.print(battery_read(), 2);
|
|
Serial.println(" %");
|
|
if(external_powered())
|
|
Serial.println("Powered by 5V");
|
|
else
|
|
Serial.println("Powered by Battery");
|
|
|
|
delay(1000);
|
|
}
|