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
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:
main.cpp@7:71046927a0e9, 2015-12-18 (annotated)
- 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?
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 | 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 | } |