Jan Jongboom / Mbed 2 deprecated mdot_personalized_activation

Dependencies:   libmDot mbed-rtos mbed

Fork of mDot_LoRa_Sleep_Example by MultiTech

Files at this revision

API Documentation at this revision

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);
 }