Rev 1.0 4/26/2016 Paul Jaeger - Multitech, Brian Huey - Sprint Changed post interval to 2000ms added temp, analoguv and pressure to http post added alias: TEMP ANALOG-UV PRESSURE concatenated http post, to post all within the same routine and check for error after the post confirmed that data is published to Exosite
Dependencies: MbedJSONValue mbed mtsas
Fork of UUU_MultiTech_Dragonfly_Sprint by
Diff: main.cpp
- Revision:
- 8:e78dcfad254b
- Parent:
- 7:dd550a829ece
- Child:
- 9:6475e1b83491
diff -r dd550a829ece -r e78dcfad254b main.cpp --- a/main.cpp Fri Dec 11 16:00:08 2015 +0000 +++ b/main.cpp Fri Apr 15 21:31:39 2016 +0000 @@ -1,29 +1,25 @@ /************************************************************************* - * Dragonfly Example program for 2015 AT&T Government Solutions Hackathon + * Dragonfly Example program for 2016 Sprint Exosite Training * * 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 + * - Rohm Electronics Sensor Board + + * - 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 + * - reads data from all sensors on board * - 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 + * - optionally send data to Exosite + * - All data is sent to a specific location determined by the student login. + * - Exosite cloud platform (user must create own account and configure a device + * - you need to set the "VENDOR" and "MODEL" + * - you need to set the "do_cloud_post" flag to true for this to * work * @@ -32,11 +28,6 @@ * - 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 @@ -59,12 +50,17 @@ */ - #include "mbed.h" #include "mtsas.h" -#include "MbedJSONValue.h" -#include "HTTPJson.h" #include <string> +#include <sstream> + +#define EXOSITE_CIK "1e05228e50762cc29cf414bc518259a3ab5dc247" + +char EXOSITE_HEADER[] = "X-Exosite-CIK: " EXOSITE_CIK "\r\nAccept: application/x-www-form-urlencoded; charset=utf-8\r\n"; +const char EXOSITE_URL[] = "https://m2.exosite.com:443/onep:v1/stack/alias"; + +DigitalOut Led1Out(LED1); // Debug serial port static Serial debug(USBTX, USBRX); @@ -78,27 +74,12 @@ // 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 = ""; - -// 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 = ""; - -// M2X primary API key -static const std::string m2x_api_key = ""; +static const std::string apn = "b2b.tmobile.com"; // 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"; - - // variables for sensor data float temp_celsius; float humidity_percent; @@ -109,18 +90,12 @@ int32_t gyro_mdps[3]; // 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; int debug_baud = 115200; - /**************************************************************************************************** ****************************************************************************************************/ @@ -134,8 +109,6 @@ #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 @@ -281,6 +254,17 @@ void ReadKMX62_Mag (); void ReadPressure (); void ReadKX022(); +char* httpResToStr(HTTPResult res); + +namespace patch +{ + template < typename T > std::string to_string( const T& n ) + { + std::ostringstream stm ; + stm << n ; + return stm.str() ; + } +} /**************************************************************************************************** // main @@ -289,198 +273,60 @@ { mts::MTSLog::setLogLevel(mts::MTSLog::TRACE_LEVEL); 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 - -#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 ********************************************************** - // Initialization Radio Section ********************************************************** - - radio_ok = init_mtsas(); - if (! radio_ok) - logError("MTSAS init failed"); - else - logInfo("MTSAS is ok"); - -//End Radio Initialization Section ********************************************************** - -// button.fall(&button_irq); + logInfo("initializing cellular radio"); + if (!init_mtsas()) { + while (true) { + logError("failed to initialize cellular radio"); + wait(1); + } + } + + logInfo("Configuring http...\r\n"); + HTTPClient http; + HTTPResult result; + http.setHeader(EXOSITE_HEADER); + + char http_rx_buf[1024]; + // IHTTPDataIn object - will contain data received from server. + HTTPText http_rx(http_rx_buf, sizeof(http_rx_buf)); + + // IHTTPDataOut object - contains data to be posted to server. + HTTPMap http_tx; + + +//**************************************************************************************************** +// Initialize I2C Devices ************ +//****************************************************************************************************/ - Timer thpm_timer; - thpm_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 +//****************************************************************************************************/ +//End I2C Initialization Section ********************************************************** +//****************************************************************************************************/ - while (true) { - if (thpm_timer.read_ms() > thpm_interval_ms) { -#ifdef AnalogTemp - ReadAnalogTemp (); -#endif - -#ifdef AnalogUV - ReadAnalogUV (); -#endif - -#ifdef HallSensor - ReadHallSensor (); -#endif - -#ifdef COLOR - ReadCOLOR (); -#endif - -#ifdef RPR0521 //als digital - ReadRPR0521_ALS (); -#endif - -#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(); - } + Timer post_timer; + post_timer.start(); + logInfo("Setup complete."); + logInfo("Waiting for %d ms to trigger connect...", post_interval_ms); - 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); - print_timer.reset(); - } - - - -#ifdef SMS - if (sms_timer.read_ms() > sms_interval_ms) { - sms_timer.reset(); - logInfo("SMS Send Routine"); -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]; + while (true) { + if (post_timer.read_ms() > post_interval_ms && do_cloud_post) { + logInfo("bringing up the link"); + if (radio->connect()) { + float sensor_data = RPR0521_ALS_OUT; + logDebug("posting sensor data"); + logDebug("%f",sensor_data); - sms_str = "SENSOR DATA:\n"; - sms_str += sms_json.serialize(); - - logDebug("sending SMS to %s:\r\n%s", phone_number.c_str(), sms_str.c_str()); - Code ret = radio->sendSMS(phone_number, sms_str); - if (ret != MTS_SUCCESS) - 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); + http_tx.put("ALS", patch::to_string(sensor_data).c_str()); + + // Make HTTP POST request + result = http.post(EXOSITE_URL, http_tx, &http_rx); + if (result != HTTP_OK) { + logError("HTTP POST failed [%d][%s]", result, httpResToStr(result)); + } else { + logInfo("HTTP POST succeeded [%d]\r\n%s", http.getHTTPResponseCode(), http_rx_buf); + } radio->disconnect(); } else { @@ -488,12 +334,12 @@ } post_timer.reset(); + logInfo("Waiting for %d ms to trigger connect...", post_interval_ms); } -#endif - wait_ms(10); } } + // init functions bool init_mtsas() { @@ -515,248 +361,34 @@ 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; +char* httpResToStr(HTTPResult result) { + switch(result) { + case HTTP_PROCESSING: + return "HTTP_PROCESSING"; + case HTTP_PARSE: + return "HTTP_PARSE"; + case HTTP_DNS: + return "HTTP_DNS"; + case HTTP_PRTCL: + return "HTTP_PRTCL"; + case HTTP_NOTFOUND: + return "HTTP_NOTFOUND"; + case HTTP_REFUSED: + return "HTTP_REFUSED"; + case HTTP_ERROR: + return "HTTP_ERROR"; + case HTTP_TIMEOUT: + return "HTTP_TIMEOUT"; + case HTTP_CONN: + return "HTTP_CONN"; + case HTTP_CLOSED: + return "HTTP_CLOSED"; + case HTTP_REDIRECT: + return "HTTP_REDIRECT"; + case HTTP_OK: + return "HTTP_OK"; + default: + return "HTTP Result unknown"; } -// 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]); - - **********************************************************************************/ - - - - - - -