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:

Committer:
kbahar3
Date:
Thu Sep 15 20:56:42 2016 +0000
Revision:
10:5e4819579d0b
Parent:
9:878e7fad5347
Deleted Extra generated file when importing from MBED page

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kbahar3 6:6860e53dc7ae 1 /*
kbahar3 6:6860e53dc7ae 2 * mbed Microcontroller Library
Daniel Veilleux 0:442c7a6f1978 3 * Copyright (c) 2006-2013 ARM Limited
Daniel Veilleux 0:442c7a6f1978 4 *
Daniel Veilleux 0:442c7a6f1978 5 * Licensed under the Apache License, Version 2.0 (the "License");
Daniel Veilleux 0:442c7a6f1978 6 * you may not use this file except in compliance with the License.
Daniel Veilleux 0:442c7a6f1978 7 * You may obtain a copy of the License at
Daniel Veilleux 0:442c7a6f1978 8 *
Daniel Veilleux 0:442c7a6f1978 9 * http://www.apache.org/licenses/LICENSE-2.0
Daniel Veilleux 0:442c7a6f1978 10 *
Daniel Veilleux 0:442c7a6f1978 11 * Unless required by applicable law or agreed to in writing, software
Daniel Veilleux 0:442c7a6f1978 12 * distributed under the License is distributed on an "AS IS" BASIS,
Daniel Veilleux 0:442c7a6f1978 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Daniel Veilleux 0:442c7a6f1978 14 * See the License for the specific language governing permissions and
Daniel Veilleux 0:442c7a6f1978 15 * limitations under the License.
Daniel Veilleux 0:442c7a6f1978 16 */
kbahar3 2:c7b9d588c80f 17
kbahar3 2:c7b9d588c80f 18 /*
kbahar3 6:6860e53dc7ae 19 * Code Example for ROHM Mutli-Sensor Shield on the Nordic Semiconductor nRF51-DK
kbahar3 6:6860e53dc7ae 20 *
kbahar3 6:6860e53dc7ae 21 * Description: This Applications interfaces ROHM's Multi-Sensor Shield Board with the Nordic nRF51-DK
kbahar3 6:6860e53dc7ae 22 * This Code supports the following sensor devices on the shield:
kbahar3 2:c7b9d588c80f 23 * > BDE0600G Temperature Sensor
kbahar3 8:2a19622864c2 24 * > BM1383AGLV Pressure Sensor
kbahar3 2:c7b9d588c80f 25 * > BU52014 Hall Sensor
kbahar3 2:c7b9d588c80f 26 * > ML8511 UV Sensor
kbahar3 2:c7b9d588c80f 27 * > RPR-0521 ALS/PROX Sensor
kbahar3 2:c7b9d588c80f 28 * > BH1745NUC Color Sensor
kbahar3 2:c7b9d588c80f 29 * > KMX62 Accel/Mag Sensor
kbahar3 2:c7b9d588c80f 30 * > KX122 Accel Sensor
kbahar3 8:2a19622864c2 31 * > BM1422GMV MI Magnetometer
kbahar3 2:c7b9d588c80f 32 * > KXG03 Gyro (Currently Unavailable as IC hasn't docked yet)
kbahar3 2:c7b9d588c80f 33 *
kbahar3 2:c7b9d588c80f 34 * New Code:
kbahar3 6:6860e53dc7ae 35 * Added Variable Initialization for utilizing ROHM Sensors
kbahar3 2:c7b9d588c80f 36 * Added a Section in "Main" to act as initialization
kbahar3 2:c7b9d588c80f 37 * Added to the "Periodic Callback" to read sensor data and return to Phone/Host
kbahar3 8:2a19622864c2 38 *
kbahar3 8:2a19622864c2 39 * Updates from SHLD0 to SHLD1:
kbahar3 8:2a19622864c2 40 * > Pressure Sensor Changes: Fixed Register Map Changes for BM1383AGLV
kbahar3 8:2a19622864c2 41 * (See Pressure Sensor Datasheet for more details - TEMP and PRES output switched)
kbahar3 8:2a19622864c2 42 * > Added new #ifdef section for Magnetometer
kbahar3 8:2a19622864c2 43 * > Changed Gyro Device Address (7bit addr now 0x4F, not 0x4E)
kbahar3 5:d39ffc5638a3 44 *
kbahar3 5:d39ffc5638a3 45 * Additional information about the ROHM MultiSensor Shield Board can be found at the following link:
kbahar3 5:d39ffc5638a3 46 * https://github.com/ROHMUSDC/ROHM_SensorPlatform_Multi-Sensor-Shield
kbahar3 6:6860e53dc7ae 47 *
kbahar3 6:6860e53dc7ae 48 * Last Upadtaed: 9/28/15
kbahar3 6:6860e53dc7ae 49 * Author: ROHM USDC
kbahar3 6:6860e53dc7ae 50 * Contact Information: engineering@rohmsemiconductor.com
kbahar3 6:6860e53dc7ae 51 */
Daniel Veilleux 0:442c7a6f1978 52
kbahar3 7:71046927a0e9 53 #define nRF52DevKit
kbahar3 7:71046927a0e9 54
kbahar3 6:6860e53dc7ae 55 #define AnalogTemp //BDE0600, Analog Temperature Sensor
kbahar3 6:6860e53dc7ae 56 #define AnalogUV //ML8511, Analog UV Sensor
kbahar3 6:6860e53dc7ae 57 #define HallSensor //BU52011, Hall Switch Sensor
kbahar3 6:6860e53dc7ae 58 #define RPR0521 //RPR0521, ALS/PROX Sensor
kbahar3 6:6860e53dc7ae 59 #define KMX62 //KMX61, Accel/Mag Sensor
kbahar3 7:71046927a0e9 60 #define Color //BH1745, Color Sensor
kbahar3 7:71046927a0e9 61 #define KX122 //KX122, Accelerometer Sensor
kbahar3 9:878e7fad5347 62 //#define BM1383A //BM1383A, Barometric Pressure Sensor (NON-YELLOW STICKERED BOARDS)
kbahar3 9:878e7fad5347 63 #define BM1383 //BM1383, Barometric Pressure Sensor (YELLOW STICKERED BOARDS)
kbahar3 8:2a19622864c2 64 #define Magnetometer //BM1422GMV, MI Magnetometer Sensor
kbahar3 7:71046927a0e9 65 #define KXG03 //KXG03, Gyroscopic Sensor
kbahar3 1:2c0ab5cd1a7f 66
Daniel Veilleux 0:442c7a6f1978 67 #include "mbed.h"
Daniel Veilleux 0:442c7a6f1978 68 #include "BLEDevice.h"
Daniel Veilleux 0:442c7a6f1978 69 #include "UARTService.h"
Daniel Veilleux 0:442c7a6f1978 70 #include "nrf_temp.h"
kbahar3 2:c7b9d588c80f 71 #include "I2C.h"
Daniel Veilleux 0:442c7a6f1978 72
kbahar3 1:2c0ab5cd1a7f 73 #define MAX_REPLY_LEN (UARTService::BLE_UART_SERVICE_MAX_DATA_LEN) //Actually equal to 20
kbahar3 6:6860e53dc7ae 74 #define SENSOR_READ_INTERVAL_S (1.0F)
Daniel Veilleux 0:442c7a6f1978 75 #define ADV_INTERVAL_MS (1000UL)
Daniel Veilleux 0:442c7a6f1978 76 #define UART_BAUD_RATE (19200UL)
Daniel Veilleux 0:442c7a6f1978 77 #define DEVICE_NAME ("DEMO SENSOR") // This can be read AFTER connecting to the device.
kbahar3 6:6860e53dc7ae 78 #define SHORT_NAME ("ROHMSHLD") // Keep this short: max 8 chars if a 128bit UUID is also advertised.
Daniel Veilleux 0:442c7a6f1978 79 #define DEBUG(...) { m_serial_port.printf(__VA_ARGS__); }
Daniel Veilleux 0:442c7a6f1978 80
kbahar3 1:2c0ab5cd1a7f 81 // Function Prototypes
kbahar3 6:6860e53dc7ae 82 void PBTrigger(); //Interrupt function for PB4
Daniel Veilleux 0:442c7a6f1978 83
kbahar3 1:2c0ab5cd1a7f 84 // Global Variables
Daniel Veilleux 0:442c7a6f1978 85 BLEDevice m_ble;
kbahar3 7:71046927a0e9 86 Serial m_serial_port(p9, p11); // TX pin, RX pin Original
kbahar3 7:71046927a0e9 87 //Serial m_serial_port(p8, p10); // TX pin, RX pin
Daniel Veilleux 0:442c7a6f1978 88 DigitalOut m_cmd_led(LED1);
Daniel Veilleux 0:442c7a6f1978 89 DigitalOut m_error_led(LED2);
Daniel Veilleux 0:442c7a6f1978 90 UARTService *m_uart_service_ptr;
kbahar3 7:71046927a0e9 91 DigitalIn testButton(p20); //Original
kbahar3 7:71046927a0e9 92 //DigitalIn testButton(p19);
kbahar3 7:71046927a0e9 93 InterruptIn sw4Press(p20); //Original
kbahar3 8:2a19622864c2 94 //InterruptIn sw4Press(p19);
kbahar3 7:71046927a0e9 95 I2C i2c(p30,p7); //Original DK Kit
kbahar3 6:6860e53dc7ae 96 bool RepStart = true;
kbahar3 6:6860e53dc7ae 97 bool NoRepStart = false;
kbahar3 6:6860e53dc7ae 98 int i = 1;
Daniel Veilleux 0:442c7a6f1978 99
kbahar3 1:2c0ab5cd1a7f 100 //Sensor Variables
kbahar3 6:6860e53dc7ae 101 #ifdef AnalogTemp
kbahar3 7:71046927a0e9 102 AnalogIn BDE0600_Temp(p3); //Original Dev Kit
kbahar3 7:71046927a0e9 103 //AnalogIn BDE0600_Temp(p28);
kbahar3 1:2c0ab5cd1a7f 104 uint16_t BDE0600_Temp_value;
kbahar3 1:2c0ab5cd1a7f 105 float BDE0600_output;
kbahar3 6:6860e53dc7ae 106 #endif
kbahar3 1:2c0ab5cd1a7f 107
kbahar3 6:6860e53dc7ae 108 #ifdef AnalogUV
kbahar3 7:71046927a0e9 109 AnalogIn ML8511_UV(p5); //Original Dev Kit
kbahar3 7:71046927a0e9 110 //AnalogIn ML8511_UV(p30);
kbahar3 1:2c0ab5cd1a7f 111 uint16_t ML8511_UV_value;
kbahar3 1:2c0ab5cd1a7f 112 float ML8511_output;
kbahar3 6:6860e53dc7ae 113 #endif
kbahar3 1:2c0ab5cd1a7f 114
kbahar3 6:6860e53dc7ae 115 #ifdef HallSensor
kbahar3 7:71046927a0e9 116 DigitalIn Hall_GPIO0(p14); //Original Dev Kit
kbahar3 7:71046927a0e9 117 DigitalIn Hall_GPIO1(p15); //Original Dev Kit
kbahar3 7:71046927a0e9 118 //DigitalIn Hall_GPIO0(p13);
kbahar3 7:71046927a0e9 119 //DigitalIn Hall_GPIO1(p14);
kbahar3 7:71046927a0e9 120
kbahar3 1:2c0ab5cd1a7f 121 int Hall_Return1;
kbahar3 1:2c0ab5cd1a7f 122 int Hall_Return0;
kbahar3 6:6860e53dc7ae 123 #endif
kbahar3 2:c7b9d588c80f 124
kbahar3 6:6860e53dc7ae 125 #ifdef RPR0521
kbahar3 6:6860e53dc7ae 126 int RPR0521_addr_w = 0x70;
kbahar3 6:6860e53dc7ae 127 int RPR0521_addr_r = 0x71;
kbahar3 2:c7b9d588c80f 128
kbahar3 2:c7b9d588c80f 129 char RPR0521_ModeControl[2] = {0x41, 0xE6};
kbahar3 2:c7b9d588c80f 130 char RPR0521_ALSPSControl[2] = {0x42, 0x03};
kbahar3 2:c7b9d588c80f 131 char RPR0521_Persist[2] = {0x43, 0x20};
kbahar3 2:c7b9d588c80f 132 char RPR0521_Addr_ReadData = 0x44;
kbahar3 2:c7b9d588c80f 133 char RPR0521_Content_ReadData[6];
kbahar3 2:c7b9d588c80f 134
kbahar3 2:c7b9d588c80f 135 int RPR0521_PS_RAWOUT = 0;
kbahar3 2:c7b9d588c80f 136 float RPR0521_PS_OUT = 0;
kbahar3 2:c7b9d588c80f 137 int RPR0521_ALS_D0_RAWOUT = 0;
kbahar3 2:c7b9d588c80f 138 int RPR0521_ALS_D1_RAWOUT = 0;
kbahar3 2:c7b9d588c80f 139 float RPR0521_ALS_DataRatio = 0;
kbahar3 2:c7b9d588c80f 140 float RPR0521_ALS_OUT = 0;
kbahar3 2:c7b9d588c80f 141 #endif
Daniel Veilleux 0:442c7a6f1978 142
kbahar3 3:c3ee9d663fb8 143 #ifdef KMX62
kbahar3 6:6860e53dc7ae 144 int KMX62_addr_w = 0x1C;
kbahar3 6:6860e53dc7ae 145 int KMX62_addr_r = 0x1D;
kbahar3 3:c3ee9d663fb8 146
kbahar3 3:c3ee9d663fb8 147 char KMX62_CNTL2[2] = {0x3A, 0x5F};
kbahar3 3:c3ee9d663fb8 148 char KMX62_Addr_Accel_ReadData = 0x0A;
kbahar3 3:c3ee9d663fb8 149 char KMX62_Content_Accel_ReadData[6];
kbahar3 3:c3ee9d663fb8 150 char KMX62_Addr_Mag_ReadData = 0x10;
kbahar3 3:c3ee9d663fb8 151 char KMX62_Content_Mag_ReadData[6];
kbahar3 3:c3ee9d663fb8 152
kbahar3 6:6860e53dc7ae 153 short int MEMS_Accel_Xout = 0;
kbahar3 6:6860e53dc7ae 154 short int MEMS_Accel_Yout = 0;
kbahar3 6:6860e53dc7ae 155 short int MEMS_Accel_Zout = 0;
kbahar3 6:6860e53dc7ae 156 double MEMS_Accel_Conv_Xout = 0;
kbahar3 6:6860e53dc7ae 157 double MEMS_Accel_Conv_Yout = 0;
kbahar3 6:6860e53dc7ae 158 double MEMS_Accel_Conv_Zout = 0;
kbahar3 6:6860e53dc7ae 159 short int MEMS_Mag_Xout = 0;
kbahar3 6:6860e53dc7ae 160 short int MEMS_Mag_Yout = 0;
kbahar3 6:6860e53dc7ae 161 short int MEMS_Mag_Zout = 0;
kbahar3 3:c3ee9d663fb8 162 float MEMS_Mag_Conv_Xout = 0;
kbahar3 3:c3ee9d663fb8 163 float MEMS_Mag_Conv_Yout = 0;
kbahar3 3:c3ee9d663fb8 164 float MEMS_Mag_Conv_Zout = 0;
kbahar3 3:c3ee9d663fb8 165 #endif
kbahar3 3:c3ee9d663fb8 166
kbahar3 7:71046927a0e9 167 #ifdef Color
kbahar3 6:6860e53dc7ae 168 int BH1745_addr_w = 0x72;
kbahar3 6:6860e53dc7ae 169 int BH1745_addr_r = 0x73;
kbahar3 5:d39ffc5638a3 170
kbahar3 5:d39ffc5638a3 171 char BH1745_persistence[2] = {0x61, 0x03};
kbahar3 5:d39ffc5638a3 172 char BH1745_mode1[2] = {0x41, 0x00};
kbahar3 5:d39ffc5638a3 173 char BH1745_mode2[2] = {0x42, 0x92};
kbahar3 5:d39ffc5638a3 174 char BH1745_mode3[2] = {0x43, 0x02};
kbahar3 5:d39ffc5638a3 175
kbahar3 5:d39ffc5638a3 176 char BH1745_Content_ReadData[6];
kbahar3 5:d39ffc5638a3 177 char BH1745_Addr_color_ReadData = 0x50;
kbahar3 5:d39ffc5638a3 178
kbahar3 6:6860e53dc7ae 179 int BH1745_Red;
kbahar3 6:6860e53dc7ae 180 int BH1745_Blue;
kbahar3 6:6860e53dc7ae 181 int BH1745_Green;
kbahar3 5:d39ffc5638a3 182
kbahar3 5:d39ffc5638a3 183 #endif
kbahar3 5:d39ffc5638a3 184
kbahar3 7:71046927a0e9 185 #ifdef KX122
kbahar3 7:71046927a0e9 186 int KX122_addr_w = 0x3C;
kbahar3 7:71046927a0e9 187 int KX122_addr_r = 0x3D;
kbahar3 5:d39ffc5638a3 188
kbahar3 7:71046927a0e9 189 char KX122_Accel_CNTL1[2] = {0x18, 0x41};
kbahar3 7:71046927a0e9 190 char KX122_Accel_ODCNTL[2] = {0x1B, 0x02};
kbahar3 7:71046927a0e9 191 char KX122_Accel_CNTL3[2] = {0x1A, 0xD8};
kbahar3 7:71046927a0e9 192 char KX122_Accel_TILT_TIMER[2] = {0x22, 0x01};
kbahar3 7:71046927a0e9 193 char KX122_Accel_CNTL2[2] = {0x18, 0xC1};
kbahar3 5:d39ffc5638a3 194
kbahar3 7:71046927a0e9 195 char KX122_Content_ReadData[6];
kbahar3 7:71046927a0e9 196 char KX122_Addr_Accel_ReadData = 0x06;
kbahar3 5:d39ffc5638a3 197
kbahar3 7:71046927a0e9 198 float KX122_Accel_X;
kbahar3 7:71046927a0e9 199 float KX122_Accel_Y;
kbahar3 7:71046927a0e9 200 float KX122_Accel_Z;
kbahar3 5:d39ffc5638a3 201
kbahar3 7:71046927a0e9 202 short int KX122_Accel_X_RawOUT = 0;
kbahar3 7:71046927a0e9 203 short int KX122_Accel_Y_RawOUT = 0;
kbahar3 7:71046927a0e9 204 short int KX122_Accel_Z_RawOUT = 0;
kbahar3 5:d39ffc5638a3 205
kbahar3 7:71046927a0e9 206 int KX122_Accel_X_LB = 0;
kbahar3 7:71046927a0e9 207 int KX122_Accel_X_HB = 0;
kbahar3 7:71046927a0e9 208 int KX122_Accel_Y_LB = 0;
kbahar3 7:71046927a0e9 209 int KX122_Accel_Y_HB = 0;
kbahar3 7:71046927a0e9 210 int KX122_Accel_Z_LB = 0;
kbahar3 7:71046927a0e9 211 int KX122_Accel_Z_HB = 0;
kbahar3 5:d39ffc5638a3 212 #endif
kbahar3 5:d39ffc5638a3 213
kbahar3 9:878e7fad5347 214 #ifdef BM1383A
kbahar3 9:878e7fad5347 215 int Press_addr_w = 0xBA;
kbahar3 9:878e7fad5347 216 int Press_addr_r = 0xBB;
kbahar3 9:878e7fad5347 217
kbahar3 9:878e7fad5347 218 char PWR_DOWN[2] = {0x12, 0x01};
kbahar3 9:878e7fad5347 219 char SLEEP[2] = {0x13, 0x01};
kbahar3 9:878e7fad5347 220 char Mode_Control[2] = {0x14, 0xC4};
kbahar3 9:878e7fad5347 221
kbahar3 9:878e7fad5347 222 char Press_Content_ReadData[6];
kbahar3 9:878e7fad5347 223 char Press_Addr_ReadData =0x1A;
kbahar3 9:878e7fad5347 224
kbahar3 9:878e7fad5347 225 int BM1383_Temp_highByte;
kbahar3 9:878e7fad5347 226 int BM1383_Temp_lowByte;
kbahar3 9:878e7fad5347 227 int BM1383_Pres_highByte;
kbahar3 9:878e7fad5347 228 int BM1383_Pres_lowByte;
kbahar3 9:878e7fad5347 229 int BM1383_Pres_leastByte;
kbahar3 9:878e7fad5347 230
kbahar3 9:878e7fad5347 231 short int BM1383_Temp_Out;
kbahar3 9:878e7fad5347 232 float BM1383_Temp_Conv_Out;
kbahar3 9:878e7fad5347 233 float BM1383_Pres_Conv_Out;
kbahar3 9:878e7fad5347 234
kbahar3 9:878e7fad5347 235 float BM1383_Var;
kbahar3 9:878e7fad5347 236 float BM1383_Deci;
kbahar3 9:878e7fad5347 237 #endif
kbahar3 9:878e7fad5347 238
kbahar3 9:878e7fad5347 239 #ifdef BM1383
kbahar3 6:6860e53dc7ae 240 int Press_addr_w = 0xBA;
kbahar3 6:6860e53dc7ae 241 int Press_addr_r = 0xBB;
kbahar3 5:d39ffc5638a3 242
kbahar3 5:d39ffc5638a3 243 char PWR_DOWN[2] = {0x12, 0x01};
kbahar3 5:d39ffc5638a3 244 char SLEEP[2] = {0x13, 0x01};
kbahar3 5:d39ffc5638a3 245 char Mode_Control[2] = {0x14, 0xC4};
kbahar3 5:d39ffc5638a3 246
kbahar3 5:d39ffc5638a3 247 char Press_Content_ReadData[6];
kbahar3 5:d39ffc5638a3 248 char Press_Addr_ReadData =0x1A;
kbahar3 5:d39ffc5638a3 249
kbahar3 5:d39ffc5638a3 250 int BM1383_Temp_highByte;
kbahar3 5:d39ffc5638a3 251 int BM1383_Temp_lowByte;
kbahar3 5:d39ffc5638a3 252 int BM1383_Pres_highByte;
kbahar3 5:d39ffc5638a3 253 int BM1383_Pres_lowByte;
kbahar3 5:d39ffc5638a3 254 int BM1383_Pres_leastByte;
kbahar3 5:d39ffc5638a3 255
kbahar3 6:6860e53dc7ae 256 short int BM1383_Temp_Out;
kbahar3 5:d39ffc5638a3 257 float BM1383_Temp_Conv_Out;
kbahar3 5:d39ffc5638a3 258 float BM1383_Pres_Conv_Out;
kbahar3 5:d39ffc5638a3 259
kbahar3 5:d39ffc5638a3 260 float BM1383_Var;
kbahar3 5:d39ffc5638a3 261 float BM1383_Deci;
kbahar3 5:d39ffc5638a3 262 #endif
kbahar3 5:d39ffc5638a3 263
kbahar3 8:2a19622864c2 264 #ifdef Magnetometer
kbahar3 8:2a19622864c2 265 int BM1422_addr_w = 0x1E;
kbahar3 8:2a19622864c2 266 int BM1422_addr_r = 0x1F;
kbahar3 8:2a19622864c2 267 char BM1422_Content_ReadData[6];
kbahar3 8:2a19622864c2 268
kbahar3 8:2a19622864c2 269 char BM1422_CNTL1_Init[2] = {0x1B, 0xC0};
kbahar3 8:2a19622864c2 270 char BM1422_CNTL4_HB_Init[2] = {0x5C, 0x00};
kbahar3 8:2a19622864c2 271 char BM1422_CNTL4_LB_Init[2] = {0x5D, 0x00};
kbahar3 8:2a19622864c2 272 char BM1422_CNTL3_Init[2] = {0x1D, 0x40};
kbahar3 8:2a19622864c2 273
kbahar3 8:2a19622864c2 274 char BM1422_Addr_ReadData = 0x10;
kbahar3 8:2a19622864c2 275 short int BM1422_MAG_X_RawOUT = 0;
kbahar3 8:2a19622864c2 276 short int BM1422_MAG_Y_RawOUT = 0;
kbahar3 8:2a19622864c2 277 short int BM1422_MAG_Z_RawOUT = 0;
kbahar3 8:2a19622864c2 278 #endif
kbahar3 8:2a19622864c2 279
kbahar3 7:71046927a0e9 280 #ifdef KXG03
kbahar3 7:71046927a0e9 281 int j = 11;
kbahar3 7:71046927a0e9 282 int t = 1;
kbahar3 7:71046927a0e9 283 short int aveX = 0;
kbahar3 7:71046927a0e9 284 short int aveX2 = 0;
kbahar3 7:71046927a0e9 285 short int aveX3 = 0;
kbahar3 7:71046927a0e9 286 short int aveY = 0;
kbahar3 7:71046927a0e9 287 short int aveY2 = 0;
kbahar3 7:71046927a0e9 288 short int aveY3 = 0;
kbahar3 7:71046927a0e9 289 short int aveZ = 0;
kbahar3 7:71046927a0e9 290 short int aveZ2 = 0;
kbahar3 7:71046927a0e9 291 short int aveZ3 = 0;
kbahar3 7:71046927a0e9 292 float ave22;
kbahar3 7:71046927a0e9 293 float ave33;
kbahar3 8:2a19622864c2 294 int KXG03_addr_w = 0x9E; //write
kbahar3 8:2a19622864c2 295 int KXG03_addr_r = 0x9F; //read
kbahar3 7:71046927a0e9 296 char KXG03_STBY_REG[2] = {0x43, 0x00};
kbahar3 7:71046927a0e9 297 char KXG03_Content_ReadData[6];
kbahar3 7:71046927a0e9 298 //char KXG03_Content_Accel_ReadData[6];
kbahar3 7:71046927a0e9 299 char KXG03_Addr_ReadData = 0x02;
kbahar3 7:71046927a0e9 300 //char KXG03_Addr_Accel_ReadData = 0x08;
kbahar3 7:71046927a0e9 301 float KXG03_Gyro_XX;
kbahar3 7:71046927a0e9 302 float KXG03_Gyro_X;
kbahar3 7:71046927a0e9 303 float KXG03_Gyro_Y;
kbahar3 7:71046927a0e9 304 float KXG03_Gyro_Z;
kbahar3 7:71046927a0e9 305 short int KXG03_Gyro_X_RawOUT = 0;
kbahar3 7:71046927a0e9 306 short int KXG03_Gyro_Y_RawOUT = 0;
kbahar3 7:71046927a0e9 307 short int KXG03_Gyro_Z_RawOUT = 0;
kbahar3 7:71046927a0e9 308 short int KXG03_Gyro_X_RawOUT2 = 0;
kbahar3 7:71046927a0e9 309 short int KXG03_Gyro_Y_RawOUT2 = 0;
kbahar3 7:71046927a0e9 310 short int KXG03_Gyro_Z_RawOUT2 = 0;
kbahar3 7:71046927a0e9 311 float KXG03_Accel_X;
kbahar3 7:71046927a0e9 312 float KXG03_Accel_Y;
kbahar3 7:71046927a0e9 313 float KXG03_Accel_Z;
kbahar3 7:71046927a0e9 314 short int KXG03_Accel_X_RawOUT = 0;
kbahar3 7:71046927a0e9 315 short int KXG03_Accel_Y_RawOUT = 0;
kbahar3 7:71046927a0e9 316 short int KXG03_Accel_Z_RawOUT = 0;
kbahar3 7:71046927a0e9 317 #endif
kbahar3 7:71046927a0e9 318
Daniel Veilleux 0:442c7a6f1978 319 /**
Daniel Veilleux 0:442c7a6f1978 320 * This callback is used whenever a disconnection occurs.
Daniel Veilleux 0:442c7a6f1978 321 */
Daniel Veilleux 0:442c7a6f1978 322 void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason)
Daniel Veilleux 0:442c7a6f1978 323 {
Daniel Veilleux 0:442c7a6f1978 324 switch (reason) {
Daniel Veilleux 0:442c7a6f1978 325 case Gap::REMOTE_USER_TERMINATED_CONNECTION:
Daniel Veilleux 0:442c7a6f1978 326 DEBUG("Disconnected (REMOTE_USER_TERMINATED_CONNECTION)\n\r");
Daniel Veilleux 0:442c7a6f1978 327 break;
Daniel Veilleux 0:442c7a6f1978 328 case Gap::LOCAL_HOST_TERMINATED_CONNECTION:
Daniel Veilleux 0:442c7a6f1978 329 DEBUG("Disconnected (LOCAL_HOST_TERMINATED_CONNECTION)\n\r");
Daniel Veilleux 0:442c7a6f1978 330 break;
Daniel Veilleux 0:442c7a6f1978 331 case Gap::CONN_INTERVAL_UNACCEPTABLE:
Daniel Veilleux 0:442c7a6f1978 332 DEBUG("Disconnected (CONN_INTERVAL_UNACCEPTABLE)\n\r");
Daniel Veilleux 0:442c7a6f1978 333 break;
Daniel Veilleux 0:442c7a6f1978 334 }
Daniel Veilleux 0:442c7a6f1978 335
Daniel Veilleux 0:442c7a6f1978 336 DEBUG("Restarting the advertising process\n\r");
Daniel Veilleux 0:442c7a6f1978 337 m_ble.startAdvertising();
Daniel Veilleux 0:442c7a6f1978 338 }
Daniel Veilleux 0:442c7a6f1978 339
Daniel Veilleux 0:442c7a6f1978 340 /**
Daniel Veilleux 0:442c7a6f1978 341 * This callback is used whenever the host writes data to one of our GATT characteristics.
Daniel Veilleux 0:442c7a6f1978 342 */
Daniel Veilleux 0:442c7a6f1978 343 void dataWrittenCallback(const GattCharacteristicWriteCBParams *params)
Daniel Veilleux 0:442c7a6f1978 344 {
Daniel Veilleux 0:442c7a6f1978 345 // Ensure that initialization is finished and the host has written to the TX characteristic.
Daniel Veilleux 0:442c7a6f1978 346 if ((m_uart_service_ptr != NULL) && (params->charHandle == m_uart_service_ptr->getTXCharacteristicHandle())) {
Daniel Veilleux 0:442c7a6f1978 347 uint8_t buf[MAX_REPLY_LEN];
Daniel Veilleux 0:442c7a6f1978 348 uint32_t len = 0;
Daniel Veilleux 0:442c7a6f1978 349 if (1 == params->len) {
Daniel Veilleux 0:442c7a6f1978 350 switch (params->data[0]) {
Daniel Veilleux 0:442c7a6f1978 351 case '0':
kbahar3 1:2c0ab5cd1a7f 352 m_cmd_led = m_cmd_led ^ 1;
kbahar3 1:2c0ab5cd1a7f 353 len = snprintf((char*) buf, MAX_REPLY_LEN, "OK... LED ON");
Daniel Veilleux 0:442c7a6f1978 354 break;
Daniel Veilleux 0:442c7a6f1978 355 case '1':
kbahar3 1:2c0ab5cd1a7f 356 m_cmd_led = m_cmd_led ^ 1;
kbahar3 1:2c0ab5cd1a7f 357 len = snprintf((char*) buf, MAX_REPLY_LEN, "OK... LED OFF");
Daniel Veilleux 0:442c7a6f1978 358 break;
Daniel Veilleux 0:442c7a6f1978 359 default:
kbahar3 1:2c0ab5cd1a7f 360 len = snprintf((char*) buf, MAX_REPLY_LEN, "ERROR");
Daniel Veilleux 0:442c7a6f1978 361 break;
Daniel Veilleux 0:442c7a6f1978 362 }
Daniel Veilleux 0:442c7a6f1978 363 }
Daniel Veilleux 0:442c7a6f1978 364 else
Daniel Veilleux 0:442c7a6f1978 365 {
kbahar3 1:2c0ab5cd1a7f 366 len = snprintf((char*) buf, MAX_REPLY_LEN, "ERROR");
kbahar3 4:eabae2996ecc 367 }
Daniel Veilleux 0:442c7a6f1978 368 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
Daniel Veilleux 0:442c7a6f1978 369 DEBUG("%d bytes received from host\n\r", params->len);
Daniel Veilleux 0:442c7a6f1978 370 }
Daniel Veilleux 0:442c7a6f1978 371 }
Daniel Veilleux 0:442c7a6f1978 372
Daniel Veilleux 0:442c7a6f1978 373 /**
Daniel Veilleux 0:442c7a6f1978 374 * This callback is used whenever a write to a GATT characteristic causes data to be sent to the host.
Daniel Veilleux 0:442c7a6f1978 375 */
Daniel Veilleux 0:442c7a6f1978 376 void dataSentCallback(unsigned count)
Daniel Veilleux 0:442c7a6f1978 377 {
Daniel Veilleux 0:442c7a6f1978 378 // NOTE: The count always seems to be 1 regardless of data.
Daniel Veilleux 0:442c7a6f1978 379 DEBUG("%d bytes sent to host\n\r", count);
Daniel Veilleux 0:442c7a6f1978 380 }
Daniel Veilleux 0:442c7a6f1978 381
Daniel Veilleux 0:442c7a6f1978 382
Daniel Veilleux 0:442c7a6f1978 383 /**
Daniel Veilleux 0:442c7a6f1978 384 * This callback is scheduled to be called periodically via a low-priority interrupt.
Daniel Veilleux 0:442c7a6f1978 385 */
Daniel Veilleux 0:442c7a6f1978 386 void periodicCallback(void)
Daniel Veilleux 0:442c7a6f1978 387 {
kbahar3 1:2c0ab5cd1a7f 388 uint8_t buf[MAX_REPLY_LEN];
kbahar3 1:2c0ab5cd1a7f 389 uint32_t len = 0;
kbahar3 1:2c0ab5cd1a7f 390
kbahar3 6:6860e53dc7ae 391 if(i == 1) {
kbahar3 7:71046927a0e9 392 #ifdef Color
kbahar3 6:6860e53dc7ae 393 if (m_ble.getGapState().connected) {
kbahar3 6:6860e53dc7ae 394 //Read color Portion from the IC
kbahar3 6:6860e53dc7ae 395 i2c.write(BH1745_addr_w, &BH1745_Addr_color_ReadData, 1, RepStart);
kbahar3 6:6860e53dc7ae 396 i2c.read(BH1745_addr_r, &BH1745_Content_ReadData[0], 6, NoRepStart);
kbahar3 6:6860e53dc7ae 397
kbahar3 6:6860e53dc7ae 398 //separate all data read into colors
kbahar3 6:6860e53dc7ae 399 BH1745_Red = (BH1745_Content_ReadData[1]<<8) | (BH1745_Content_ReadData[0]);
kbahar3 6:6860e53dc7ae 400 BH1745_Green = (BH1745_Content_ReadData[3]<<8) | (BH1745_Content_ReadData[2]);
kbahar3 6:6860e53dc7ae 401 BH1745_Blue = (BH1745_Content_ReadData[5]<<8) | (BH1745_Content_ReadData[4]);
kbahar3 1:2c0ab5cd1a7f 402
kbahar3 6:6860e53dc7ae 403
kbahar3 6:6860e53dc7ae 404 //transmit data
kbahar3 6:6860e53dc7ae 405 len = snprintf((char*) buf, MAX_REPLY_LEN, "Color Sensor:");
kbahar3 6:6860e53dc7ae 406 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 9:878e7fad5347 407 wait_ms(20);
kbahar3 6:6860e53dc7ae 408
kbahar3 6:6860e53dc7ae 409 len = snprintf((char*) buf, MAX_REPLY_LEN, " Red= %d ADC", BH1745_Red);
kbahar3 6:6860e53dc7ae 410 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 6:6860e53dc7ae 411 wait_ms(20);
kbahar3 6:6860e53dc7ae 412
kbahar3 6:6860e53dc7ae 413 len = snprintf((char*) buf, MAX_REPLY_LEN, " Green= %d ADC", BH1745_Green);
kbahar3 6:6860e53dc7ae 414 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 6:6860e53dc7ae 415 wait_ms(20);
kbahar3 6:6860e53dc7ae 416
kbahar3 6:6860e53dc7ae 417 len = snprintf((char*) buf, MAX_REPLY_LEN, " Blue= %d ADC", BH1745_Blue);
kbahar3 6:6860e53dc7ae 418 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 6:6860e53dc7ae 419 wait_ms(20);
kbahar3 6:6860e53dc7ae 420
kbahar3 6:6860e53dc7ae 421 }
kbahar3 6:6860e53dc7ae 422 #endif
kbahar3 6:6860e53dc7ae 423 i++;
kbahar3 1:2c0ab5cd1a7f 424 }
kbahar3 6:6860e53dc7ae 425 else if(i == 2){
kbahar3 6:6860e53dc7ae 426 #ifdef AnalogTemp
kbahar3 6:6860e53dc7ae 427 if (m_ble.getGapState().connected) {
kbahar3 6:6860e53dc7ae 428 BDE0600_Temp_value = BDE0600_Temp.read_u16();
kbahar3 6:6860e53dc7ae 429 BDE0600_output = (float)BDE0600_Temp_value * 0.00283; //(value * (2.9V/1024))
kbahar3 6:6860e53dc7ae 430 BDE0600_output = (BDE0600_output-1.753)/(-0.01068) + 30;
kbahar3 6:6860e53dc7ae 431
kbahar3 6:6860e53dc7ae 432 len = snprintf((char*) buf, MAX_REPLY_LEN, "Temp Sensor:");
kbahar3 6:6860e53dc7ae 433 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 6:6860e53dc7ae 434 wait_ms(20);
kbahar3 6:6860e53dc7ae 435
kbahar3 6:6860e53dc7ae 436 len = snprintf((char*) buf, MAX_REPLY_LEN, " Temp= %.2f C", BDE0600_output);
kbahar3 6:6860e53dc7ae 437 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 6:6860e53dc7ae 438 wait_ms(20);
kbahar3 6:6860e53dc7ae 439 }
kbahar3 6:6860e53dc7ae 440 #endif
kbahar3 6:6860e53dc7ae 441 i++;
kbahar3 6:6860e53dc7ae 442 }
kbahar3 6:6860e53dc7ae 443 else if(i == 3){
kbahar3 6:6860e53dc7ae 444 #ifdef AnalogUV
kbahar3 6:6860e53dc7ae 445 if (m_ble.getGapState().connected) {
kbahar3 6:6860e53dc7ae 446 ML8511_UV_value = ML8511_UV.read_u16();
kbahar3 6:6860e53dc7ae 447 ML8511_output = (float)ML8511_UV_value * 0.0029; //(value * (2.9V/1024)) //Note to self: when playing with this, a negative value is seen... Honestly, I think this has to do with my ADC converstion...
kbahar3 6:6860e53dc7ae 448 ML8511_output = (ML8511_output-2.2)/(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.
kbahar3 6:6860e53dc7ae 449
kbahar3 6:6860e53dc7ae 450 len = snprintf((char*) buf, MAX_REPLY_LEN, "UV Sensor:");
kbahar3 6:6860e53dc7ae 451 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 6:6860e53dc7ae 452 wait_ms(20);
kbahar3 6:6860e53dc7ae 453
kbahar3 6:6860e53dc7ae 454 len = snprintf((char*) buf, MAX_REPLY_LEN, " UV= %.1f mW/cm2", ML8511_output);
kbahar3 6:6860e53dc7ae 455 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 6:6860e53dc7ae 456 wait_ms(20);
kbahar3 6:6860e53dc7ae 457 }
kbahar3 6:6860e53dc7ae 458 #endif
kbahar3 6:6860e53dc7ae 459 i++;
kbahar3 1:2c0ab5cd1a7f 460 }
kbahar3 6:6860e53dc7ae 461 else if(i == 4){
kbahar3 6:6860e53dc7ae 462 #ifdef HallSensor
kbahar3 6:6860e53dc7ae 463 if (m_ble.getGapState().connected) {
kbahar3 6:6860e53dc7ae 464 Hall_Return0 = Hall_GPIO0;
kbahar3 6:6860e53dc7ae 465 Hall_Return1 = Hall_GPIO1;
kbahar3 6:6860e53dc7ae 466
kbahar3 6:6860e53dc7ae 467 len = snprintf((char*) buf, MAX_REPLY_LEN, "Hall Sensor:");
kbahar3 6:6860e53dc7ae 468 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 6:6860e53dc7ae 469 wait_ms(20);
kbahar3 6:6860e53dc7ae 470
kbahar3 6:6860e53dc7ae 471 len = snprintf((char*) buf, MAX_REPLY_LEN, " H0 = %d, H1 = %d", Hall_Return0, Hall_Return1);
kbahar3 6:6860e53dc7ae 472 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 6:6860e53dc7ae 473 wait_ms(20);
kbahar3 6:6860e53dc7ae 474 }
kbahar3 6:6860e53dc7ae 475 #endif
kbahar3 6:6860e53dc7ae 476 i++;
kbahar3 1:2c0ab5cd1a7f 477 }
kbahar3 6:6860e53dc7ae 478 else if(i == 5){
kbahar3 6:6860e53dc7ae 479 #ifdef RPR0521 //als digital
kbahar3 6:6860e53dc7ae 480 if (m_ble.getGapState().connected) {
kbahar3 6:6860e53dc7ae 481
kbahar3 6:6860e53dc7ae 482 i2c.write(RPR0521_addr_w, &RPR0521_Addr_ReadData, 1, RepStart);
kbahar3 6:6860e53dc7ae 483 i2c.read(RPR0521_addr_r, &RPR0521_Content_ReadData[0], 6, NoRepStart);
kbahar3 6:6860e53dc7ae 484
kbahar3 6:6860e53dc7ae 485 RPR0521_PS_RAWOUT = (RPR0521_Content_ReadData[1]<<8) | (RPR0521_Content_ReadData[0]);
kbahar3 6:6860e53dc7ae 486 RPR0521_ALS_D0_RAWOUT = (RPR0521_Content_ReadData[3]<<8) | (RPR0521_Content_ReadData[2]);
kbahar3 6:6860e53dc7ae 487 RPR0521_ALS_D1_RAWOUT = (RPR0521_Content_ReadData[5]<<8) | (RPR0521_Content_ReadData[4]);
kbahar3 6:6860e53dc7ae 488 RPR0521_ALS_DataRatio = (float)RPR0521_ALS_D1_RAWOUT / (float)RPR0521_ALS_D0_RAWOUT;
kbahar3 6:6860e53dc7ae 489
kbahar3 6:6860e53dc7ae 490 if(RPR0521_ALS_DataRatio < 0.595){
kbahar3 6:6860e53dc7ae 491 RPR0521_ALS_OUT = (1.682*(float)RPR0521_ALS_D0_RAWOUT - 1.877*(float)RPR0521_ALS_D1_RAWOUT);
kbahar3 6:6860e53dc7ae 492 }
kbahar3 6:6860e53dc7ae 493 else if(RPR0521_ALS_DataRatio < 1.015){
kbahar3 6:6860e53dc7ae 494 RPR0521_ALS_OUT = (0.644*(float)RPR0521_ALS_D0_RAWOUT - 0.132*(float)RPR0521_ALS_D1_RAWOUT);
kbahar3 6:6860e53dc7ae 495 }
kbahar3 6:6860e53dc7ae 496 else if(RPR0521_ALS_DataRatio < 1.352){
kbahar3 6:6860e53dc7ae 497 RPR0521_ALS_OUT = (0.756*(float)RPR0521_ALS_D0_RAWOUT - 0.243*(float)RPR0521_ALS_D1_RAWOUT);
kbahar3 6:6860e53dc7ae 498 }
kbahar3 6:6860e53dc7ae 499 else if(RPR0521_ALS_DataRatio < 3.053){
kbahar3 6:6860e53dc7ae 500 RPR0521_ALS_OUT = (0.766*(float)RPR0521_ALS_D0_RAWOUT - 0.25*(float)RPR0521_ALS_D1_RAWOUT);
kbahar3 6:6860e53dc7ae 501 }
kbahar3 6:6860e53dc7ae 502 else{
kbahar3 6:6860e53dc7ae 503 RPR0521_ALS_OUT = 0;
kbahar3 6:6860e53dc7ae 504 }
kbahar3 6:6860e53dc7ae 505
kbahar3 6:6860e53dc7ae 506 len = snprintf((char*) buf, MAX_REPLY_LEN, "ALS/PROX:");
kbahar3 6:6860e53dc7ae 507 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 6:6860e53dc7ae 508 wait_ms(20);
kbahar3 6:6860e53dc7ae 509
kbahar3 6:6860e53dc7ae 510 len = snprintf((char*) buf, MAX_REPLY_LEN, " ALS= %0.2f lx", RPR0521_ALS_OUT);
kbahar3 6:6860e53dc7ae 511 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 6:6860e53dc7ae 512 wait_ms(20);
kbahar3 6:6860e53dc7ae 513
kbahar3 6:6860e53dc7ae 514 len = snprintf((char*) buf, MAX_REPLY_LEN, " PS= %u ADC", RPR0521_PS_RAWOUT);
kbahar3 6:6860e53dc7ae 515 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 6:6860e53dc7ae 516 wait_ms(20);
kbahar3 6:6860e53dc7ae 517 }
kbahar3 6:6860e53dc7ae 518 #endif
kbahar3 6:6860e53dc7ae 519 i++;
kbahar3 6:6860e53dc7ae 520 }
kbahar3 6:6860e53dc7ae 521 else if(i == 6){
kbahar3 6:6860e53dc7ae 522 #ifdef KMX62
kbahar3 6:6860e53dc7ae 523 if (m_ble.getGapState().connected) {
kbahar3 6:6860e53dc7ae 524 //Read Accel Portion from the IC
kbahar3 6:6860e53dc7ae 525 i2c.write(KMX62_addr_w, &KMX62_Addr_Accel_ReadData, 1, RepStart);
kbahar3 6:6860e53dc7ae 526 i2c.read(KMX62_addr_r, &KMX62_Content_Accel_ReadData[0], 6, NoRepStart);
kbahar3 1:2c0ab5cd1a7f 527
kbahar3 6:6860e53dc7ae 528 //Note: The highbyte and low byte return a 14bit value, dropping the two LSB in the Low byte.
kbahar3 6:6860e53dc7ae 529 // However, because we need the signed value, we will adjust the value when converting to "g"
kbahar3 6:6860e53dc7ae 530 MEMS_Accel_Xout = (KMX62_Content_Accel_ReadData[1]<<8) | (KMX62_Content_Accel_ReadData[0]);
kbahar3 6:6860e53dc7ae 531 MEMS_Accel_Yout = (KMX62_Content_Accel_ReadData[3]<<8) | (KMX62_Content_Accel_ReadData[2]);
kbahar3 6:6860e53dc7ae 532 MEMS_Accel_Zout = (KMX62_Content_Accel_ReadData[5]<<8) | (KMX62_Content_Accel_ReadData[4]);
kbahar3 6:6860e53dc7ae 533
kbahar3 6:6860e53dc7ae 534 //Note: Conversion to G is as follows:
kbahar3 6:6860e53dc7ae 535 // Axis_ValueInG = MEMS_Accel_axis / 1024
kbahar3 6:6860e53dc7ae 536 // However, since we did not remove the LSB previously, we need to divide by 4 again
kbahar3 6:6860e53dc7ae 537 // Thus, we will divide the output by 4096 (1024*4) to convert and cancel out the LSB
kbahar3 6:6860e53dc7ae 538 MEMS_Accel_Conv_Xout = ((float)MEMS_Accel_Xout/4096/2);
kbahar3 6:6860e53dc7ae 539 MEMS_Accel_Conv_Yout = ((float)MEMS_Accel_Yout/4096/2);
kbahar3 6:6860e53dc7ae 540 MEMS_Accel_Conv_Zout = ((float)MEMS_Accel_Zout/4096/2);
kbahar3 6:6860e53dc7ae 541
kbahar3 6:6860e53dc7ae 542 //Read MAg portion from the IC
kbahar3 6:6860e53dc7ae 543 i2c.write(KMX62_addr_w, &KMX62_Addr_Mag_ReadData, 1, RepStart);
kbahar3 6:6860e53dc7ae 544 i2c.read(KMX62_addr_r, &KMX62_Content_Mag_ReadData[0], 6, NoRepStart);
kbahar3 6:6860e53dc7ae 545
kbahar3 6:6860e53dc7ae 546 //Note: The highbyte and low byte return a 14bit value, dropping the two LSB in the Low byte.
kbahar3 6:6860e53dc7ae 547 // However, because we need the signed value, we will adjust the value when converting to "g"
kbahar3 6:6860e53dc7ae 548 MEMS_Mag_Xout = (KMX62_Content_Mag_ReadData[1]<<8) | (KMX62_Content_Mag_ReadData[0]);
kbahar3 6:6860e53dc7ae 549 MEMS_Mag_Yout = (KMX62_Content_Mag_ReadData[3]<<8) | (KMX62_Content_Mag_ReadData[2]);
kbahar3 6:6860e53dc7ae 550 MEMS_Mag_Zout = (KMX62_Content_Mag_ReadData[5]<<8) | (KMX62_Content_Mag_ReadData[4]);
kbahar3 6:6860e53dc7ae 551
kbahar3 6:6860e53dc7ae 552 //Note: Conversion to G is as follows:
kbahar3 6:6860e53dc7ae 553 // Axis_ValueInG = MEMS_Accel_axis / 1024
kbahar3 6:6860e53dc7ae 554 // However, since we did not remove the LSB previously, we need to divide by 4 again
kbahar3 6:6860e53dc7ae 555 // Thus, we will divide the output by 4095 (1024*4) to convert and cancel out the LSB
kbahar3 6:6860e53dc7ae 556 MEMS_Mag_Conv_Xout = (float)MEMS_Mag_Xout/4096*0.146;
kbahar3 6:6860e53dc7ae 557 MEMS_Mag_Conv_Yout = (float)MEMS_Mag_Yout/4096*0.146;
kbahar3 6:6860e53dc7ae 558 MEMS_Mag_Conv_Zout = (float)MEMS_Mag_Zout/4096*0.146;
kbahar3 6:6860e53dc7ae 559
kbahar3 6:6860e53dc7ae 560 // transmit data
kbahar3 6:6860e53dc7ae 561
kbahar3 6:6860e53dc7ae 562
kbahar3 6:6860e53dc7ae 563 len = snprintf((char*) buf, MAX_REPLY_LEN, "KMX61SensorData:");
kbahar3 6:6860e53dc7ae 564 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 6:6860e53dc7ae 565 wait_ms(20);
kbahar3 6:6860e53dc7ae 566
kbahar3 6:6860e53dc7ae 567 len = snprintf((char*) buf, MAX_REPLY_LEN, " AccX= %0.2f g", MEMS_Accel_Conv_Xout);
kbahar3 6:6860e53dc7ae 568 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 6:6860e53dc7ae 569 wait_ms(20);
kbahar3 6:6860e53dc7ae 570
kbahar3 6:6860e53dc7ae 571 len = snprintf((char*) buf, MAX_REPLY_LEN, " AccY= %0.2f g", MEMS_Accel_Conv_Yout);
kbahar3 6:6860e53dc7ae 572 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 6:6860e53dc7ae 573 wait_ms(20);
kbahar3 6:6860e53dc7ae 574
kbahar3 6:6860e53dc7ae 575 len = snprintf((char*) buf, MAX_REPLY_LEN, " AccZ= %0.2f g", MEMS_Accel_Conv_Zout);
kbahar3 6:6860e53dc7ae 576 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 6:6860e53dc7ae 577 wait_ms(20);
kbahar3 6:6860e53dc7ae 578
kbahar3 6:6860e53dc7ae 579 len = snprintf((char*) buf, MAX_REPLY_LEN, " MagX= %0.2f uT", MEMS_Mag_Conv_Xout);
kbahar3 6:6860e53dc7ae 580 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 6:6860e53dc7ae 581 wait_ms(20);
kbahar3 6:6860e53dc7ae 582
kbahar3 6:6860e53dc7ae 583 len = snprintf((char*) buf, MAX_REPLY_LEN, " MagY= %0.2f uT", MEMS_Mag_Conv_Yout);
kbahar3 6:6860e53dc7ae 584 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 6:6860e53dc7ae 585 wait_ms(20);
kbahar3 6:6860e53dc7ae 586
kbahar3 6:6860e53dc7ae 587 len = snprintf((char*) buf, MAX_REPLY_LEN, " MagZ= %0.2f uT", MEMS_Mag_Conv_Zout);
kbahar3 6:6860e53dc7ae 588 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 6:6860e53dc7ae 589 wait_ms(20);
kbahar3 2:c7b9d588c80f 590 }
kbahar3 6:6860e53dc7ae 591 #endif
kbahar3 6:6860e53dc7ae 592 i++;
kbahar3 2:c7b9d588c80f 593 }
kbahar3 6:6860e53dc7ae 594 else if(i==7){
kbahar3 7:71046927a0e9 595 #ifdef KX122
kbahar3 6:6860e53dc7ae 596 if (m_ble.getGapState().connected) {
kbahar3 7:71046927a0e9 597 //Read KX122 Portion from the IC
kbahar3 7:71046927a0e9 598 i2c.write(KX122_addr_w, &KX122_Addr_Accel_ReadData, 1, RepStart);
kbahar3 7:71046927a0e9 599 i2c.read(KX122_addr_r, &KX122_Content_ReadData[0], 6, NoRepStart);
kbahar3 6:6860e53dc7ae 600
kbahar3 6:6860e53dc7ae 601
kbahar3 6:6860e53dc7ae 602 //reconfigure the data (taken from arduino code)
kbahar3 7:71046927a0e9 603 KX122_Accel_X_RawOUT = (KX122_Content_ReadData[1]<<8) | (KX122_Content_ReadData[0]);
kbahar3 7:71046927a0e9 604 KX122_Accel_Y_RawOUT = (KX122_Content_ReadData[3]<<8) | (KX122_Content_ReadData[2]);
kbahar3 7:71046927a0e9 605 KX122_Accel_Z_RawOUT = (KX122_Content_ReadData[5]<<8) | (KX122_Content_ReadData[4]);
kbahar3 1:2c0ab5cd1a7f 606
kbahar3 6:6860e53dc7ae 607 //apply needed changes (taken from arduino code)
kbahar3 7:71046927a0e9 608 KX122_Accel_X = (float)KX122_Accel_X_RawOUT / 16384;
kbahar3 7:71046927a0e9 609 KX122_Accel_Y = (float)KX122_Accel_Y_RawOUT / 16384;
kbahar3 7:71046927a0e9 610 KX122_Accel_Z = (float)KX122_Accel_Z_RawOUT / 16384;
kbahar3 6:6860e53dc7ae 611
kbahar3 6:6860e53dc7ae 612
kbahar3 6:6860e53dc7ae 613
kbahar3 6:6860e53dc7ae 614 //transmit the data
kbahar3 7:71046927a0e9 615 len = snprintf((char*) buf, MAX_REPLY_LEN, "KX122 Sensor:");
kbahar3 6:6860e53dc7ae 616 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 6:6860e53dc7ae 617 wait_ms(20);
kbahar3 6:6860e53dc7ae 618
kbahar3 7:71046927a0e9 619 len = snprintf((char*) buf, MAX_REPLY_LEN, " ACCX= %0.2f g", KX122_Accel_X);
kbahar3 6:6860e53dc7ae 620 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 6:6860e53dc7ae 621 wait_ms(20);
kbahar3 6:6860e53dc7ae 622
kbahar3 7:71046927a0e9 623 len = snprintf((char*) buf, MAX_REPLY_LEN, " ACCY= %0.2f g", KX122_Accel_Y);
kbahar3 6:6860e53dc7ae 624 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 6:6860e53dc7ae 625 wait_ms(20);
kbahar3 6:6860e53dc7ae 626
kbahar3 7:71046927a0e9 627 len = snprintf((char*) buf, MAX_REPLY_LEN, " ACCZ= %0.2f g", KX122_Accel_Z);
kbahar3 6:6860e53dc7ae 628 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 6:6860e53dc7ae 629 wait_ms(20);
kbahar3 6:6860e53dc7ae 630
kbahar3 6:6860e53dc7ae 631 }
kbahar3 6:6860e53dc7ae 632 #endif
kbahar3 6:6860e53dc7ae 633 i++;
kbahar3 6:6860e53dc7ae 634 }
kbahar3 6:6860e53dc7ae 635 else if (i == 8){
kbahar3 9:878e7fad5347 636 #ifdef BM1383A
kbahar3 6:6860e53dc7ae 637 if (m_ble.getGapState().connected) {
kbahar3 6:6860e53dc7ae 638 //Read color Portion from the IC
kbahar3 6:6860e53dc7ae 639 i2c.write(Press_addr_w, &Press_Addr_ReadData, 1, RepStart);
kbahar3 6:6860e53dc7ae 640 i2c.read(Press_addr_r, &Press_Content_ReadData[0], 6, NoRepStart);
kbahar3 6:6860e53dc7ae 641
kbahar3 8:2a19622864c2 642 BM1383_Temp_Out = (Press_Content_ReadData[3]<<8) | (Press_Content_ReadData[4]);
kbahar3 6:6860e53dc7ae 643 BM1383_Temp_Conv_Out = (float)BM1383_Temp_Out/32;
kbahar3 6:6860e53dc7ae 644
kbahar3 8:2a19622864c2 645 BM1383_Var = (Press_Content_ReadData[0]<<3) | (Press_Content_ReadData[1] >> 5);
kbahar3 8:2a19622864c2 646 BM1383_Deci = ((Press_Content_ReadData[1] & 0x1f) << 6 | ((Press_Content_ReadData[2] >> 2)));
kbahar3 6:6860e53dc7ae 647 BM1383_Deci = (float)BM1383_Deci* 0.00048828125; //0.00048828125 = 2^-11
kbahar3 9:878e7fad5347 648 BM1383_Pres_Conv_Out = (BM1383_Var + BM1383_Deci);
kbahar3 6:6860e53dc7ae 649
kbahar3 9:878e7fad5347 650 len = snprintf((char*) buf, MAX_REPLY_LEN, "BM1383A Sensor:");
kbahar3 6:6860e53dc7ae 651 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 6:6860e53dc7ae 652 wait_ms(20);
kbahar3 6:6860e53dc7ae 653
kbahar3 6:6860e53dc7ae 654 len = snprintf((char*) buf, MAX_REPLY_LEN, " Temp= %0.2f C", BM1383_Temp_Conv_Out);
kbahar3 6:6860e53dc7ae 655 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 6:6860e53dc7ae 656 wait_ms(20);
kbahar3 6:6860e53dc7ae 657
kbahar3 6:6860e53dc7ae 658 len = snprintf((char*) buf, MAX_REPLY_LEN, " Pres= %0.2f hPa", BM1383_Pres_Conv_Out);
kbahar3 6:6860e53dc7ae 659 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 6:6860e53dc7ae 660 wait_ms(20);
kbahar3 7:71046927a0e9 661 }
kbahar3 9:878e7fad5347 662 #endif
kbahar3 9:878e7fad5347 663
kbahar3 9:878e7fad5347 664 #ifdef BM1383
kbahar3 9:878e7fad5347 665 if (m_ble.getGapState().connected) {
kbahar3 9:878e7fad5347 666 //Read color Portion from the IC
kbahar3 9:878e7fad5347 667 i2c.write(Press_addr_w, &Press_Addr_ReadData, 1, RepStart);
kbahar3 9:878e7fad5347 668 i2c.read(Press_addr_r, &Press_Content_ReadData[0], 6, NoRepStart);
kbahar3 9:878e7fad5347 669
kbahar3 9:878e7fad5347 670 BM1383_Temp_Out = (Press_Content_ReadData[0]<<8) | (Press_Content_ReadData[1]);
kbahar3 9:878e7fad5347 671 BM1383_Temp_Conv_Out = (float)BM1383_Temp_Out/32;
kbahar3 9:878e7fad5347 672
kbahar3 9:878e7fad5347 673 BM1383_Var = (Press_Content_ReadData[2]<<3) | (Press_Content_ReadData[3] >> 5);
kbahar3 9:878e7fad5347 674 BM1383_Deci = ((Press_Content_ReadData[3] & 0x1f) << 6 | ((Press_Content_ReadData[4] >> 2)));
kbahar3 9:878e7fad5347 675 BM1383_Deci = (float)BM1383_Deci* 0.00048828125; //0.00048828125 = 2^-11
kbahar3 9:878e7fad5347 676 BM1383_Pres_Conv_Out = (BM1383_Var + BM1383_Deci);
kbahar3 9:878e7fad5347 677
kbahar3 9:878e7fad5347 678 len = snprintf((char*) buf, MAX_REPLY_LEN, "BM1383 Sensor:");
kbahar3 9:878e7fad5347 679 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 9:878e7fad5347 680 wait_ms(20);
kbahar3 9:878e7fad5347 681
kbahar3 9:878e7fad5347 682 len = snprintf((char*) buf, MAX_REPLY_LEN, " Temp= %0.2f C", BM1383_Temp_Conv_Out);
kbahar3 9:878e7fad5347 683 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 9:878e7fad5347 684 wait_ms(20);
kbahar3 9:878e7fad5347 685
kbahar3 9:878e7fad5347 686 len = snprintf((char*) buf, MAX_REPLY_LEN, " Pres= %0.2f hPa", BM1383_Pres_Conv_Out);
kbahar3 9:878e7fad5347 687 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 9:878e7fad5347 688 wait_ms(20);
kbahar3 9:878e7fad5347 689 }
kbahar3 9:878e7fad5347 690 #endif
kbahar3 9:878e7fad5347 691
kbahar3 7:71046927a0e9 692 i++;
kbahar3 7:71046927a0e9 693 }
kbahar3 8:2a19622864c2 694
kbahar3 8:2a19622864c2 695 else if (i == 9){
kbahar3 8:2a19622864c2 696 #ifdef Magnetometer
kbahar3 8:2a19622864c2 697 if (m_ble.getGapState().connected) {
kbahar3 8:2a19622864c2 698 //Read color Portion from the IC
kbahar3 8:2a19622864c2 699 i2c.write(BM1422_addr_w, &BM1422_Addr_ReadData, 1, RepStart);
kbahar3 8:2a19622864c2 700 i2c.read(BM1422_addr_r, &BM1422_Content_ReadData[0], 6, NoRepStart);
kbahar3 8:2a19622864c2 701
kbahar3 8:2a19622864c2 702 BM1422_MAG_X_RawOUT = (BM1422_Content_ReadData[1]<<8) | (BM1422_Content_ReadData[0]);
kbahar3 8:2a19622864c2 703 BM1422_MAG_Y_RawOUT = (BM1422_Content_ReadData[3]<<8) | (BM1422_Content_ReadData[2]);
kbahar3 8:2a19622864c2 704 BM1422_MAG_Z_RawOUT = (BM1422_Content_ReadData[5]<<8) | (BM1422_Content_ReadData[4]);
kbahar3 8:2a19622864c2 705
kbahar3 8:2a19622864c2 706
kbahar3 8:2a19622864c2 707 len = snprintf((char*) buf, MAX_REPLY_LEN, "Mag Sensor:");
kbahar3 8:2a19622864c2 708 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 8:2a19622864c2 709 wait_ms(20);
kbahar3 8:2a19622864c2 710
kbahar3 8:2a19622864c2 711 len = snprintf((char*) buf, MAX_REPLY_LEN, " X_raw= %i", BM1422_MAG_X_RawOUT);
kbahar3 8:2a19622864c2 712 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 8:2a19622864c2 713 wait_ms(20);
kbahar3 8:2a19622864c2 714
kbahar3 8:2a19622864c2 715 len = snprintf((char*) buf, MAX_REPLY_LEN, " Y_raw= %i", BM1422_MAG_Y_RawOUT);
kbahar3 8:2a19622864c2 716 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 8:2a19622864c2 717 wait_ms(20);
kbahar3 8:2a19622864c2 718
kbahar3 8:2a19622864c2 719 len = snprintf((char*) buf, MAX_REPLY_LEN, " Z_raw= %i", BM1422_MAG_Z_RawOUT);
kbahar3 8:2a19622864c2 720 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 8:2a19622864c2 721 wait_ms(20);
kbahar3 8:2a19622864c2 722 }
kbahar3 8:2a19622864c2 723 #endif
kbahar3 8:2a19622864c2 724 i++;
kbahar3 8:2a19622864c2 725 }
kbahar3 8:2a19622864c2 726
kbahar3 8:2a19622864c2 727 else if(i == 10){
kbahar3 7:71046927a0e9 728 #ifdef KXG03
kbahar3 7:71046927a0e9 729 if (m_ble.getGapState().connected) {
kbahar3 7:71046927a0e9 730 i2c.write(KXG03_addr_w, &KXG03_Addr_ReadData, 1, RepStart);
kbahar3 7:71046927a0e9 731 i2c.read(KXG03_addr_r, &KXG03_Content_ReadData[0], 6, NoRepStart);
kbahar3 7:71046927a0e9 732
kbahar3 7:71046927a0e9 733 if (t == 1){
kbahar3 7:71046927a0e9 734 int j = 11;
kbahar3 7:71046927a0e9 735 while(--j)
kbahar3 7:71046927a0e9 736 {
kbahar3 7:71046927a0e9 737 //Read KXG03 Gyro Portion from the IC
kbahar3 7:71046927a0e9 738 i2c.write(KXG03_addr_w, &KXG03_Addr_ReadData, 1, RepStart);
kbahar3 7:71046927a0e9 739 i2c.read(KXG03_addr_r, &KXG03_Content_ReadData[0], 6, NoRepStart);
kbahar3 7:71046927a0e9 740
kbahar3 7:71046927a0e9 741 //Format Data
kbahar3 7:71046927a0e9 742 KXG03_Gyro_X_RawOUT = (KXG03_Content_ReadData[1]<<8) | (KXG03_Content_ReadData[0]);
kbahar3 7:71046927a0e9 743 KXG03_Gyro_Y_RawOUT = (KXG03_Content_ReadData[3]<<8) | (KXG03_Content_ReadData[2]);
kbahar3 7:71046927a0e9 744 KXG03_Gyro_Z_RawOUT = (KXG03_Content_ReadData[5]<<8) | (KXG03_Content_ReadData[4]);
kbahar3 7:71046927a0e9 745 aveX = KXG03_Gyro_X_RawOUT;
kbahar3 7:71046927a0e9 746 aveY = KXG03_Gyro_Y_RawOUT;
kbahar3 7:71046927a0e9 747 aveZ = KXG03_Gyro_Z_RawOUT;
kbahar3 7:71046927a0e9 748 aveX2 = aveX2 + aveX;
kbahar3 7:71046927a0e9 749 aveY2 = aveY2 + aveY;
kbahar3 7:71046927a0e9 750 aveZ2 = aveZ2 + aveZ;
kbahar3 7:71046927a0e9 751 }
kbahar3 7:71046927a0e9 752 aveX3 = aveX2 / 10;
kbahar3 7:71046927a0e9 753 aveY3 = aveY2 / 10;
kbahar3 7:71046927a0e9 754 aveZ3 = aveZ2 / 10;
kbahar3 7:71046927a0e9 755
kbahar3 7:71046927a0e9 756 len = snprintf((char*) buf, MAX_REPLY_LEN, "Gyro Sensor:");
kbahar3 7:71046927a0e9 757 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 7:71046927a0e9 758 wait_ms(20);
kbahar3 7:71046927a0e9 759
kbahar3 7:71046927a0e9 760 len = snprintf((char*) buf, MAX_REPLY_LEN, "Calibration OK");
kbahar3 7:71046927a0e9 761 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 7:71046927a0e9 762 wait_ms(20);
kbahar3 7:71046927a0e9 763
kbahar3 7:71046927a0e9 764 //len = snprintf((char*) buf, MAX_REPLY_LEN, " aveX2= %d", aveX2);
kbahar3 7:71046927a0e9 765 //m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 7:71046927a0e9 766 //wait_ms(20);
kbahar3 7:71046927a0e9 767
kbahar3 7:71046927a0e9 768 //len = snprintf((char*) buf, MAX_REPLY_LEN, " aveX3= %d", aveX3);
kbahar3 7:71046927a0e9 769 //m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 7:71046927a0e9 770 wait_ms(20);
kbahar3 7:71046927a0e9 771
kbahar3 7:71046927a0e9 772
kbahar3 7:71046927a0e9 773 //Read KXG03 Gyro Portion from the IC
kbahar3 7:71046927a0e9 774 i2c.write(KXG03_addr_w, &KXG03_Addr_ReadData, 1, RepStart);
kbahar3 7:71046927a0e9 775 i2c.read(KXG03_addr_r, &KXG03_Content_ReadData[0], 6, NoRepStart);
kbahar3 7:71046927a0e9 776
kbahar3 7:71046927a0e9 777 //reconfigure the data (taken from arduino code)
kbahar3 7:71046927a0e9 778 KXG03_Gyro_X_RawOUT = (KXG03_Content_ReadData[1]<<8) | (KXG03_Content_ReadData[0]);
kbahar3 7:71046927a0e9 779 KXG03_Gyro_Y_RawOUT = (KXG03_Content_ReadData[3]<<8) | (KXG03_Content_ReadData[2]);
kbahar3 7:71046927a0e9 780 KXG03_Gyro_Z_RawOUT = (KXG03_Content_ReadData[5]<<8) | (KXG03_Content_ReadData[4]);
kbahar3 7:71046927a0e9 781
kbahar3 7:71046927a0e9 782 KXG03_Gyro_X_RawOUT2 = KXG03_Gyro_X_RawOUT - aveX3;
kbahar3 7:71046927a0e9 783 KXG03_Gyro_Y_RawOUT2 = KXG03_Gyro_Y_RawOUT - aveY3;
kbahar3 7:71046927a0e9 784 KXG03_Gyro_Z_RawOUT2 = KXG03_Gyro_Z_RawOUT - aveZ3;
kbahar3 7:71046927a0e9 785
kbahar3 7:71046927a0e9 786 /*
kbahar3 7:71046927a0e9 787 len = snprintf((char*) buf, MAX_REPLY_LEN, " Y= %d", KXG03_Gyro_Y_RawOUT);
kbahar3 7:71046927a0e9 788 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 7:71046927a0e9 789 wait_ms(20);
kbahar3 7:71046927a0e9 790
kbahar3 7:71046927a0e9 791 len = snprintf((char*) buf, MAX_REPLY_LEN, " aveY3= %d", aveY3);
kbahar3 7:71046927a0e9 792 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 7:71046927a0e9 793 wait_ms(20);
kbahar3 7:71046927a0e9 794
kbahar3 7:71046927a0e9 795 len = snprintf((char*) buf, MAX_REPLY_LEN, " Y= %d", KXG03_Gyro_Y_RawOUT2);
kbahar3 7:71046927a0e9 796 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 7:71046927a0e9 797 wait_ms(20);
kbahar3 7:71046927a0e9 798 */
kbahar3 7:71046927a0e9 799
kbahar3 7:71046927a0e9 800 //Scale Data
kbahar3 7:71046927a0e9 801 KXG03_Gyro_X = (float)KXG03_Gyro_X_RawOUT2 * 0.007813 + 0.000004;
kbahar3 7:71046927a0e9 802 KXG03_Gyro_Y = (float)KXG03_Gyro_Y_RawOUT2 * 0.007813 + 0.000004;
kbahar3 7:71046927a0e9 803 KXG03_Gyro_Z = (float)KXG03_Gyro_Z_RawOUT2 * 0.007813 + 0.000004;
kbahar3 7:71046927a0e9 804
kbahar3 7:71046927a0e9 805 len = snprintf((char*) buf, MAX_REPLY_LEN, " X= %0.2fdeg/s", KXG03_Gyro_X);
kbahar3 7:71046927a0e9 806 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 7:71046927a0e9 807 wait_ms(20);
kbahar3 7:71046927a0e9 808
kbahar3 7:71046927a0e9 809 len = snprintf((char*) buf, MAX_REPLY_LEN, " Y= %0.2fdeg/s", KXG03_Gyro_Y);
kbahar3 7:71046927a0e9 810 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 7:71046927a0e9 811 wait_ms(20);
kbahar3 7:71046927a0e9 812
kbahar3 7:71046927a0e9 813 len = snprintf((char*) buf, MAX_REPLY_LEN, " Z= %0.2fdeg/s", KXG03_Gyro_Z);
kbahar3 7:71046927a0e9 814 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 7:71046927a0e9 815 wait_ms(20);
kbahar3 7:71046927a0e9 816
kbahar3 7:71046927a0e9 817 len = snprintf((char*) buf, MAX_REPLY_LEN, " ");
kbahar3 7:71046927a0e9 818 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 7:71046927a0e9 819 wait_ms(20);
kbahar3 7:71046927a0e9 820
kbahar3 7:71046927a0e9 821 t = 0;
kbahar3 7:71046927a0e9 822 }
kbahar3 7:71046927a0e9 823
kbahar3 7:71046927a0e9 824 else {
kbahar3 7:71046927a0e9 825 //Read KXG03 Gyro Portion from the IC
kbahar3 7:71046927a0e9 826 i2c.write(KXG03_addr_w, &KXG03_Addr_ReadData, 1, RepStart);
kbahar3 7:71046927a0e9 827 i2c.read(KXG03_addr_r, &KXG03_Content_ReadData[0], 6, NoRepStart);
kbahar3 7:71046927a0e9 828
kbahar3 7:71046927a0e9 829 //reconfigure the data (taken from arduino code)
kbahar3 7:71046927a0e9 830 KXG03_Gyro_X_RawOUT = (KXG03_Content_ReadData[1]<<8) | (KXG03_Content_ReadData[0]);
kbahar3 7:71046927a0e9 831 KXG03_Gyro_Y_RawOUT = (KXG03_Content_ReadData[3]<<8) | (KXG03_Content_ReadData[2]);
kbahar3 7:71046927a0e9 832 KXG03_Gyro_Z_RawOUT = (KXG03_Content_ReadData[5]<<8) | (KXG03_Content_ReadData[4]);
kbahar3 7:71046927a0e9 833
kbahar3 7:71046927a0e9 834 KXG03_Gyro_X_RawOUT2 = KXG03_Gyro_X_RawOUT - aveX3;
kbahar3 7:71046927a0e9 835 KXG03_Gyro_Y_RawOUT2 = KXG03_Gyro_Y_RawOUT - aveY3;
kbahar3 7:71046927a0e9 836 KXG03_Gyro_Z_RawOUT2 = KXG03_Gyro_Z_RawOUT - aveZ3;
kbahar3 7:71046927a0e9 837
kbahar3 7:71046927a0e9 838 //Scale Data
kbahar3 7:71046927a0e9 839 KXG03_Gyro_X = (float)KXG03_Gyro_X_RawOUT2 * 0.007813 + 0.000004;
kbahar3 7:71046927a0e9 840 KXG03_Gyro_Y = (float)KXG03_Gyro_Y_RawOUT2 * 0.007813 + 0.000004;
kbahar3 7:71046927a0e9 841 KXG03_Gyro_Z = (float)KXG03_Gyro_Z_RawOUT2 * 0.007813 + 0.000004;
kbahar3 7:71046927a0e9 842
kbahar3 7:71046927a0e9 843 len = snprintf((char*) buf, MAX_REPLY_LEN, "Gyro Sensor:");
kbahar3 7:71046927a0e9 844 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 7:71046927a0e9 845 wait_ms(20);
kbahar3 7:71046927a0e9 846
kbahar3 7:71046927a0e9 847 len = snprintf((char*) buf, MAX_REPLY_LEN, " X= %0.2fdeg/s", KXG03_Gyro_X);
kbahar3 7:71046927a0e9 848 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 7:71046927a0e9 849 wait_ms(20);
kbahar3 7:71046927a0e9 850
kbahar3 7:71046927a0e9 851 len = snprintf((char*) buf, MAX_REPLY_LEN, " Y= %0.2fdeg/s", KXG03_Gyro_Y);
kbahar3 7:71046927a0e9 852 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 7:71046927a0e9 853 wait_ms(20);
kbahar3 7:71046927a0e9 854
kbahar3 7:71046927a0e9 855 len = snprintf((char*) buf, MAX_REPLY_LEN, " Z= %0.2fdeg/s", KXG03_Gyro_Z);
kbahar3 7:71046927a0e9 856 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 7:71046927a0e9 857 wait_ms(20);
kbahar3 6:6860e53dc7ae 858
kbahar3 6:6860e53dc7ae 859 len = snprintf((char*) buf, MAX_REPLY_LEN, " ");
kbahar3 6:6860e53dc7ae 860 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 6:6860e53dc7ae 861 wait_ms(20);
kbahar3 7:71046927a0e9 862 }
kbahar3 7:71046927a0e9 863 }
kbahar3 7:71046927a0e9 864 #endif
kbahar3 6:6860e53dc7ae 865 i=1;
kbahar3 6:6860e53dc7ae 866 }
kbahar3 5:d39ffc5638a3 867 }
kbahar3 5:d39ffc5638a3 868
Daniel Veilleux 0:442c7a6f1978 869 void error(ble_error_t err, uint32_t line)
Daniel Veilleux 0:442c7a6f1978 870 {
Daniel Veilleux 0:442c7a6f1978 871 m_error_led = 1;
Daniel Veilleux 0:442c7a6f1978 872 DEBUG("Error %d on line number %d\n\r", err, line);
Daniel Veilleux 0:442c7a6f1978 873 }
Daniel Veilleux 0:442c7a6f1978 874
kbahar3 1:2c0ab5cd1a7f 875 void PBTrigger()
kbahar3 1:2c0ab5cd1a7f 876 {
kbahar3 1:2c0ab5cd1a7f 877 uint8_t buf[MAX_REPLY_LEN];
kbahar3 1:2c0ab5cd1a7f 878 uint32_t len = 0;
kbahar3 1:2c0ab5cd1a7f 879
kbahar3 1:2c0ab5cd1a7f 880 m_cmd_led = !m_cmd_led;
kbahar3 1:2c0ab5cd1a7f 881
kbahar3 1:2c0ab5cd1a7f 882 if (m_ble.getGapState().connected) {
kbahar3 6:6860e53dc7ae 883 len = snprintf((char*) buf, MAX_REPLY_LEN, "Button Pressed!");
kbahar3 1:2c0ab5cd1a7f 884 m_ble.updateCharacteristicValue(m_uart_service_ptr->getRXCharacteristicHandle(), buf, len);
kbahar3 1:2c0ab5cd1a7f 885 }
kbahar3 1:2c0ab5cd1a7f 886 }
Daniel Veilleux 0:442c7a6f1978 887
Daniel Veilleux 0:442c7a6f1978 888 int main(void)
Daniel Veilleux 0:442c7a6f1978 889 {
Daniel Veilleux 0:442c7a6f1978 890 ble_error_t err;
Daniel Veilleux 0:442c7a6f1978 891 Ticker ticker;
Daniel Veilleux 0:442c7a6f1978 892
Daniel Veilleux 0:442c7a6f1978 893 m_serial_port.baud(UART_BAUD_RATE);
Daniel Veilleux 0:442c7a6f1978 894
kbahar3 2:c7b9d588c80f 895 DEBUG("Initialising...\n\r");
Daniel Veilleux 0:442c7a6f1978 896
Daniel Veilleux 0:442c7a6f1978 897 m_cmd_led = 0;
Daniel Veilleux 0:442c7a6f1978 898 m_error_led = 0;
Daniel Veilleux 0:442c7a6f1978 899
Daniel Veilleux 0:442c7a6f1978 900 ticker.attach(periodicCallback, SENSOR_READ_INTERVAL_S);
Daniel Veilleux 0:442c7a6f1978 901
kbahar3 1:2c0ab5cd1a7f 902 sw4Press.fall(&PBTrigger);
kbahar3 1:2c0ab5cd1a7f 903
kbahar3 6:6860e53dc7ae 904 #ifdef RPR0521
kbahar3 6:6860e53dc7ae 905 // 1. Mode Control (0x41), write (0xC6): ALS EN, PS EN, 100ms measurement for ALS and PS, PS_PULSE=1
kbahar3 6:6860e53dc7ae 906 // 2. ALS_PS_CONTROL (0x42), write (0x03): LED Current = 200mA
kbahar3 9:878e7fad5347 907 // 3. PERSIST (0x43), write (0x20): PS Gain x4
kbahar3 2:c7b9d588c80f 908 i2c.write(RPR0521_addr_w, &RPR0521_ModeControl[0], 2, false);
kbahar3 2:c7b9d588c80f 909 i2c.write(RPR0521_addr_w, &RPR0521_ALSPSControl[0], 2, false);
kbahar3 2:c7b9d588c80f 910 i2c.write(RPR0521_addr_w, &RPR0521_Persist[0], 2, false);
kbahar3 6:6860e53dc7ae 911 #endif
kbahar3 1:2c0ab5cd1a7f 912
kbahar3 6:6860e53dc7ae 913 #ifdef KMX62
kbahar3 6:6860e53dc7ae 914 // 1. CNTL2 (0x3A), write (0x5F): 4g, Max RES, EN temp mag and accel
kbahar3 3:c3ee9d663fb8 915 i2c.write(KMX62_addr_w, &KMX62_CNTL2[0], 2, false);
kbahar3 6:6860e53dc7ae 916 #endif
kbahar3 3:c3ee9d663fb8 917
kbahar3 7:71046927a0e9 918 #ifdef Color
kbahar3 6:6860e53dc7ae 919 // 1. CNTL2 (0x3A), write (0x5F): 4g, Max RES, EN temp mag and accel
kbahar3 5:d39ffc5638a3 920 i2c.write(BH1745_addr_w, &BH1745_persistence[0], 2, false);
kbahar3 5:d39ffc5638a3 921 i2c.write(BH1745_addr_w, &BH1745_mode1[0], 2, false);
kbahar3 5:d39ffc5638a3 922 i2c.write(BH1745_addr_w, &BH1745_mode2[0], 2, false);
kbahar3 5:d39ffc5638a3 923 i2c.write(BH1745_addr_w, &BH1745_mode3[0], 2, false);
kbahar3 6:6860e53dc7ae 924 #endif
kbahar3 5:d39ffc5638a3 925
kbahar3 7:71046927a0e9 926 #ifdef KX122
kbahar3 7:71046927a0e9 927 i2c.write(KX122_addr_w, &KX122_Accel_CNTL1[0], 2, false);
kbahar3 7:71046927a0e9 928 i2c.write(KX122_addr_w, &KX122_Accel_ODCNTL[0], 2, false);
kbahar3 7:71046927a0e9 929 i2c.write(KX122_addr_w, &KX122_Accel_CNTL3[0], 2, false);
kbahar3 7:71046927a0e9 930 i2c.write(KX122_addr_w, &KX122_Accel_TILT_TIMER[0], 2, false);
kbahar3 7:71046927a0e9 931 i2c.write(KX122_addr_w, &KX122_Accel_CNTL2[0], 2, false);
kbahar3 6:6860e53dc7ae 932 #endif
kbahar3 6:6860e53dc7ae 933
kbahar3 9:878e7fad5347 934 #ifdef BM1383A
kbahar3 9:878e7fad5347 935 i2c.write(Press_addr_w, &PWR_DOWN[0], 2, false);
kbahar3 9:878e7fad5347 936 i2c.write(Press_addr_w, &SLEEP[0], 2, false);
kbahar3 9:878e7fad5347 937 i2c.write(Press_addr_w, &Mode_Control[0], 2, false);
kbahar3 9:878e7fad5347 938 #endif
kbahar3 9:878e7fad5347 939
kbahar3 9:878e7fad5347 940 #ifdef BM1383
kbahar3 6:6860e53dc7ae 941 i2c.write(Press_addr_w, &PWR_DOWN[0], 2, false);
kbahar3 6:6860e53dc7ae 942 i2c.write(Press_addr_w, &SLEEP[0], 2, false);
kbahar3 6:6860e53dc7ae 943 i2c.write(Press_addr_w, &Mode_Control[0], 2, false);
kbahar3 6:6860e53dc7ae 944 #endif
kbahar3 7:71046927a0e9 945
kbahar3 8:2a19622864c2 946 #ifdef Magnetometer
kbahar3 8:2a19622864c2 947 i2c.write(BM1422_addr_w, &BM1422_CNTL1_Init[0], 2, false);
kbahar3 8:2a19622864c2 948 i2c.write(BM1422_addr_w, &BM1422_CNTL4_HB_Init[0], 2, false);
kbahar3 8:2a19622864c2 949 i2c.write(BM1422_addr_w, &BM1422_CNTL4_LB_Init[0], 2, false);
kbahar3 8:2a19622864c2 950 i2c.write(BM1422_addr_w, &BM1422_CNTL3_Init[0], 2, false);
kbahar3 8:2a19622864c2 951 #endif
kbahar3 8:2a19622864c2 952
kbahar3 7:71046927a0e9 953 #ifdef KXG03
kbahar3 7:71046927a0e9 954 i2c.write(KXG03_addr_w, &KXG03_STBY_REG[0], 2, false);
kbahar3 7:71046927a0e9 955 #endif
kbahar3 5:d39ffc5638a3 956
kbahar3 6:6860e53dc7ae 957 //Start BTLE Initialization Section
Daniel Veilleux 0:442c7a6f1978 958 m_ble.init();
Daniel Veilleux 0:442c7a6f1978 959 m_ble.onDisconnection(disconnectionCallback);
Daniel Veilleux 0:442c7a6f1978 960 m_ble.onDataWritten(dataWrittenCallback);
Daniel Veilleux 0:442c7a6f1978 961 m_ble.onDataSent(dataSentCallback);
Daniel Veilleux 0:442c7a6f1978 962
Daniel Veilleux 0:442c7a6f1978 963 // Set the TX power in dBm units.
Daniel Veilleux 0:442c7a6f1978 964 // Possible values (in decreasing order): 4, 0, -4, -8, -12, -16, -20.
Daniel Veilleux 0:442c7a6f1978 965 err = m_ble.setTxPower(4);
Daniel Veilleux 0:442c7a6f1978 966 if (BLE_ERROR_NONE != err) {
Daniel Veilleux 0:442c7a6f1978 967 error(err, __LINE__);
Daniel Veilleux 0:442c7a6f1978 968 }
Daniel Veilleux 0:442c7a6f1978 969
Daniel Veilleux 0:442c7a6f1978 970 // Setup advertising (GAP stuff).
Daniel Veilleux 0:442c7a6f1978 971 err = m_ble.setDeviceName(DEVICE_NAME);
Daniel Veilleux 0:442c7a6f1978 972 if (BLE_ERROR_NONE != err) {
Daniel Veilleux 0:442c7a6f1978 973 error(err, __LINE__);
Daniel Veilleux 0:442c7a6f1978 974 }
Daniel Veilleux 0:442c7a6f1978 975
Daniel Veilleux 0:442c7a6f1978 976 err = m_ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
Daniel Veilleux 0:442c7a6f1978 977 if (BLE_ERROR_NONE != err) {
Daniel Veilleux 0:442c7a6f1978 978 error(err, __LINE__);
Daniel Veilleux 0:442c7a6f1978 979 }
Daniel Veilleux 0:442c7a6f1978 980
Daniel Veilleux 0:442c7a6f1978 981 m_ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
Daniel Veilleux 0:442c7a6f1978 982
Daniel Veilleux 0:442c7a6f1978 983 err = m_ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
Daniel Veilleux 0:442c7a6f1978 984 (const uint8_t *)SHORT_NAME,
Daniel Veilleux 0:442c7a6f1978 985 (sizeof(SHORT_NAME) - 1));
Daniel Veilleux 0:442c7a6f1978 986 if (BLE_ERROR_NONE != err) {
Daniel Veilleux 0:442c7a6f1978 987 error(err, __LINE__);
Daniel Veilleux 0:442c7a6f1978 988 }
Daniel Veilleux 0:442c7a6f1978 989
Daniel Veilleux 0:442c7a6f1978 990 err = m_ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
Daniel Veilleux 0:442c7a6f1978 991 (const uint8_t *)UARTServiceUUID_reversed,
Daniel Veilleux 0:442c7a6f1978 992 sizeof(UARTServiceUUID_reversed));
Daniel Veilleux 0:442c7a6f1978 993 if (BLE_ERROR_NONE != err) {
Daniel Veilleux 0:442c7a6f1978 994 error(err, __LINE__);
Daniel Veilleux 0:442c7a6f1978 995 }
Daniel Veilleux 0:442c7a6f1978 996
Daniel Veilleux 0:442c7a6f1978 997 m_ble.setAdvertisingInterval(Gap::MSEC_TO_ADVERTISEMENT_DURATION_UNITS(ADV_INTERVAL_MS));
Daniel Veilleux 0:442c7a6f1978 998 m_ble.startAdvertising();
Daniel Veilleux 0:442c7a6f1978 999
Daniel Veilleux 0:442c7a6f1978 1000 // Create a UARTService object (GATT stuff).
Daniel Veilleux 0:442c7a6f1978 1001 UARTService uartService(m_ble);
Daniel Veilleux 0:442c7a6f1978 1002 m_uart_service_ptr = &uartService;
Daniel Veilleux 0:442c7a6f1978 1003
Daniel Veilleux 0:442c7a6f1978 1004 while (true) {
Daniel Veilleux 0:442c7a6f1978 1005 m_ble.waitForEvent();
Daniel Veilleux 0:442c7a6f1978 1006 }
kbahar3 5:d39ffc5638a3 1007 }