diff --git a/examples/companion_radio/main.cpp b/examples/companion_radio/main.cpp index 876dc9c3..25c6c489 100644 --- a/examples/companion_radio/main.cpp +++ b/examples/companion_radio/main.cpp @@ -229,4 +229,5 @@ void loop() { ui_task.loop(); #endif rtc_clock.tick(); + board.sleep(0); // CPU sleeps until next interrupt (radio, timer, BLE); nRF52 ignores the seconds param } diff --git a/examples/companion_radio/ui-new/UITask.cpp b/examples/companion_radio/ui-new/UITask.cpp index 9fd0c7d7..c5681079 100644 --- a/examples/companion_radio/ui-new/UITask.cpp +++ b/examples/companion_radio/ui-new/UITask.cpp @@ -1129,6 +1129,9 @@ void UITask::loop() { #if AUTO_OFF_MILLIS > 0 if (autoOffMillis() > 0 && millis() > _auto_off) { _display->turnOff(); +#ifdef PIN_LED + digitalWrite(PIN_LED, LOW); // turn off status LED with display to save power +#endif } #endif } @@ -1163,7 +1166,10 @@ void UITask::loop() { char UITask::checkDisplayOn(char c) { if (_display != NULL) { if (!_display->isOn()) { - _display->turnOn(); // turn display on and consume event + _display->turnOn(); +#ifdef PIN_LED + digitalWrite(PIN_LED, LOW); // ensure LED is off when waking display (userLedHandler takes over) +#endif c = 0; } { uint32_t aoff = autoOffMillis(); if (aoff > 0) _auto_off = millis() + aoff; } // extend auto-off timer diff --git a/variants/wio-tracker-l1/WioTrackerL1Board.cpp b/variants/wio-tracker-l1/WioTrackerL1Board.cpp index 4153714e..61be5369 100644 --- a/variants/wio-tracker-l1/WioTrackerL1Board.cpp +++ b/variants/wio-tracker-l1/WioTrackerL1Board.cpp @@ -8,6 +8,8 @@ void WioTrackerL1Board::begin() { btn_prev_state = HIGH; pinMode(PIN_VBAT_READ, INPUT); // VBAT ADC input + pinMode(VBAT_ENABLE, OUTPUT); + digitalWrite(VBAT_ENABLE, LOW); // keep voltage divider off; enabled only during ADC read // Set all button pins to INPUT_PULLUP pinMode(PIN_BUTTON1, INPUT_PULLUP); pinMode(PIN_BUTTON2, INPUT_PULLUP); diff --git a/variants/wio-tracker-l1/WioTrackerL1Board.h b/variants/wio-tracker-l1/WioTrackerL1Board.h index 052238e6..14a9746b 100644 --- a/variants/wio-tracker-l1/WioTrackerL1Board.h +++ b/variants/wio-tracker-l1/WioTrackerL1Board.h @@ -22,11 +22,12 @@ public: #endif uint16_t getBattMilliVolts() override { - int adcvalue = 0; + digitalWrite(VBAT_ENABLE, HIGH); analogReadResolution(12); analogReference(AR_INTERNAL); - delay(10); - adcvalue = analogRead(PIN_VBAT_READ); + delay(10); // allow voltage divider to stabilize + int adcvalue = analogRead(PIN_VBAT_READ); + digitalWrite(VBAT_ENABLE, LOW); return (adcvalue * ADC_MULTIPLIER * AREF_VOLTAGE) / 4.096; } diff --git a/variants/wio-tracker-l1/variant.cpp b/variants/wio-tracker-l1/variant.cpp index 4fc2606a..d5a77736 100644 --- a/variants/wio-tracker-l1/variant.cpp +++ b/variants/wio-tracker-l1/variant.cpp @@ -67,9 +67,9 @@ void initVariant() { pinMode(PIN_QSPI_CS, OUTPUT); digitalWrite(PIN_QSPI_CS, HIGH); - // VBAT_ENABLE + // VBAT_ENABLE: keep LOW by default, WioTrackerL1Board::getBattMilliVolts() toggles it pinMode(VBAT_ENABLE, OUTPUT); - digitalWrite(VBAT_ENABLE, HIGH); + digitalWrite(VBAT_ENABLE, LOW); // set LED pin as output and set it low pinMode(PIN_LED, OUTPUT);