Dave H's version of the EVB Demo. Sends to specific conduit, and sends with a comma separated text string

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

Fork of MTDOT-EVBDemo by Multi-Hackers

Files at this revision

API Documentation at this revision

Comitter:
daveheitzman
Date:
Mon Aug 24 16:38:59 2015 +0000
Parent:
5:5a794cedd728
Child:
7:74c027d0353b
Commit message:
During long-running loop, discards any iterations that cause bad calls, and just continues instead of getting stuck in retry loop. Communicates on baud rate 115200 for ease of use.

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Thu Aug 20 21:28:45 2015 +0000
+++ b/main.cpp	Mon Aug 24 16:38:59 2015 +0000
@@ -148,6 +148,17 @@
 void config_pkt_xmit (void const *args);
 int32_t sendString(const std::string text);
 
+bool writeValueOrError();
+
+char sensor_text[54];
+char lora_temp_string[7]; 
+char lora_alt_string[8]; 
+char lora_press_string[9]; 
+	
+char lora_light_string[6]; 
+const int FAIL_MAX=15;
+int failtime=FAIL_MAX;
+
 int main()
 {
 
@@ -155,7 +166,7 @@
     std::vector<uint8_t> mdot_EUI;
     uint16_t i = 0;
 
-    debugUART.baud(921600);
+    debugUART.baud(115200);
 //  mDotUART.baud(9600);    // mdot UART unused but available on external connector
 
     Thread thread_1(pb1_debounce);						// threads for de-bouncing pushbutton switches
@@ -164,7 +175,7 @@
     thread_3 = new Thread(config_pkt_xmit);				// start thread that sends LoRa packet when SW2 pressed
 
     evbAccel = new MMA845x(mDoti2c,MMA845x::SA0_VSS); 	// setup Accelerometer
-    evbBaro = new MPL3115A2(mDoti2c);					// setup Barometric sensor
+    evbBaro = new MPL3115A2(mDoti2c);					// setup0 Barometric sensor
     evbAmbLight = new ISL29011(mDoti2c);		 		// Setup Ambient Light Sensor
     evbBackLight = new NCP5623B(mDoti2c);				// setup backlight and LED 2 driver chip
     evbLCD = new DOGS102(mDotspi, mDot17, mDot13);		// setup LCD
@@ -399,12 +410,6 @@
      */
     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();
         evbLCD->clearBuffer();
@@ -412,10 +417,13 @@
         /*
          * Test Accelerometer XYZ data ready bit to see if acquisition complete
          */
+        failtime = FAIL_MAX;
         do {
             osDelay(100);			// allows other threads to process
             result = evbAccel->getStatus();
-        } while ((result & MMA845x::XYZDR) == 0 );
+        	failtime--;
+        } while ((result & MMA845x::XYZDR) == 0 && failtime > 0);
+		if (failtime==0) {continue; }
 
         /*
          * Retrieve and print out accelerometer data
@@ -441,26 +449,28 @@
         /*
          * Test barometer device status to see if acquisition is complete
          */
+        failtime=FAIL_MAX;
         do {
             osDelay(100);			// allows other threads to process
             result = evbBaro->getStatus();
-        } while ((result & MPL3115A2::PTDR) == 0 );
-
+            failtime--;
+        } while ((result & MPL3115A2::PTDR) == 0 && failtime > 0 );
+		if (failtime==0) {continue; }
         /*
          * Retrieve and print out barometric pressure
          */
         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
+		// if failtime reached 0 , indicates that the result might be junk. 
         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);
+		writeValueOrError(); // will write to  lorapresstring and txtstr  
 
-        evbLCD->writeText(0,4,font_6x8,txtstr,strlen(txtstr));
 
         /*
          * Trigger a Altitude reading
@@ -472,10 +482,13 @@
         /*
          * Test barometer device status to see if acquisition is complete
          */
+        failtime=FAIL_MAX;
         do {
             osDelay(100);			// allows other threads to process
             result = evbBaro->getStatus();
-        } while ((result & MPL3115A2::PTDR) == 0 );
+        	failtime--;
+        } while ((result & MPL3115A2::PTDR) == 0 && failtime > 0 );
+		if (failtime==0) {continue; }
 
         /*
          * Retrieve and print out altitude and temperature
@@ -696,4 +709,21 @@
 	    printf("Data sent!\r\n");
     }
     return ret;
-}
\ No newline at end of file
+}
+
+bool writeValueOrError()
+{
+	bool res;
+		if (failtime==0){
+    	    sprintf(lora_press_string, "%s", "--.--");
+    	    sprintf(txtstr, "%s", "--.--");
+	        evbLCD->writeText(0,4,font_6x8,txtstr, strlen(txtstr));
+			res=false;
+		}else{
+    	    sprintf(lora_press_string, "%ld.%02d", num_whole, num_frac);
+	        evbLCD->writeText(0,4,font_6x8,txtstr,strlen(txtstr));
+			res=true;
+		}
+	return res;
+}
+