First Revision of sample code for interfacing ROHM Multi-Sensor Shield board with Nordic Semiconductor's nRF51-DK Development Kit Host BTLE Board

Dependencies:   BLE_API mbed nRF51822 Nordic_UART_TEMPLATE_ROHM

Dependents:   Nordic_UART_TEMPLATE_ROHM

Fork of UART_TEMPLATE by daniel veilleux

Code Example for ROHM Multi-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 SENSORSHLD1-EVK-101, please see the following link: https://developer.mbed.org/teams/ROHMUSDC/code/Nordic_UART_TEMPLATE_ROHM_SHLD1Update/

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
  • KXG03 Gyro/Accel Sensor

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 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
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 }