From 293415fa50cda10e8659830a87aa5652be2b0f7b Mon Sep 17 00:00:00 2001 From: dakkar Date: Sun, 27 Mar 2022 12:10:31 +0100 Subject: battery voltage, move display around --- battery.h | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 battery.h (limited to 'battery.h') diff --git a/battery.h b/battery.h new file mode 100644 index 0000000..825a3ab --- /dev/null +++ b/battery.h @@ -0,0 +1,38 @@ +#pragma once +#include + +/* + code inspired by https://gist.github.com/jenschr/dfc765cb9404beb6333a8ea30d2e78a1 + */ + +class Battery { + uint8_t pin; +public: + /* + the schematics at + https://github.com/Xinyuan-LilyGO/LilyGo-T5-Epaper-Series/tree/master/schematic + show a voltage divider connected to pin 35 + */ + Battery(uint8_t _pin=35) : pin(_pin) {}; + float voltage() { + /* + Comment from the gist: + + The ADC value is a 12-bit number, so the maximum value is 4095 + (counting from 0). + + To convert the ADC integer value to a real voltage you’ll need + to divide it by the maximum value of 4095, then double it (note + above that Adafruit halves the voltage), then multiply that by + the reference voltage of the ESP32 which is 3.3V and then + finally, multiply that again by the ADC Reference Voltage of + 1100mV. + + Comment from me: that assumes that ADC is linear, which is probably isn't + + Also, the battery voltage is not a decent indicator of charge + level, but that's what I've got + */ + return (float)(analogRead(pin)) / 4095*2*3.3*1.1; + } +}; -- cgit v1.2.3