EasyButtonCode

Dependencies:   libmDot mbed-rtos mbed

Fork of mDot_TTN_DS18B20 by Thing Innovations

Files at this revision

API Documentation at this revision

Comitter:
jlathem
Date:
Tue Apr 19 13:01:23 2016 +0000
Parent:
12:e82913ee9c61
Commit message:
Final Version;

Changed in this revision

DS1820.lib Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/DS1820.lib	Sat Nov 14 20:58:36 2015 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-http://developer.mbed.org/users/Sissors/code/DS1820/#51a5011dc0ad
--- a/main.cpp	Sat Nov 14 20:58:36 2015 +0000
+++ b/main.cpp	Tue Apr 19 13:01:23 2016 +0000
@@ -1,16 +1,4 @@
-/** mDot_TTN_DS18B20 - Simple mDot temperature sensor using Dallas Semiconductors DS18B20 OneWire temperature sensor.
- * It used the MANUAL join mode with parameters for The Things Network.
- *
- *
- * Uses MultiTech mDot developer board http://www.multitech.com/models/94558010LF
- * Requires a MultiTech MultiConnect Conduit http://www.multitech.com/models/94557203LF
- * http://www.multitech.net/developer/software/lora/conduit-mlinux-convert-to-basic-packet-forwarder/
- * http://forum.thethingsnetwork.org/t/setting-up-multitech-conduit-gateway-for-ttn/216/35
- *
- */
-
 #include "mbed.h"
-#include "DS1820.h"
 #include "mDot.h"
 #include "MTSLog.h"
 #include "MTSText.h"
@@ -23,38 +11,28 @@
 #define MAX(a,b) (((a)>(b))?(a):(b))
 
 // Values as used by The Things Network
-//const uint8_t AppKey[16]={0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C};
 // Application session key
 uint8_t AppSKey[16]= {0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C};
 // Network session key
 uint8_t NwkSKey[16]= {0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C};
 
 // Network Address - Get your own address range at http://thethingsnetwork.org/wiki/AddressSpace
-uint8_t NetworkAddr[4]= {0x02,0x01,0x00,0x00};      // Our Network address or Node ID
+uint8_t NetworkAddr[4]= {0x02,0x01,0x6C,0x02};      // Our Network address or Node ID
 
 
 // Some defines for the LoRa configuration
-#define LORA_SF mDot::SF_12
 #define LORA_ACK 0
-#define LORA_TXPOWER 14
-
-// Ignoring sub band for EU modules.
-//static uint8_t config_frequency_sub_band = 1;
+#define LORA_TXPOWER 20
 
-// DS18B20 OneWire pin
-// D13 on Dev Board, pin 18 on mDot, Compatible with Oxford Flood Network PCB temperature sensor.
-#define DATA_PIN     PA_5
-// A0 on Dev Board, pin 20 on mDot
-//#define DATA_PIN     PB_1
-
-// Temperature sensor object
-DS1820 probe(DATA_PIN);
+//Ignoring sub band for EU modules.
+static uint8_t config_frequency_sub_band = 6;
 
 // Serial via USB for debugging only
 Serial pc(USBTX,USBRX);
 
-int main()
-{
+DigitalIn easyButton(PA_5);
+
+int main(){
     int32_t ret;
     mDot* dot;
     std::vector<uint8_t> send_data;
@@ -63,16 +41,14 @@
     std::vector<uint8_t> nodeAddr;
     std::vector<uint8_t> networkAddr;
 
-    float temperature = 0.0;
-
     pc.baud(115200);
-    pc.printf("TTN mDot LoRa Temperature sensor\n\r");
+    pc.printf("TTN Easy Button\n\r");
 
     // get a mDot handle
     dot = mDot::getInstance();
 
-    dot->setLogLevel(MTSLog::WARNING_LEVEL);
-//    dot->setLogLevel(MTSLog::TRACE_LEVEL);
+//    dot->setLogLevel(MTSLog::WARNING_LEVEL);
+    dot->setLogLevel(MTSLog::INFO_LEVEL);
 
     logInfo("Checking Config");
 
@@ -92,13 +68,12 @@
     dot->resetConfig();
 
     // Set byte order - AEP less than 1.0.30
-//    dot->setJoinByteOrder(mDot::LSB);
     dot->setJoinByteOrder(mDot::MSB);       // This is default for > 1.0.30 Conduit
 
     // Set Spreading Factor, higher is lower data rate, smaller packets but longer range
     // Lower is higher data rate, larger packets and shorter range.
     logInfo("Set SF");
-    if((ret = dot->setTxDataRate( LORA_SF )) != mDot::MDOT_OK) {
+    if((ret = dot->setTxDataRate( mDot::SF_10 )) != mDot::MDOT_OK) {
         logError("Failed to set SF %d:%s", ret, mDot::getReturnCodeString(ret).c_str());
     }
 
@@ -124,10 +99,9 @@
     }
 
 //    Not applicable for 868MHz in EU
-//    if ((ret = dot->setFrequencySubBand(config_frequency_sub_band)) != mDot::MDOT_OK) {
-//        initStatus = false;
-//        logError(dot, "failed to set frequency sub band", ret);
-//    }
+    if ((ret = dot->setFrequencySubBand(config_frequency_sub_band)) != mDot::MDOT_OK) {
+        logError("Failed to set frequency sub band %s", ret);
+    }
 
     logInfo("Set Network Address");
     if ((ret = dot->setNetworkAddress(networkAddr)) != mDot::MDOT_OK) {
@@ -191,25 +165,26 @@
     pc.printf("CRC: %s, ", (dot->getCrc() ? "Y" : "N") );
     pc.printf("Ack: %s\r\n", (dot->getAck() ? "Y" : "N")  );
 
+    char dataBuf[50];
+
     logInfo("Joining Network");
 
     while ((ret = dot->joinNetwork()) != mDot::MDOT_OK) {
         logError("failed to join network [%d][%s]", ret, mDot::getReturnCodeString(ret).c_str());
         wait_ms(dot->getNextTxMs() + 1);
     }
-
+    
     logInfo("Joined Network");
 
-    // Set the Temperature sesnor resolution, 9 bits is enough and makes it faster to provide a reading.
-    probe.setResolution(9);
-
-    char dataBuf[50];
+    
     while( 1 ) {
-        //Start temperature conversion, wait until ready
-        probe.convertTemperature(true, DS1820::all_devices);
-        // Output data as JSON e.g. {"t":21.3}
-        temperature = probe.temperature();
-        sprintf(dataBuf, "{\"t\":%3.1f}", temperature );
+        pc.printf("Waiting for Button Push....");
+        while (easyButton == 0){wait(0.1);}
+        pc.printf("Button Pushed!\n");
+        while (easyButton == 1) {wait(0.1);}
+
+        sprintf(dataBuf, "easy");
+        
         send_data.clear();
         // probably not the most efficent way to do this
         for( int i=0; i< strlen(dataBuf); i++ )
@@ -220,14 +195,8 @@
         } else {
             logInfo("send data: %s", Text::bin2hexString(send_data).c_str());
         }
-
-        // Should  sleep here and wakeup after a set 10 minute interval.
-        uint32_t sleep_time = MAX((dot->getNextTxMs() / 1000), 600);
-        logInfo("going to sleep for %d seconds", sleep_time);
-
-        // go to sleep and wake up automatically sleep_time seconds later
-        dot->sleep(sleep_time, mDot::RTC_ALARM);
+        
+        dot->resetCpu();
     }
-
     return 0;
 }