33
44
55void ThinknodeM2Board::begin () {
6+ pinMode (PIN_VEXT_EN, OUTPUT);
7+ digitalWrite (PIN_VEXT_EN, !PIN_VEXT_EN_ACTIVE); // force power cycle
8+ delay (20 ); // allow power rail to discharge
9+ digitalWrite (PIN_VEXT_EN, PIN_VEXT_EN_ACTIVE); // turn backlight back on
10+ delay (120 ); // give display time to bias on cold boot
611 ESP32Board::begin ();
7- pinMode (PIN_VEXT_EN, OUTPUT); // init display
8- digitalWrite (PIN_VEXT_EN, PIN_VEXT_EN_ACTIVE); // pin needs to be high
9- delay (10 );
10- digitalWrite (PIN_VEXT_EN, PIN_VEXT_EN_ACTIVE); // need to do this twice. do not know why..
11- pinMode (PIN_STATUS_LED, OUTPUT); // init power led
12+ pinMode (PIN_STATUS_LED, OUTPUT); // init power led
1213 }
1314
1415 void ThinknodeM2Board::enterDeepSleep (uint32_t secs, int pin_wake_btn) {
@@ -19,14 +20,21 @@ void ThinknodeM2Board::begin() {
1920 enterDeepSleep (0 );
2021 }
2122
22- uint16_t ThinknodeM2Board::getBattMilliVolts () {
23+ uint16_t ThinknodeM2Board::getBattMilliVolts () {
2324 analogReadResolution (12 );
24- delay (10 );
25- float volts = (analogRead (PIN_VBAT_READ) * ADC_MULTIPLIER * AREF_VOLTAGE) / 4096 ;
26- analogReadResolution (10 );
27- return volts * 1000 ;
28- }
25+ analogSetPinAttenuation (PIN_VBAT_READ, ADC_11db);
26+
27+ uint32_t mv = 0 ;
28+ for (int i = 0 ; i < 8 ; ++i) {
29+ mv += analogReadMilliVolts (PIN_VBAT_READ);
30+ delayMicroseconds (200 );
31+ }
32+ mv /= 8 ;
33+
34+ analogReadResolution (10 );
35+ return static_cast <uint16_t >(mv * ADC_MULTIPLIER );
36+ }
2937
3038 const char * ThinknodeM2Board::getManufacturerName () const {
3139 return " Elecrow ThinkNode M2" ;
32- }
40+ }
0 commit comments