For Wonjun and Jyunghun

Dependencies:   libmDot mbed-rtos mbed

Files at this revision

API Documentation at this revision

Comitter:
minhnn89
Date:
Fri Mar 24 06:28:11 2017 +0000
Commit message:
For wonjun and Jyunghun

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
mbed-rtos.lib Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libmDot.lib	Fri Mar 24 06:28:11 2017 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/teams/MultiTech/code/libmDot/#0b4eb17d07ae
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Mar 24 06:28:11 2017 +0000
@@ -0,0 +1,158 @@
+#include "mbed.h"
+#include "mDot.h"
+#include "MTSLog.h"
+#include <string>
+#include <vector>
+#include <algorithm>
+
+// these options must match the settings on your Conduit
+// uncomment the following lines and edit their values to match your configuration
+static std::string config_network_name = "wonjun123";
+static std::string config_network_pass = "123123123";
+static uint8_t config_frequency_sub_band = 7;
+
+//             r0   r1   r2   r3   c0   c1   c2   c3
+//Keypad keypad(p17, p16, p15, p14, p13, p12, p11, p10);
+
+float speed = 5.1;  // km/h
+bool isIncreasing = false;
+bool isDecreasing = false;
+
+// Callback funciton of speed increasing button pressing
+void cbIncreaseSpeed()
+{
+    speed = speed + 0.1f;
+    if (speed > 19) speed = 19;
+}
+// Callback funciton of speed decreasing button pressing
+void cbDecreaseSpeed()
+{
+    speed = speed - 0.1f;
+    if (speed < 0 ) speed = 0;
+}
+
+int main() {
+    int32_t ret;
+    mDot* dot;
+    //std::vector<uint8_t> data;
+    std::string data_str = "data!";
+    
+    InterruptIn incBtn(PA_2);    // increase speed button
+    InterruptIn decBtn(PA_0);    // decrease speed button
+
+    decBtn.rise(&cbIncreaseSpeed);
+    //decBtn.fall(&cbDecreaseSpeed);
+    
+    // get a mDot handle
+    dot = mDot::getInstance();
+    
+    // print library version information
+    logError("dafdfadafdfdaf");
+    logInfo("version: %s", dot->getId().c_str());
+
+    //*******************************************
+    // configuration
+    //*******************************************
+    // reset to default config so we know what state we're in
+    dot->resetConfig();
+    
+    dot->setLogLevel(mts::MTSLog::INFO_LEVEL);
+
+    // set up the mDot with our network information: frequency sub band, network name, and network password
+    // these can all be saved in NVM so they don't need to be set every time - see mDot::saveConfig()
+    
+    // frequency sub band is only applicable in the 915 (US) frequency band
+    // if using a MultiTech Conduit gateway, use the same sub band as your Conduit (1-8) - the mDot will use the 8 channels in that sub band
+    // if using a gateway that supports all 64 channels, use sub band 0 - the mDot will use all 64 channels
+    logInfo("setting frequency sub band");
+    if ((ret = dot->setFrequencySubBand(config_frequency_sub_band)) != mDot::MDOT_OK) {
+        logError("failed to set frequency sub band %d:%s", ret, mDot::getReturnCodeString(ret).c_str());
+    }
+    
+    logInfo("setting network name");
+    if ((ret = dot->setNetworkName(config_network_name)) != mDot::MDOT_OK) {
+        logError("failed to set network name %d:%s", ret, mDot::getReturnCodeString(ret).c_str());
+    }
+    
+    logInfo("setting network password");
+    if ((ret = dot->setNetworkPassphrase(config_network_pass)) != mDot::MDOT_OK) {
+        logError("failed to set network password %d:%s", ret, mDot::getReturnCodeString(ret).c_str());
+    }
+    
+    // a higher spreading factor allows for longer range but lower throughput
+    // 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) {
+        logError("failed to set TX datarate %d:%s", ret, mDot::getReturnCodeString(ret).c_str());
+    }
+    
+    // request receive confirmation of packets from the gateway
+    logInfo("enabling ACKs");
+    if ((ret = dot->setAck(1)) != mDot::MDOT_OK) {
+        logError("failed to enable ACKs %d:%s", ret, mDot::getReturnCodeString(ret).c_str());
+    }
+    
+    // set join mode to AUTO_OTA so the mDot doesn't have to rejoin after sleeping
+    logInfo("setting join mode to AUTO_OTA");
+    if ((ret = dot->setJoinMode(mDot::AUTO_OTA)) != mDot::MDOT_OK) {
+        logError("failed to set join mode %d:%s", ret, mDot::getReturnCodeString(ret).c_str());
+    }
+    
+    // save this configuration to the mDot's NVM
+    logInfo("saving config");
+    if (! dot->saveConfig()) {
+        logError("failed to save configuration");
+    }
+    //*******************************************
+    // end of configuration
+    //*******************************************
+
+    // format data for sending to the gateway
+    //for (std::string::iterator it = data_str.begin(); it != data_str.end(); it++)
+        //data.push_back((uint8_t) *it);
+
+    // join the network if not joined
+    if (!dot->getNetworkJoinStatus()) {
+        logInfo("network not joined, joining network");
+        if ((ret = dot->joinNetwork()) != mDot::MDOT_OK) {
+            logError("failed to join network %d:%s", ret, mDot::getReturnCodeString(ret).c_str());
+        }
+    }
+    
+    while (true) {
+        std::vector<uint8_t> data;
+        
+        float tmpSpeed = speed;
+        if (tmpSpeed >= 10) {  // 10 - 19 km/h
+            data.push_back('1');
+            tmpSpeed -= 10;
+        }
+        tmpSpeed *= 10;
+        data.push_back((int)(tmpSpeed) / 10 + '0');
+        data.push_back('.');
+        data.push_back((int)tmpSpeed % 10 + '0');
+        
+        if (dot->getNetworkJoinStatus()) {
+            // send the data
+            // ACKs are enabled by default, so we're expecting to get one back
+            if ((ret = dot->send(data)) != mDot::MDOT_OK) {
+                logError("failed to send %d:%s", ret, mDot::getReturnCodeString(ret).c_str());
+            } else {
+                logInfo("successfully sent data to gateway");
+            }
+        }
+        //osDelay(std::max((uint32_t)5000, (uint32_t)dot->getNextTxMs()));
+        
+        // in the 868 (EU) frequency band, we need to wait until another channel is available before transmitting again
+        uint32_t sleep_time = std::max((uint32_t)5000, (uint32_t)dot->getNextTxMs()) / 1000;
+        //logInfo("going to sleep...");
+    
+        // go to deepsleep and wake up automatically sleep_time seconds later
+        dot->sleep(sleep_time, mDot::INTERRUPT);
+        
+        //wait(sleep_time);
+    }
+
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-rtos.lib	Fri Mar 24 06:28:11 2017 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/users/mbed_official/code/mbed-rtos/#6d90423c236e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Fri Mar 24 06:28:11 2017 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/9296ab0bfc11
\ No newline at end of file