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