Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: libmDot mbed-rtos mbed
Fork of mDot_LoRa_Sleep_Example by
Revision 6:12850c60134e, committed 2016-06-22
- Comitter:
- janjongboom
- Date:
- Wed Jun 22 10:51:37 2016 +0000
- Parent:
- 5:9788d9d9875d
- Commit message:
- Remain state in between sleeps, also add interrupt example
Changed in this revision
libmDot.lib | Show annotated file Show diff for this revision Revisions of this file |
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/libmDot.lib Thu Mar 31 13:08:26 2016 +0000 +++ b/libmDot.lib Wed Jun 22 10:51:37 2016 +0000 @@ -1,1 +1,1 @@ -https://developer.mbed.org/teams/MultiTech/code/libmDot/#0b4eb17d07ae +https://developer.mbed.org/teams/MultiTech/code/libmDot/#121e4c454964
--- a/main.cpp Thu Mar 31 13:08:26 2016 +0000 +++ b/main.cpp Wed Jun 22 10:51:37 2016 +0000 @@ -12,6 +12,16 @@ static mDot* dot; +// This is where we keep state, every time button D6 is pressed we up it +// also we up it every time we send a package (in case you don't have a button) +static int8_t counter = 0; + +// Make sure to set this var every time you handle an interrupt! +// It's important so we know how we woke up... +static bool from_interrupt = false; + +static InterruptIn btn(PA_1); /* D6 */ + void parseKeys() { int32_t ret; @@ -66,7 +76,11 @@ } } -static int8_t counter = 0; +static void rise() { + counter++; + from_interrupt = true; +} + void send_data(void) { int32_t ret; @@ -88,6 +102,8 @@ int32_t ret; printf("Entering main()\r\n"); + btn.rise(&rise); + // get a mDot handle dot = mDot::getInstance(); @@ -130,7 +146,7 @@ // in the 915 (US) frequency band, spreading factors 7 - 10 are available // in the 868 (EU) frequency band, spreading factors 7 - 12 are available logInfo("setting TX spreading factor"); - if ((ret = dot->setTxDataRate(mDot::SF_10)) != mDot::MDOT_OK) { + if ((ret = dot->setTxDataRate(mDot::SF_7)) != mDot::MDOT_OK) { logError("failed to set TX datarate %d:%s", ret, mDot::getReturnCodeString(ret).c_str()); } @@ -155,15 +171,23 @@ //******************************************* while (true) { - send_data(); + // when wake from interrupt (need to set this yourself), we don't send + // as duty cycle was not adhere'd yet... + if (!from_interrupt) { + send_data(); + } + from_interrupt = false; - uint32_t sleep_time = std::max((uint32_t)10000, (uint32_t)dot->getNextTxMs()) / 1000; + // get the next transmission frame (in whole seconds) + uint32_t sleep_time = ceil(static_cast<float>(dot->getNextTxMs()) / 1000.0f); logInfo("going to sleep for %d seconds", sleep_time); // go to deepsleep and wake up automatically sleep_time seconds later - dot->sleep(sleep_time, mDot::RTC_ALARM); + // third argument (false) means SLEEP instead of DEEP_SLEEP mode, + // keeps registers & allows wake on Interrupts + dot->sleep(sleep_time, mDot::RTC_ALARM, false); } - // go to deepsleep and wake up on rising edge of WKUP pin (PA0/XBEE_CTS/XBEE_DIO7) - // dot->sleep(0, mDot::INTERRUPT); + // also an idea: go to deepsleep and wake up on rising edge of WKUP pin (PA0/XBEE_CTS/XBEE_DIO7) + // dot->sleep(0, mDot::INTERRUPT, true); }