diff --git a/sfeIoTNodeLoRaWAN/sfeIoTNodeLoRaWAN.cpp b/sfeIoTNodeLoRaWAN/sfeIoTNodeLoRaWAN.cpp index 12fc35a..8a52f0c 100644 --- a/sfeIoTNodeLoRaWAN/sfeIoTNodeLoRaWAN.cpp +++ b/sfeIoTNodeLoRaWAN/sfeIoTNodeLoRaWAN.cpp @@ -25,6 +25,9 @@ static const char *kProductName = "SparkFun IoT Node LoRaWAN"; // delay used in loop during startup const uint32_t kStartupLoopDelayMS = 70; +// Button event increment +#define kButtonPressedIncrement 5 + //--------------------------------------------------------------------------- // LoRaWAN Receive message ids // @@ -318,6 +321,13 @@ bool sfeIoTNodeLoRaWAN::onSetup() flux_add(_boardButton); + // We want an event every 5 seconds + _boardButton.setPressIncrement(kButtonPressedIncrement); + + // Button events we're listening on + _boardButton.on_buttonRelease.call(this, &sfeIoTNodeLoRaWAN::onButtonReleased); + _boardButton.on_buttonPressed.call(this, &sfeIoTNodeLoRaWAN::onButtonPressed); + return true; } //--------------------------------------------------------------------------- @@ -546,6 +556,45 @@ void sfeIoTNodeLoRaWAN::onErrorMessage(uint8_t msgType) else if (msgType == (uint8_t)flxLogWarning) sfeLED.flash(sfeLED.Yellow); } + +//--------------------------------------------------------------------------- +// Button Events - general handler +//--------------------------------------------------------------------------- +// +// CAlled when the button is pressed and an increment time passed +void sfeIoTNodeLoRaWAN::onButtonPressed(uint32_t increment) +{ + + // we need LED on for visual feedback... + sfeLED.setDisabled(false); + + if (increment == 1) + sfeLED.blink(sfeLED.Yellow, kLEDFlashSlow); + + else if (increment == 2) + sfeLED.blink(kLEDFlashMedium); + + else if (increment == 3) + sfeLED.blink(kLEDFlashFast); + + else if (increment >= 4) + { + sfeLED.stop(); + + sfeLED.on(sfeLED.Red); + delay(500); + sfeLED.off(); + + // Reset time ! + _sysSystem.resetDevice(); + } +} +//--------------------------------------------------------------------------- +void sfeIoTNodeLoRaWAN::onButtonReleased(uint32_t increment) +{ + if (increment > 0) + sfeLED.off(); +} // --------------------------------------------------------------------------- // Log event // --------------------------------------------------------------------------- diff --git a/sfeIoTNodeLoRaWAN/sfeIoTNodeLoRaWAN.h b/sfeIoTNodeLoRaWAN/sfeIoTNodeLoRaWAN.h index a4bfcc5..908989e 100644 --- a/sfeIoTNodeLoRaWAN/sfeIoTNodeLoRaWAN.h +++ b/sfeIoTNodeLoRaWAN/sfeIoTNodeLoRaWAN.h @@ -182,6 +182,10 @@ class sfeIoTNodeLoRaWAN : public flxApplication void getStartupProperties(uint32_t &baudRate, uint32_t &startupDelay); + // Board button callbacks + void onButtonPressed(uint32_t); + void onButtonReleased(uint32_t); + // battery level checks void checkBatteryLevels(void); @@ -209,8 +213,6 @@ class sfeIoTNodeLoRaWAN : public flxApplication // Our system Control flxSystem _sysSystem; - // for our button events of the board - // sfeDLButton _boardButton; // Fuel gauge flxDevMAX17048 *_fuelGauge;