This is sample code for interfacing ROHM's SENSORSHLD1-EVK-101 with Nordic Semiconductor's nRF51-DK Development Kit Host BTLE Board

Dependencies:   BLE_API mbed nRF51822

Fork of Nordic_UART_TEMPLATE_ROHM by ROHMUSDC

Code Example for ROHM Mutli-Sensor Shield on the Nordic Semiconductor nRF51-DK

This code was written to be used with the Nordic Semiconductor nRF51-DK.

This is the basic example code for interfacing ROHM's Multi-sensor Shield Board onto this board.

Additional information about the ROHM MultiSensor Shield Board can be found at the following link: https://github.com/ROHMUSDC/ROHM_SensorPlatform_Multi-Sensor-Shield

For code example for the ROHM SENSORSHLD0-EVK-101, please see the following link: https://developer.mbed.org/teams/ROHMUSDC/code/Nordic_UART_TEMPLATE_ROHM/

Operation

Ultimately, this code will initialize all the sensors on the Multi-sensor shield board and then poll the sensors. The sensor data will then be returned to the BTLE COM port link and will be view-able on any BTLE enabled phone that can connect to the Nordic UART Application.

Supported ROHM Sensor Devices

  • BDE0600G Temperature Sensor
  • BM1383GLV Pressure Sensor
  • BU52014 Hall Sensor
  • ML8511 UV Sensor
  • RPR-0521 ALS/PROX Sensor
  • BH1745NUC Color Sensor
  • KMX62 Accel/Mag Sensor
  • KX122 Accel Sensor
  • BM1422 MI Magnetometer Sensor
  • KXG03 Gyro/Accel Sensor

Updates from SHLD0 to SHLD1

  • Pressure Sensor Changes: Fixed Register Map Changes for BM1383AGLV, See Pressure Sensor Datasheet for more details - TEMP and PRES output switched
  • Added new #ifdef section for Magnetometer
  • Changed Gyro Device Address (7bit addr now 0x4F, not 0x4E)

Sensor Applicable Code Sections

  • Added a Section in "Main" to act as initialization
  • Added to the "Periodic Callback" to read sensor data and return to Phone/Host

Questions/Feedback

Please feel free to let us know any questions/feedback/comments/concerns on the ROHM shield implementation by contacting the following e-mail:

Files at this revision

API Documentation at this revision

Comitter:
kbahar3
Date:
Thu Sep 15 20:53:01 2016 +0000
Parent:
8:2a19622864c2
Child:
10:5e4819579d0b
Commit message:
Added References to BM1383 (Non-A) for use with yellow sticker-ed boards

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Wed Jun 08 18:20:30 2016 +0000
+++ b/main.cpp	Thu Sep 15 20:53:01 2016 +0000
@@ -59,7 +59,8 @@
 #define KMX62               //KMX61, Accel/Mag Sensor
 #define Color               //BH1745, Color Sensor
 #define KX122               //KX122, Accelerometer Sensor
-#define Pressure            //BM1383, Barometric Pressure Sensor
+//#define BM1383A               //BM1383A, Barometric Pressure Sensor (NON-YELLOW STICKERED BOARDS)
+#define BM1383              //BM1383, Barometric Pressure Sensor (YELLOW STICKERED BOARDS)
 #define Magnetometer        //BM1422GMV, MI Magnetometer Sensor
 #define KXG03               //KXG03, Gyroscopic Sensor
 
@@ -210,7 +211,32 @@
 int         KX122_Accel_Z_HB = 0;
 #endif
 
-#ifdef Pressure
+#ifdef BM1383A
+int         Press_addr_w = 0xBA;
+int         Press_addr_r = 0xBB;
+
+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       BM1383_Var;
+float       BM1383_Deci;
+#endif
+
+#ifdef BM1383
 int         Press_addr_w = 0xBA;
 int         Press_addr_r = 0xBB;
 
@@ -378,7 +404,7 @@
             //transmit data
             len = snprintf((char*) buf, MAX_REPLY_LEN, "Color Sensor:");
             m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
-            wait_ms(20); 
+            wait_ms(20);
             
             len = snprintf((char*) buf, MAX_REPLY_LEN, "  Red= %d ADC", BH1745_Red);
             m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
@@ -607,7 +633,7 @@
         i++;
     }
     else if (i == 8){
-        #ifdef Pressure
+        #ifdef BM1383A
         if (m_ble.getGapState().connected) {
             //Read color Portion from the IC
             i2c.write(Press_addr_w, &Press_Addr_ReadData, 1, RepStart);
@@ -619,9 +645,9 @@
             BM1383_Var  = (Press_Content_ReadData[0]<<3) | (Press_Content_ReadData[1] >> 5);
             BM1383_Deci = ((Press_Content_ReadData[1] & 0x1f) << 6 | ((Press_Content_ReadData[2] >> 2)));
             BM1383_Deci = (float)BM1383_Deci* 0.00048828125;  //0.00048828125 = 2^-11
-            BM1383_Pres_Conv_Out = (BM1383_Var + BM1383_Deci);   //question pending here...
+            BM1383_Pres_Conv_Out = (BM1383_Var + BM1383_Deci);
             
-            len = snprintf((char*) buf, MAX_REPLY_LEN, "Pressure Sensor:");
+            len = snprintf((char*) buf, MAX_REPLY_LEN, "BM1383A Sensor:");
             m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
             wait_ms(20);
             
@@ -633,7 +659,36 @@
             m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
             wait_ms(20);
         }        
-        #endif  
+        #endif
+
+        #ifdef BM1383
+        if (m_ble.getGapState().connected) {
+            //Read color Portion from the IC
+            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_Temp_Conv_Out = (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* 0.00048828125;  //0.00048828125 = 2^-11
+            BM1383_Pres_Conv_Out = (BM1383_Var + BM1383_Deci);
+            
+            len = snprintf((char*) buf, MAX_REPLY_LEN, "BM1383 Sensor:");
+            m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
+            wait_ms(20);
+            
+            len = snprintf((char*) buf, MAX_REPLY_LEN, "  Temp= %0.2f C", BM1383_Temp_Conv_Out);
+            m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
+            wait_ms(20);
+            
+            len = snprintf((char*) buf, MAX_REPLY_LEN, "  Pres= %0.2f hPa", BM1383_Pres_Conv_Out);
+            m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
+            wait_ms(20);
+        }        
+        #endif
+        
         i++;
     }
     
@@ -849,7 +904,7 @@
     #ifdef RPR0521
     // 1. Mode Control (0x41), write (0xC6): ALS EN, PS EN, 100ms measurement for ALS and PS, PS_PULSE=1
     // 2. ALS_PS_CONTROL (0x42), write (0x03): LED Current = 200mA
-    // 3. PERSIST (0x43), write (0x20): PS Gain x4  
+    // 3. PERSIST (0x43), write (0x20): PS Gain x4
     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);
@@ -876,7 +931,13 @@
     i2c.write(KX122_addr_w, &KX122_Accel_CNTL2[0], 2, false);
     #endif
     
-    #ifdef Pressure
+    #ifdef BM1383A
+    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
+    
+    #ifdef BM1383
     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);