MultiTech Dragonfly sending SMS sensor data from Freescale (NXP) MEMs board to cell phone

Dependencies:   FXAS21002 FXOS8700 MbedJSONValue mbed mtsas

Fork of VVV_MultiTech_Dragonfly_ATT_Dallas by Paul Jaeger

Revision:
8:a09dd040bb4b
Parent:
7:dd550a829ece
Child:
9:3dcbe04adfd0
--- a/main.cpp	Fri Dec 11 16:00:08 2015 +0000
+++ b/main.cpp	Tue Aug 23 07:58:42 2016 +0000
@@ -1,70 +1,14 @@
 /*************************************************************************
- * Dragonfly Example program for 2015 AT&T Government Solutions Hackathon
- *
- * The following hardware is required to successfully run this program:
- *   - MultiTech UDK2 (4" square white PCB with Arduino headers, antenna
- *     connector, micro USB ports, and 40-pin connector for Dragonfly)
- *   - MultiTech Dragonfly (1"x2" green PCB with Telit radio)
- *   - Seeed Studio Base Shield
- *   - Grove moisture sensor (to connect to Base Shield)
- *   - Grove button (to connect to Base Shield)
- *   - MEMs Inertial and Environmental Nucleo Expansion board (LSM6DS0
- *     3-axis accelerometer + 3-axis gyroscope, LIS3MDL 3-axis
- *     magnetometer, HTS221 humidity and temperature sensor and LPS25HB
- *     pressure sensor)
- *
- * What this program does:
- *   - reads data from all sensors on MEMs board and moisture sensor on a
- *     periodic basis
- *   - prints all sensor data to debug port on a periodic basis
- *   - optionally send a SMS containing sensor data when the Grove Button
- *     is pushed
- *       - you need to set the "phone_number" field
- *   - optionally sends sensor data to AT&T M2X cloud platform (user must
- *     create own M2X account and configure a device)
- *       - you need to set the "m2x_api_key" field and the "m2x_device_id"
- *         field based on your M2X account for this to work
- *       - you need to set the "do_cloud_post" flag to true for this to
- *         work
- *
- * Setup:
- *   - Correctly insert SIM card into Dragonfly
- *   - Seat the Dragonfly on the UDK2 board
- *   - Connect an antenna to the connector on the Dragonfly labled "M"
- *   - Stack the Base Shield on the UDK2 Arduino headers
- *   - Connect the Grove button to the D8 socket on the Base Shield
- *   - Connect the Grove moisture sensor to the A0 socket on the Base
- *     Shield
- *   - Make sure the reference voltage selector switch (next to the A0
- *     socket) is switched to 5V so you get accurate analog readings
- *   - Stack the MEMs board on top of the Base Shield
- *   - Plug in the power cable
- *   - Plug a micro USB cable into the port below and slightly to the
- *     left of the Dragonfly (NOT the port on the Dragonfly)
- *
- * Go have fun and make something cool!
- *
- ************************************************************************/
-/*
-Sample Program Description:
-   This Program will enable to Multi-Tech Dragonfly platform to utilize ROHM's Multi-sensor Shield Board.
-   This program will initialize all sensors on the shield and then read back the sensor data.
-   Data will then be output to the UART Debug Terminal every 1 second.
-
-Sample Program Author:
-   ROHM USDC
-
-Additional Resources:
-   ROHM Sensor Shield GitHub Repository: https://github.com/ROHMUSDC/ROHM_SensorPlatform_Multi-Sensor-Shield
-*/
-
-
+ * Dragonfly Example program of SMS on Freescale sensor board
+ */
 
 #include "mbed.h"
 #include "mtsas.h"
 #include "MbedJSONValue.h"
 #include "HTTPJson.h"
 #include <string>
+#include "FXAS21002.h"
+#include "FXOS8700.h"
 
 // Debug serial port
 static Serial debug(USBTX, USBRX);
@@ -77,210 +21,33 @@
 
 // APN associated with SIM card
 // this APN should work for the AT&T SIM that came with your Dragonfly
-//static const std::string apn = "";
-static const std::string apn = "";
+static const std::string apn = "iot.aer.net";
 
 // Phone number to send SMS messages to
 // just change the x digits - the 1 needs to stay!
-static const std::string phone_number = "1xxxxxxxxxx";
-
-// see https://m2x.att.com/developer/documentation/v2/overview for M2X API documentation
-// M2X device ID
-static const std::string m2x_device_id = "";
+static const std::string phone_number = "16122077184";
 
-// M2X primary API key
-static const std::string m2x_api_key = "";
-
-// set to true if you want to post to the cloud
-// you need to have you M2X account set up properly for this to work?
-//bool do_cloud_post = false;
-bool do_cloud_post = true;
-
-std::string url = "http://api-m2x.att.com/v2/devices/" + m2x_device_id + "/update";
-
+FXOS8700 accel(D14,D15);
+FXOS8700 mag(D14,D15);
+FXAS21002 gyro(D14,D15);
 
 // variables for sensor data
-float temp_celsius;
-float humidity_percent;
-float pressure_mbar;
-float moisture_percent;
-int32_t mag_mgauss[3];
-int32_t acc_mg[3];
-int32_t gyro_mdps[3];
+char streamAcc[] = "acc_rms";
+char streamMag[] = "mag_rms";
+char streamGyr[] = "gyr_rms";
 
 // misc variables
-static char wall_of_dash[] = "--------------------------------------------------";
-bool radio_ok = false;
-static int thpm_interval_ms = 5000;
-static int motion_interval_ms = 5000;
-static int print_interval_ms = 5000;
 static int sms_interval_ms = 60000;
-static int post_interval_ms = 30000;
+static int read_interval_ms = 5000;
+static int print_interval_ms = 1500;
 int debug_baud = 115200;
 
-
-
-
-/****************************************************************************************************
-
- ****************************************************************************************************/
-
-//Macros for checking each of the different Sensor Devices
-#define AnalogTemp  //BDE0600
-#define AnalogUV    //ML8511
-#define HallSensor  //BU52011
-#define RPR0521     //RPR0521
-#define KMX62       //KMX61, Accel/Mag         
-#define COLOR       //BH1745
-#define KX022       //KX022, Accel Only
-#define Pressure    //BM1383
-//#define SMS         //allow SMS messaging
-//#define Web         //allow M2X communication
-
-
-//Define Pins for I2C Interface
-I2C i2c(I2C_SDA, I2C_SCL);
-bool        RepStart = true;
-bool        NoRepStart = false;
-
-//Define Sensor Variables
-#ifdef AnalogTemp
-AnalogIn    BDE0600_Temp(PC_4); //Mapped to A2
-uint16_t    BDE0600_Temp_value;
-float       BDE0600_output;
-#endif
-
-#ifdef AnalogUV
-AnalogIn    ML8511_UV(PC_1);    //Mapped to A4
-uint16_t    ML8511_UV_value;
-float       ML8511_output;
-#endif
-
-#ifdef HallSensor
-DigitalIn   Hall_GPIO0(PC_8);
-DigitalIn   Hall_GPIO1(PB_5);
-int         Hall_Return1;
-int         Hall_Return0;
-int32_t     Hall_Return[2];
-#endif
-
-#ifdef RPR0521
-int         RPR0521_addr_w = 0x70;          //7bit addr = 0x38, with write bit 0
-int         RPR0521_addr_r = 0x71;          //7bit addr = 0x38, with read bit 1
-char        RPR0521_ModeControl[2] = {0x41, 0xE6};
-char        RPR0521_ALSPSControl[2] = {0x42, 0x03};
-char        RPR0521_Persist[2] = {0x43, 0x20};
-char        RPR0521_Addr_ReadData = 0x44;
-char        RPR0521_Content_ReadData[6];
-int         RPR0521_PS_RAWOUT = 0;                  //this is an output
-float       RPR0521_PS_OUT = 0;
-int         RPR0521_ALS_D0_RAWOUT = 0;
-int         RPR0521_ALS_D1_RAWOUT = 0;
-float       RPR0521_ALS_DataRatio = 0;
-float       RPR0521_ALS_OUT = 0;                    //this is an output
-float       RPR0521_ALS[2];                         // is this ok taking an int to the [0] value and float to [1]???????????
-#endif
-
-#ifdef KMX62
-int         KMX62_addr_w = 0x1C;          //7bit addr = 0x38, with write bit 0
-int         KMX62_addr_r = 0x1D;          //7bit addr = 0x38, with read bit 1
-char        KMX62_CNTL2[2] = {0x3A, 0x5F};
-char        KMX62_Addr_Accel_ReadData = 0x0A;
-char        KMX62_Content_Accel_ReadData[6];
-char        KMX62_Addr_Mag_ReadData = 0x10;
-char        KMX62_Content_Mag_ReadData[6];
-short int   MEMS_Accel_Xout = 0;
-short int   MEMS_Accel_Yout = 0;
-short int   MEMS_Accel_Zout = 0;
-double      MEMS_Accel_Conv_Xout = 0;
-double      MEMS_Accel_Conv_Yout = 0;
-double      MEMS_Accel_Conv_Zout = 0;
-
-short int   MEMS_Mag_Xout = 0;
-short int   MEMS_Mag_Yout = 0;
-short int   MEMS_Mag_Zout = 0;
-float       MEMS_Mag_Conv_Xout = 0;
-float       MEMS_Mag_Conv_Yout = 0;
-float       MEMS_Mag_Conv_Zout = 0;
-
-double      MEMS_Accel[3];
-float       MEMS_Mag[3];
-#endif
-
-#ifdef COLOR
-int         BH1745_addr_w = 0x72;   //write
-int         BH1745_addr_r = 0x73;   //read
-char        BH1745_persistence[2] = {0x61, 0x03};
-char        BH1745_mode1[2] = {0x41, 0x00};
-char        BH1745_mode2[2] = {0x42, 0x92};
-char        BH1745_mode3[2] = {0x43, 0x02};
-char        BH1745_Content_ReadData[6];
-char        BH1745_Addr_color_ReadData = 0x50;
-int         BH1745_Red;
-int         BH1745_Blue;
-int         BH1745_Green;
-int32_t     BH1745[3];  //Red, Blue Green matrix
-#endif
-
-#ifdef KX022
-int         KX022_addr_w = 0x3C;   //write
-int         KX022_addr_r = 0x3D;   //read
-char        KX022_Accel_CNTL1[2] = {0x18, 0x41};
-char        KX022_Accel_ODCNTL[2] = {0x1B, 0x02};
-char        KX022_Accel_CNTL3[2] = {0x1A, 0xD8};
-char        KX022_Accel_TILT_TIMER[2] = {0x22, 0x01};
-char        KX022_Accel_CNTL2[2] = {0x18, 0xC1};
-char        KX022_Content_ReadData[6];
-char        KX022_Addr_Accel_ReadData = 0x06;
-float       KX022_Accel_X;
-float       KX022_Accel_Y;
-float       KX022_Accel_Z;
-short int   KX022_Accel_X_RawOUT = 0;
-short int   KX022_Accel_Y_RawOUT = 0;
-short int   KX022_Accel_Z_RawOUT = 0;
-int         KX022_Accel_X_LB = 0;
-int         KX022_Accel_X_HB = 0;
-int         KX022_Accel_Y_LB = 0;
-int         KX022_Accel_Y_HB = 0;
-int         KX022_Accel_Z_LB = 0;
-int         KX022_Accel_Z_HB = 0;
-float       KX022_Accel[3];
-#endif
-
-#ifdef Pressure
-int         Press_addr_w = 0xBA;   //write
-int         Press_addr_r = 0xBB;   //read
-char        PWR_DOWN[2] = {0x12, 0x01};
-char        SLEEP[2] = {0x13, 0x01};
-char        Mode_Control[2] = {0x14, 0xC4};
-char        Press_Content_ReadData[6];
-char        Press_Addr_ReadData =0x1A;
-int         BM1383_Temp_highByte;
-int         BM1383_Temp_lowByte;
-int         BM1383_Pres_highByte;
-int         BM1383_Pres_lowByte;
-int         BM1383_Pres_leastByte;
-short int   BM1383_Temp_Out;
-float       BM1383_Temp_Conv_Out;
-float       BM1383_Pres_Conv_Out;
-float_t       BM1383[2];   // Temp is 0 and Pressure is 1
-float       BM1383_Var;
-float       BM1383_Deci;
-#endif
+bool radio_ok = false;
 
 /****************************************************************************************************
 // function prototypes
  ****************************************************************************************************/
 bool init_mtsas();
-void ReadAnalogTemp();
-void ReadAnalogUV ();
-void ReadHallSensor ();
-void ReadCOLOR ();
-void ReadRPR0521_ALS ();
-void ReadKMX62_Accel ();
-void ReadKMX62_Mag ();
-void ReadPressure ();
-void ReadKX022();
 
 /****************************************************************************************************
 // main
@@ -291,43 +58,16 @@
     debug.baud(debug_baud);
     logInfo("starting...");
 
-
     /****************************************************************************************************
           Initialize I2C Devices ************
      ****************************************************************************************************/
-
-#ifdef RPR0521
-    i2c.write(RPR0521_addr_w, &RPR0521_ModeControl[0], 2, false);
-    i2c.write(RPR0521_addr_w, &RPR0521_ALSPSControl[0], 2, false);
-    i2c.write(RPR0521_addr_w, &RPR0521_Persist[0], 2, false);
-#endif
-
-#ifdef KMX62
-    i2c.write(KMX62_addr_w, &KMX62_CNTL2[0], 2, false);
-#endif
+    accel.accel_config();
+    mag.mag_config();
+    gyro.gyro_config();
 
-#ifdef COLOR
-    i2c.write(BH1745_addr_w, &BH1745_persistence[0], 2, false);
-    i2c.write(BH1745_addr_w, &BH1745_mode1[0], 2, false);
-    i2c.write(BH1745_addr_w, &BH1745_mode2[0], 2, false);
-    i2c.write(BH1745_addr_w, &BH1745_mode3[0], 2, false);
-#endif
-
-#ifdef KX022
-    i2c.write(KX022_addr_w, &KX022_Accel_CNTL1[0], 2, false);
-    i2c.write(KX022_addr_w, &KX022_Accel_ODCNTL[0], 2, false);
-    i2c.write(KX022_addr_w, &KX022_Accel_CNTL3[0], 2, false);
-    i2c.write(KX022_addr_w, &KX022_Accel_TILT_TIMER[0], 2, false);
-    i2c.write(KX022_addr_w, &KX022_Accel_CNTL2[0], 2, false);
-#endif
-
-#ifdef Pressure
-    i2c.write(Press_addr_w, &PWR_DOWN[0], 2, false);
-    i2c.write(Press_addr_w, &SLEEP[0], 2, false);
-    i2c.write(Press_addr_w, &Mode_Control[0], 2, false);
-#endif
-//End I2C Initialization Section **********************************************************
-
+    float accel_data[3];
+    //float mag_data[3];
+    //float gyro_data[3];
 
 // Initialization Radio Section **********************************************************
 
@@ -338,107 +78,48 @@
         logInfo("MTSAS is ok");
 
 //End Radio Initialization Section **********************************************************
-
-//    button.fall(&button_irq);
-
-
-    Timer thpm_timer;
-    thpm_timer.start();         // Timer data is set in the Variable seciton see misc variables    Timer motion_timer;
+    float dataX = 0;
+    float dataY = 0;
+    float dataZ = 1;
+    Timer sms_timer;
+    sms_timer.start();
+    Timer read_timer;
+    read_timer.start();         // Timer data is set in the Variable seciton see misc variables    Timer motion_timer;
     Timer print_timer;
     print_timer.start();
     Timer motion_timer;
     motion_timer.start();
 
-#ifdef SMS
-    Timer sms_timer;
-    sms_timer.start();
-#endif
-#ifdef Web
-    Timer post_timer;
-    post_timer.start();
-#endif
-    
     while (true) {
-        if (thpm_timer.read_ms() > thpm_interval_ms) {
-#ifdef AnalogTemp
-            ReadAnalogTemp ();
-#endif
-
-#ifdef AnalogUV
-            ReadAnalogUV ();
-#endif
-
-#ifdef HallSensor
-            ReadHallSensor ();
-#endif
+        if (read_timer.read_ms() > read_interval_ms) {
 
-#ifdef COLOR
-            ReadCOLOR ();
-#endif
-
-#ifdef RPR0521       //als digital
-            ReadRPR0521_ALS ();
-#endif
+            accel.acquire_accel_data_g(accel_data);
+            dataX = accel_data[0];
+            dataY = accel_data[1];
+            dataZ = accel_data[2];
 
-#ifdef Pressure
-            ReadPressure();
-#endif
-            thpm_timer.reset();
-        }
-
-        if (motion_timer.read_ms() > motion_interval_ms) {
-#ifdef KMX62
-            ReadKMX62_Accel ();
-            ReadKMX62_Mag ();
-#endif
-
-#ifdef KX022
-            ReadKX022 ();
-#endif
-            motion_timer.reset();
+            read_timer.reset();
         }
 
         if (print_timer.read_ms() > print_interval_ms) {
-            logDebug("%s", wall_of_dash);
+
             logDebug("SENSOR DATA");
-            logDebug("temperature: %0.2f C", BM1383[0]);
-            logDebug("analog uv: %.1f mW/cm2", ML8511_output);
-            logDebug("ambient Light  %0.3f", RPR0521_ALS[0]);
-            logDebug("proximity count  %0.3f", RPR0521_ALS[1]);
-            logDebug("hall effect: South %d\t North %d",  Hall_Return[0],Hall_Return[1]);
-            logDebug("pressure: %0.2f hPa", BM1383[1]);
-            logDebug("magnetometer:\r\n\tx: %0.3f\ty: %0.3f\tz: %0.3f\tuT", MEMS_Mag[0], MEMS_Mag[1], MEMS_Mag[2]);
-            logDebug("accelerometer:\r\n\tx: %0.3f\ty: %0.3f\tz: %0.3f\tg", MEMS_Accel[0], MEMS_Accel[1], MEMS_Accel[2]);
-            logDebug("color:\r\n\tred: %ld\tgrn: %ld\tblu: %ld\t", BH1745[0], BH1745[1], BH1745[2]);
-            logDebug("%s", wall_of_dash);
+            logDebug("DataZ  %0.3f", dataZ);
+            logDebug("DataY  %0.3f", dataY);
             print_timer.reset();
         }
 
-
-
-#ifdef SMS
+// SMS
         if (sms_timer.read_ms() > sms_interval_ms) {
             sms_timer.reset();
             logInfo("SMS Send Routine");
-printf("  In sms routine \r\n");
+            printf("  In sms routine \r\n");
             if (radio_ok) {
                 MbedJSONValue sms_json;
                 string sms_str;
 
-//                sms_json["temp_C"] = BDE0600_output;
-//                sms_json["UV"] = ML8511_output;
-                sms_json["Ambient Light"] = RPR0521_ALS[0];
-                sms_json["Prox"]      = RPR0521_ALS[1];
-//                sms_json["pressure_hPa"] = BM1383[1];
-//                sms_json["mag_mgauss"]["x"] = MEMS_Mag[0];
-//                sms_json["mag_mgauss"]["y"] = MEMS_Mag[1];
-//                sms_json["mag_mgauss"]["z"] = MEMS_Mag[2];
-//                sms_json["acc_mg"]["x"] = MEMS_Accel[0];
-//                sms_json["acc_mg"]["y"] = MEMS_Accel[1];
-//                sms_json["acc_mg"]["z"] = MEMS_Accel[2];
-//                sms_json["Red"]   = BH1745[0];
-//                sms_json["Green"] = BH1745[1];
-//                sms_json["Blue"]  = BH1745[2];
+                sms_json["edge Gravity: "] = dataY;
+                sms_json[" front Gravity: "] = dataZ;
 
                 sms_str = "SENSOR DATA:\n";
                 sms_str += sms_json.serialize();
@@ -449,48 +130,6 @@
                     logError("sending SMS failed");
             }
         }
-#endif
-#ifdef Web
-        if (post_timer.read_ms() > post_interval_ms && do_cloud_post) {
-    printf("in web\n\r");
-            if (radio->connect()) {
-                logDebug("posting sensor data");
-
-                HTTPClient http;
-                MbedJSONValue http_json_data;
-                std::string http_json_str;
-                std::string m2x_header = "X-M2X-KEY: " + m2x_api_key + "\r\n";
-                int ret;
-                char http_response_buf[256];
-                HTTPText http_response(http_response_buf, sizeof(http_response_buf));
-
-                // temp_c, temp_f, humidity, pressure, and moisture are all stream IDs for my device in M2X
-                // modify these to match your streams or give your streams the same name
-                http_json_data["values"]["temp_c"] = BDE0600_output;
-                http_json_data["values"]["UV"] = ML8511_output;
-                http_json_data["values"]["Ambient Light"] = RPR0521_ALS[0];
-                http_json_data["values"]["Prox"] = RPR0521_ALS[1];
-                http_json_str = http_json_data.serialize();
-
-                // add extra header with M2X API key
-                http.setHeader(m2x_header.c_str());
-
-                HTTPJson http_json((char*)  http_json_str.c_str());
-                ret = http.post(url.c_str(), http_json, &http_response);
-                if (ret != HTTP_OK)
-                    logError("posting data to cloud failed: [%d][%s]", ret, http_response_buf);
-                else
-                    logDebug("post result [%d][%s]", http.getHTTPResponseCode(), http_response_buf);
-
-                radio->disconnect();
-            } else {
-                logError("establishing PPP link failed");
-            }
-
-            post_timer.reset();
-        }
-#endif
-        wait_ms(10);
     }
 }
 
@@ -514,249 +153,3 @@
 
     return true;
 }
-
-
-// Sensor data acquisition functions
-/************************************************************************************************/
-#ifdef AnalogTemp
-void ReadAnalogTemp ()
-{
-    BDE0600_Temp_value = BDE0600_Temp.read_u16();
-
-    BDE0600_output = (float)BDE0600_Temp_value * (float)0.000050354; //(value * (3.3V/65535))
-    BDE0600_output = (BDE0600_output-(float)1.753)/((float)-0.01068) + (float)30;
-
-//    printf("BDE0600 Analog Temp Sensor Data:\r\n");
-//    printf(" Temp = %.2f C\r\n", BDE0600_output);
-}
-#endif
-
-#ifdef AnalogUV
-void ReadAnalogUV ()
-{
-    ML8511_UV_value = ML8511_UV.read_u16();
-    ML8511_output = (float)ML8511_UV_value * (float)0.000050354; //(value * (3.3V/65535))   //Note to self: when playing with this, a negative value is seen... Honestly, I think this has to do with my ADC converstion...
-    ML8511_output = (ML8511_output-(float)2.2)/((float)0.129) + 10;                           // Added +5 to the offset so when inside (aka, no UV, readings show 0)... this is the wrong approach... and the readings don't make sense... Fix this.
-
-//    printf("ML8511 Analog UV Sensor Data:\r\n");
-//    printf(" UV = %.1f mW/cm2\r\n", ML8511_output);
-
-}
-#endif
-
-
-#ifdef HallSensor
-void ReadHallSensor ()
-{
-
-    Hall_Return[0] = Hall_GPIO0;
-    Hall_Return[1] = Hall_GPIO1;
-
-//    printf("BU52011 Hall Switch Sensor Data:\r\n");
-//    printf(" South Detect = %d\r\n", Hall_Return[0]);
-//    printf(" North Detect = %d\r\n", Hall_Return[1]);
-
-    
-}
-#endif
-
-#ifdef COLOR
-void ReadCOLOR ()
-{
-
-    //Read color data from the IC
-    i2c.write(BH1745_addr_w, &BH1745_Addr_color_ReadData, 1, RepStart);
-    i2c.read(BH1745_addr_r, &BH1745_Content_ReadData[0], 6, NoRepStart);
-
-    //separate all data read into colors
-    BH1745[0] = (BH1745_Content_ReadData[1]<<8) | (BH1745_Content_ReadData[0]);
-    BH1745[1] = (BH1745_Content_ReadData[3]<<8) | (BH1745_Content_ReadData[2]);
-    BH1745[2] = (BH1745_Content_ReadData[5]<<8) | (BH1745_Content_ReadData[4]);
-
-    //Output Data into UART
-//    printf("BH1745 COLOR Sensor Data:\r\n");
-//    printf(" Red   = %d ADC Counts\r\n",BH1745[0]);
-//    printf(" Green = %d ADC Counts\r\n",BH1745[1]);
-//    printf(" Blue  = %d ADC Counts\r\n",BH1745[2]);
-
-}
-#endif
-
-#ifdef RPR0521       //als digital
-void ReadRPR0521_ALS ()
-{
-    i2c.write(RPR0521_addr_w, &RPR0521_Addr_ReadData, 1, RepStart);
-    i2c.read(RPR0521_addr_r, &RPR0521_Content_ReadData[0], 6, NoRepStart);
-
-    RPR0521_ALS[1] = (RPR0521_Content_ReadData[1]<<8) | (RPR0521_Content_ReadData[0]);
-    RPR0521_ALS_D0_RAWOUT = (RPR0521_Content_ReadData[3]<<8) | (RPR0521_Content_ReadData[2]);
-    RPR0521_ALS_D1_RAWOUT = (RPR0521_Content_ReadData[5]<<8) | (RPR0521_Content_ReadData[4]);
-    RPR0521_ALS_DataRatio = (float)RPR0521_ALS_D1_RAWOUT / (float)RPR0521_ALS_D0_RAWOUT;
-
-    if(RPR0521_ALS_DataRatio < (float)0.595) {
-        RPR0521_ALS[0] = ((float)1.682*(float)RPR0521_ALS_D0_RAWOUT - (float)1.877*(float)RPR0521_ALS_D1_RAWOUT);
-    } else if(RPR0521_ALS_DataRatio < (float)1.015) {
-        RPR0521_ALS[0] = ((float)0.644*(float)RPR0521_ALS_D0_RAWOUT - (float)0.132*(float)RPR0521_ALS_D1_RAWOUT);
-    } else if(RPR0521_ALS_DataRatio < (float)1.352) {
-        RPR0521_ALS[0] = ((float)0.756*(float)RPR0521_ALS_D0_RAWOUT - (float)0.243*(float)RPR0521_ALS_D1_RAWOUT);
-    } else if(RPR0521_ALS_DataRatio < (float)3.053) {
-        RPR0521_ALS[0] = ((float)0.766*(float)RPR0521_ALS_D0_RAWOUT - (float)0.25*(float)RPR0521_ALS_D1_RAWOUT);
-    } else {
-        RPR0521_ALS[0] = 0;
-    }
-//    printf("RPR-0521 ALS/PROX Sensor Data:\r\n");
-//    printf(" ALS = %0.2f lx\r\n", RPR0521_ALS[0]);
-//    printf(" PROX= %0.2f ADC Counts\r\n", RPR0521_ALS[1]);     //defined as a float but is an unsigned.
-
-}
-#endif
-
-#ifdef KMX62
-void ReadKMX62_Accel ()
-{
-    //Read Accel Portion from the IC
-    i2c.write(KMX62_addr_w, &KMX62_Addr_Accel_ReadData, 1, RepStart);
-    i2c.read(KMX62_addr_r, &KMX62_Content_Accel_ReadData[0], 6, NoRepStart);
-
-    //Note: The highbyte and low byte return a 14bit value, dropping the two LSB in the Low byte.
-    //      However, because we need the signed value, we will adjust the value when converting to "g"
-    MEMS_Accel_Xout = (KMX62_Content_Accel_ReadData[1]<<8) | (KMX62_Content_Accel_ReadData[0]);
-    MEMS_Accel_Yout = (KMX62_Content_Accel_ReadData[3]<<8) | (KMX62_Content_Accel_ReadData[2]);
-    MEMS_Accel_Zout = (KMX62_Content_Accel_ReadData[5]<<8) | (KMX62_Content_Accel_ReadData[4]);
-
-    //Note: Conversion to G is as follows:
-    //      Axis_ValueInG = MEMS_Accel_axis / 1024
-    //      However, since we did not remove the LSB previously, we need to divide by 4 again
-    //      Thus, we will divide the output by 4096 (1024*4) to convert and cancel out the LSB
-    MEMS_Accel[0] = ((float)MEMS_Accel_Xout/4096/2);
-    MEMS_Accel[1] = ((float)MEMS_Accel_Yout/4096/2);
-    MEMS_Accel[2] = ((float)MEMS_Accel_Zout/4096/2);
-
-    // Return Data to UART
-//    printf("KMX62 Accel+Mag Sensor Data:\r\n");
-//    printf(" AccX= %0.2f g\r\n", MEMS_Accel[0]);
-//    printf(" AccY= %0.2f g\r\n", MEMS_Accel[1]);
-//    printf(" AccZ= %0.2f g\r\n", MEMS_Accel[2]);
-
-}
-
-void ReadKMX62_Mag ()
-{
-
-    //Read Mag portion from the IC
-    i2c.write(KMX62_addr_w, &KMX62_Addr_Mag_ReadData, 1, RepStart);
-    i2c.read(KMX62_addr_r, &KMX62_Content_Mag_ReadData[0], 6, NoRepStart);
-
-    //Note: The highbyte and low byte return a 14bit value, dropping the two LSB in the Low byte.
-    //      However, because we need the signed value, we will adjust the value when converting to "g"
-    MEMS_Mag_Xout = (KMX62_Content_Mag_ReadData[1]<<8) | (KMX62_Content_Mag_ReadData[0]);
-    MEMS_Mag_Yout = (KMX62_Content_Mag_ReadData[3]<<8) | (KMX62_Content_Mag_ReadData[2]);
-    MEMS_Mag_Zout = (KMX62_Content_Mag_ReadData[5]<<8) | (KMX62_Content_Mag_ReadData[4]);
-
-    //Note: Conversion to G is as follows:
-    //      Axis_ValueInG = MEMS_Accel_axis / 1024
-    //      However, since we did not remove the LSB previously, we need to divide by 4 again
-    //      Thus, we will divide the output by 4095 (1024*4) to convert and cancel out the LSB
-    MEMS_Mag[0] = (float)MEMS_Mag_Xout/4096*(float)0.146;
-    MEMS_Mag[1] = (float)MEMS_Mag_Yout/4096*(float)0.146;
-    MEMS_Mag[2] = (float)MEMS_Mag_Zout/4096*(float)0.146;
-
-    // Return Data to UART
-//    printf(" MagX= %0.2f uT\r\n", MEMS_Mag[0]);
-//    printf(" MagY= %0.2f uT\r\n", MEMS_Mag[1]);
-//    printf(" MagZ= %0.2f uT\r\n", MEMS_Mag[2]);
-
-}
-#endif
-
-#ifdef KX022
-void ReadKX022 ()
-{
-    
-    //Read KX022 Portion from the IC
-    i2c.write(KX022_addr_w, &KX022_Addr_Accel_ReadData, 1, RepStart);
-    i2c.read(KX022_addr_r, &KX022_Content_ReadData[0], 6, NoRepStart);
-
-    //Format Data
-    KX022_Accel_X_RawOUT = (KX022_Content_ReadData[1]<<8) | (KX022_Content_ReadData[0]);
-    KX022_Accel_Y_RawOUT = (KX022_Content_ReadData[3]<<8) | (KX022_Content_ReadData[2]);
-    KX022_Accel_Z_RawOUT = (KX022_Content_ReadData[5]<<8) | (KX022_Content_ReadData[4]);
-
-    //Scale Data
-    KX022_Accel[0] = (float)KX022_Accel_X_RawOUT / 16384;
-    KX022_Accel[1] = (float)KX022_Accel_Y_RawOUT / 16384;
-    KX022_Accel[2] = (float)KX022_Accel_Z_RawOUT / 16384;
-
-    //Return Data through UART
-//    printf("KX022 Accelerometer Sensor Data: \r\n");
-//    printf(" AccX= %0.2f g\r\n", KX022_Accel[0]);
-//    printf(" AccY= %0.2f g\r\n", KX022_Accel[1]);
-//    printf(" AccZ= %0.2f g\r\n", KX022_Accel[2]);
-
-}
-#endif
-
-
-#ifdef Pressure
-void ReadPressure ()
-{
-
-    i2c.write(Press_addr_w, &Press_Addr_ReadData, 1, RepStart);
-    i2c.read(Press_addr_r, &Press_Content_ReadData[0], 6, NoRepStart);
-
-    BM1383_Temp_Out = (Press_Content_ReadData[0]<<8) | (Press_Content_ReadData[1]);
-    BM1383[0] = (float)BM1383_Temp_Out/32;
-
-    BM1383_Var  = (Press_Content_ReadData[2]<<3) | (Press_Content_ReadData[3] >> 5);
-    BM1383_Deci = ((Press_Content_ReadData[3] & 0x1f) << 6 | ((Press_Content_ReadData[4] >> 2)));
-    BM1383_Deci = (float)BM1383_Deci* (float)0.00048828125;  //0.00048828125 = 2^-11
-    BM1383[1] = (BM1383_Var + BM1383_Deci);   //question pending here...
-
-//    printf("BM1383 Pressure Sensor Data:\r\n");
-//    printf(" Temperature= %0.2f C\r\n", BM1383[0]);
-//    printf(" Pressure   = %0.2f hPa\r\n", BM1383[1]);
-
-}
-#endif
-
-
-/************************************************************************************
-//  reference only to remember what the names and fuctions are without finding them above.
- ************************************************************************************
-    (" Temp = %.2f C\r\n", BDE0600_output);
-    printf(" UV = %.1f mW/cm2\r\n", ML8511_output);
-
-    printf("BH1745 COLOR Sensor Data:\r\n");
-    printf(" Red   = %d ADC Counts\r\n",BH1745[0]);
-    printf(" Green = %d ADC Counts\r\n",BH1745[1]);
-    printf(" Blue  = %d ADC Counts\r\n",BH1745[2]);
-
-    printf(" ALS = %0.2f lx\r\n", RPR0521_ALS[0]);
-    printf(" PROX= %u ADC Counts\r\n", RPR0521_ALS[1]);     //defined as a float but is an unsigned, bad coding on my part.
-
-    printf("KMX62 Accel+Mag Sensor Data:\r\n");
-    printf(" AccX= %0.2f g\r\n", MEMS_Accel[0]);
-    printf(" AccY= %0.2f g\r\n", MEMS_Accel[1]);
-    printf(" AccZ= %0.2f g\r\n", MEMS_Accel[2]);
-
-    printf(" MagX= %0.2f uT\r\n", MEMS_Mag[0]);
-    printf(" MagY= %0.2f uT\r\n", MEMS_Mag[1]);
-    printf(" MagZ= %0.2f uT\r\n", MEMS_Mag[2]);
-
-    printf("KX022 Accelerometer Sensor Data: \r\n");
-    printf(" AccX= %0.2f g\r\n", KX022_Accel[0]);
-    printf(" AccY= %0.2f g\r\n", KX022_Accel[1]);
-    printf(" AccZ= %0.2f g\r\n", KX022_Accel[2]);
-
-    printf("BM1383 Pressure Sensor Data:\r\n");
-    printf(" Temperature= %0.2f C\r\n", BM1383[0]);
-    printf(" Pressure   = %0.2f hPa\r\n", BM1383[1]);
-
- **********************************************************************************/
-
-
-
-
-
-
-