Ag demo with soil moisture

Dependencies:   DOGS102 ISL29011 MMA845x MPL3115A2 NCP5623B libmDot mbed-rtos mbed-src

Fork of MTDOT-EVBDemo-DRH by Dave Heitzman

Revision:
5:5a794cedd728
Parent:
4:51d7c24bbf91
Child:
6:b62e5106b5bc
--- a/main.cpp	Thu Aug 20 18:34:53 2015 +0000
+++ b/main.cpp	Thu Aug 20 21:28:45 2015 +0000
@@ -146,6 +146,7 @@
 void log_error(mDot* dot, const char* msg, int32_t retval);
 
 void config_pkt_xmit (void const *args);
+int32_t sendString(const std::string text);
 
 int main()
 {
@@ -398,6 +399,11 @@
      */
     pckt_time = 10;
     i = 0;
+	char sensor_text[54];
+	char lora_temp_string[7]; 
+	char lora_alt_string[8]; 
+	char lora_press_string[9]; 
+	char lora_light_string[6]; 
 
     do {
         evbLCD->startUpdate();
@@ -447,6 +453,13 @@
         num_whole = pressure >> 2;			// 18 bit integer significant
         num_frac = (pressure & 0x3) * 25;		// 2 bit fractional  0.25 per bit
         sprintf(txtstr,"Press=%ld.%02d Pa", num_whole, num_frac);
+
+        pressure = evbBaro->getBaroData() >> 12; // convert 32 bit signed to 20 bit unsigned value
+        num_whole = pressure >> 2;			// 18 bit integer significant
+        num_frac = (pressure & 0x3) * 25;		// 2 bit fractional  0.25 per bit
+		
+        sprintf(lora_press_string, "%ld.%02d", num_whole, num_frac);
+
         evbLCD->writeText(0,4,font_6x8,txtstr,strlen(txtstr));
 
         /*
@@ -466,16 +479,23 @@
 
         /*
          * Retrieve and print out altitude and temperature
+		const std::string lora_temp_string; 
+		const std::string lora_alt_string; 
+		const std::string lora_press_string; 
+		const std::string lora_light_string; 
+
          */
         baro_data = evbBaro->getAllData(false);
         baro_data._baro /= 4096;				// convert 32 bit signed to 20 bit signed value
         num_whole = baro_data._baro / 16;		//	18 bit signed significant integer
         num_frac = (baro_data._baro & 0xF) * 625 / 100;		// 4 bit fractional .0625 per bit
         sprintf(txtstr,"Alti=%ld.%03d m", num_whole, num_frac);
+        sprintf(lora_alt_string,"%ld.%03d", num_whole, num_frac);
         evbLCD->writeText(0,5,font_6x8,txtstr,strlen(txtstr));
         num_whole = baro_data._temp / 16;		// 8 bit signed significant integer
         num_frac = (baro_data._temp & 0x0F) * 625 / 100;		// 4 bit fractional .0625 per bit
         sprintf(txtstr,"Temp=%ld.%03d C", num_whole, num_frac);
+        sprintf(lora_temp_string,"%ld.%03d", num_whole, num_frac);
         evbLCD->writeText(0,6,font_6x8,txtstr,strlen(txtstr));
 
         /*
@@ -485,11 +505,11 @@
         num_whole = lux_data * 24 / 100;		// 16000 lux full scale .24 lux per bit
         num_frac = lux_data * 24 % 100;
         sprintf(txtstr, "Light=%ld.%02d lux", num_whole, num_frac );
+        sprintf(lora_light_string, "%ld.%02d", num_whole, num_frac );
         evbLCD->writeText(0,7,font_6x8,txtstr,strlen(txtstr));
 
         evbLCD->endUpdate();
         printf("finished iteration %d\n\r",(++i));
-
         if (i % pckt_time == 0) { // check packet counter will send packet every 2-5-10 data collection loops
             mdot_data.clear();
             mdot_data.push_back(0x0E);			// key for Current Acceleration 3-Axis Value
@@ -512,14 +532,27 @@
             converts.f_s = baro_data._temp;		// temperature is signed 12 bit
             mdot_data.push_back(converts.t_u[1]);
             mdot_data.push_back(converts.t_u[0]);
-			
-//            if ((mdot_ret = mdot_radio->send(mdot_data)) != mDot::MDOT_OK) {
-            if ((mdot_ret = mdot_radio->send("{\"light\":{\"lux\":\"23.22\"}}")) != mDot::MDOT_OK) {
+			mdot_data.clear();
+		
+// if you want to go back to sending byte vector instead: 
+//         if ((mdot_ret = mdot_radio->send(mdot_data)) != mDot::MDOT_OK) {
+//            sprintf(sensor_text, "x:%d,y:%d,z:%d,p:%s,a:%s,t:%s,l:%s",
+
+            sprintf(sensor_text, "%d,%d,%d,%s,%s,%s,%s",
+            	accel_data._x,
+            	accel_data._y,
+            	accel_data._z,
+            	lora_press_string,
+            	lora_alt_string,
+            	lora_temp_string,
+            	lora_light_string);
+            if ((mdot_ret = sendString((const std::string)sensor_text)) != mDot::MDOT_OK) {
                 log_error(mdot_radio, "failed to send", mdot_ret);
             } else {
                 printf("successfully sent data to gateway\r\n");
             }
         }
+
     } while(!exit_program);
 
     evbBaro->triggerOneShot();
@@ -644,3 +677,23 @@
         }
     }
 }
+
+int32_t sendString(const std::string text)
+{
+    int32_t ret;
+    if (mdot_radio->getNextTxMs() != 0) {
+        printf("Sending in %lu ms...\r\n", mdot_radio->getNextTxMs());
+        return false;
+    }
+
+    printf("Sending: '%s'   ", text.c_str());
+    std::vector<uint8_t> data(text.begin(), text.end());
+    if ((ret = mdot_radio->send(data, 1)) != mDot::MDOT_OK)
+    {
+        log_error(mdot_radio, "Failed to send data", ret);
+
+    } else {
+	    printf("Data sent!\r\n");
+    }
+    return ret;
+}
\ No newline at end of file