Code used for Sensor Expo 2016 - Balloon Game. More details can be found here: https://github.com/ROHMUSDC/ROHM-SensorExpo2016-Pressure-Sensor-Demo/

Dependencies:   BLE_API mbed nRF51822

Fork of Nordic_UART_TEMPLATE_ROHM_SHLD1Update by ROHMUSDC

ROHM Balloon Game Demo Code featured at Sensors Expo 2016

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

This Code allows the user to configure two known pressure distances and save pressure readings onto the application. Then it will automatically extrapolate these values and allow the user to see the height of the board. When connected to a balloon, greater heights can be achieved and the board will return the current height of the board.

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

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

Operation

See Github Repositoy for additional information on how to operate this demo application.

Supported ROHM Sensor Devices

  • BM1383GLV Pressure Sensor

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:
Fri Dec 18 00:19:01 2015 +0000
Revision:
7:71046927a0e9
Parent:
6:6860e53dc7ae
Child:
8:2a19622864c2
Added new code for Gyro (KXG03)

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