diff --git a/examples/Nano33BLESenseFirmware/LowPower.cpp b/examples/Nano33BLESenseFirmware/LowPower.cpp new file mode 100644 index 0000000..58d9e56 --- /dev/null +++ b/examples/Nano33BLESenseFirmware/LowPower.cpp @@ -0,0 +1,35 @@ +#include "Arduino.h" +#include "ArduinoBLE.h" +#include "LowPower.h" + +#include "nrf_power.h" +#include "nrf_uarte.h" +#include "nrf_uart.h" + +void lowPower() +{ + // Disable UARTE0 which is initially enabled by the bootloader + nrf_uarte_task_trigger(NRF_UARTE0, NRF_UARTE_TASK_STOPRX); + while (!nrf_uarte_event_check(NRF_UARTE0, NRF_UARTE_EVENT_RXTO)) ; + NRF_UARTE0->ENABLE = 0; + NRF_UART0->ENABLE = 0; + + // Enable DCDC + nrf_power_dcdcen_set(true); + + // Turn off LED_BUILTIN + digitalWrite(LED_BUILTIN, LOW); +} + +void lowPowerWait(unsigned long time) +{ + rtos::ThisThread::sleep_for(time); +} + +void lowPowerBleWait(unsigned long time) +{ + unsigned long timeRef = millis(); + while (millis() - timeRef < time) { + BLE.poll(time - (millis() - timeRef)); + } +} diff --git a/examples/Nano33BLESenseFirmware/LowPower.h b/examples/Nano33BLESenseFirmware/LowPower.h new file mode 100644 index 0000000..1f77f5c --- /dev/null +++ b/examples/Nano33BLESenseFirmware/LowPower.h @@ -0,0 +1,8 @@ +#ifndef _LOWPOWER_H_ +#define _LOWPOWER_H_ + +void lowPower(); +void lowPowerWait(unsigned long time); +void lowPowerBleWait(unsigned long time); + +#endif //_LOWPOWER_H_ \ No newline at end of file diff --git a/examples/Nano33BLESenseFirmware/Nano33BLESenseFirmware.ino b/examples/Nano33BLESenseFirmware/Nano33BLESenseFirmware.ino index 8375a67..64d51cd 100644 --- a/examples/Nano33BLESenseFirmware/Nano33BLESenseFirmware.ino +++ b/examples/Nano33BLESenseFirmware/Nano33BLESenseFirmware.ino @@ -1,3 +1,4 @@ +#include "LowPower.h" #include #include @@ -148,16 +149,14 @@ void setup() { BLE.addService(service); BLE.advertise(); - digitalWrite(LED_BUILTIN, HIGH); + lowPower(); } void loop() { + BLE.poll(1000); while (BLE.connected()) { - unsigned long now = millis(); - if (abs((long) now - (long) lastNotify) >= 100) { - updateSubscribedCharacteristics(); - lastNotify = now; - } + lowPowerBleWait(100); + updateSubscribedCharacteristics(); } }