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