This library demonstrates how to use the sensors on the QW Shield.

Dependents:   QW-TEMP_GPS-NMEA QW-Motiondetection QW-Closet-detection

Committer:
quicksand
Date:
Wed May 18 14:44:57 2016 +0000
Revision:
3:1b27ad5eb94a
Parent:
0:4b56d28cc7e9
Renamed main.cpp to main.txt (example usage code) to avoid conflicts and confusion.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
quicksand 0:4b56d28cc7e9 1 /*
quicksand 0:4b56d28cc7e9 2 Copyright (c) 2012 Vishay GmbH, www.vishay.com
quicksand 0:4b56d28cc7e9 3 author: DS, version 1.21
quicksand 0:4b56d28cc7e9 4
quicksand 0:4b56d28cc7e9 5 Permission is hereby granted, free of charge, to any person obtaining a copy
quicksand 0:4b56d28cc7e9 6 of this software and associated documentation files (the "Software"), to deal
quicksand 0:4b56d28cc7e9 7 in the Software without restriction, including without limitation the rights
quicksand 0:4b56d28cc7e9 8 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
quicksand 0:4b56d28cc7e9 9 copies of the Software, and to permit persons to whom the Software is
quicksand 0:4b56d28cc7e9 10 furnished to do so, subject to the following conditions:
quicksand 0:4b56d28cc7e9 11
quicksand 0:4b56d28cc7e9 12 The above copyright notice and this permission notice shall be included in
quicksand 0:4b56d28cc7e9 13 all copies or substantial portions of the Software.
quicksand 0:4b56d28cc7e9 14
quicksand 0:4b56d28cc7e9 15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
quicksand 0:4b56d28cc7e9 16 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
quicksand 0:4b56d28cc7e9 17 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
quicksand 0:4b56d28cc7e9 18 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
quicksand 0:4b56d28cc7e9 19 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
quicksand 0:4b56d28cc7e9 20 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
quicksand 0:4b56d28cc7e9 21 THE SOFTWARE.
quicksand 0:4b56d28cc7e9 22 */
quicksand 0:4b56d28cc7e9 23
quicksand 0:4b56d28cc7e9 24 #include "VCNL4010.h"
quicksand 0:4b56d28cc7e9 25
quicksand 0:4b56d28cc7e9 26 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
quicksand 0:4b56d28cc7e9 27
quicksand 0:4b56d28cc7e9 28 VCNL40x0::VCNL40x0(PinName sda, PinName scl, unsigned char addr) : _i2c(sda, scl), _addr(addr) {
quicksand 0:4b56d28cc7e9 29 // _i2c.frequency(1000000); // set I2C frequency to 1MHz
quicksand 0:4b56d28cc7e9 30 }
quicksand 0:4b56d28cc7e9 31
quicksand 0:4b56d28cc7e9 32 VCNL40x0::~VCNL40x0() {
quicksand 0:4b56d28cc7e9 33 }
quicksand 0:4b56d28cc7e9 34
quicksand 0:4b56d28cc7e9 35 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
quicksand 0:4b56d28cc7e9 36
quicksand 0:4b56d28cc7e9 37 VCNL40x0Error_e VCNL40x0::SetCommandRegister (unsigned char Command) {
quicksand 0:4b56d28cc7e9 38
quicksand 0:4b56d28cc7e9 39 _send[0] = REGISTER_COMMAND; // VCNL40x0 Configuration reister
quicksand 0:4b56d28cc7e9 40 _send[1] = Command;
quicksand 0:4b56d28cc7e9 41 _i2c.write(VCNL40x0_ADDRESS,_send, 2); // Write 2 bytes on I2C
quicksand 0:4b56d28cc7e9 42
quicksand 0:4b56d28cc7e9 43 return VCNL40x0_ERROR_OK;
quicksand 0:4b56d28cc7e9 44 }
quicksand 0:4b56d28cc7e9 45
quicksand 0:4b56d28cc7e9 46 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
quicksand 0:4b56d28cc7e9 47
quicksand 0:4b56d28cc7e9 48 VCNL40x0Error_e VCNL40x0::ReadCommandRegister (unsigned char *Command) {
quicksand 0:4b56d28cc7e9 49
quicksand 0:4b56d28cc7e9 50 _send[0] = REGISTER_COMMAND; // VCNL40x0 Configuration register
quicksand 0:4b56d28cc7e9 51 _i2c.write(VCNL40x0_ADDRESS,_send, 1); // Write 1 byte on I2C
quicksand 0:4b56d28cc7e9 52 _i2c.read(VCNL40x0_ADDRESS+1,_receive, 1); // Read 1 byte on I2C
quicksand 0:4b56d28cc7e9 53
quicksand 0:4b56d28cc7e9 54 *Command = (unsigned char)(_receive[0]);
quicksand 0:4b56d28cc7e9 55
quicksand 0:4b56d28cc7e9 56 return VCNL40x0_ERROR_OK;
quicksand 0:4b56d28cc7e9 57 }
quicksand 0:4b56d28cc7e9 58
quicksand 0:4b56d28cc7e9 59 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
quicksand 0:4b56d28cc7e9 60
quicksand 0:4b56d28cc7e9 61 VCNL40x0Error_e VCNL40x0::ReadID (unsigned char *ID) {
quicksand 0:4b56d28cc7e9 62
quicksand 0:4b56d28cc7e9 63 _send[0] = REGISTER_ID; // VCNL40x0 product ID revision register
quicksand 0:4b56d28cc7e9 64 _i2c.write(VCNL40x0_ADDRESS, _send, 1); // Write 1 byte on I2C
quicksand 0:4b56d28cc7e9 65 _i2c.read(VCNL40x0_ADDRESS+1, _receive, 1); // Read 1 byte on I2C
quicksand 0:4b56d28cc7e9 66
quicksand 0:4b56d28cc7e9 67 *ID = (unsigned char)(_receive[0]);
quicksand 0:4b56d28cc7e9 68
quicksand 0:4b56d28cc7e9 69 return VCNL40x0_ERROR_OK;
quicksand 0:4b56d28cc7e9 70 }
quicksand 0:4b56d28cc7e9 71
quicksand 0:4b56d28cc7e9 72 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
quicksand 0:4b56d28cc7e9 73
quicksand 0:4b56d28cc7e9 74 VCNL40x0Error_e VCNL40x0::SetCurrent (unsigned char Current) {
quicksand 0:4b56d28cc7e9 75
quicksand 0:4b56d28cc7e9 76 _send[0] = REGISTER_PROX_CURRENT; // VCNL40x0 IR LED Current register
quicksand 0:4b56d28cc7e9 77 _send[1] = Current;
quicksand 0:4b56d28cc7e9 78 _i2c.write(VCNL40x0_ADDRESS,_send, 2); // Write 2 bytes on I2C
quicksand 0:4b56d28cc7e9 79
quicksand 0:4b56d28cc7e9 80 return VCNL40x0_ERROR_OK;
quicksand 0:4b56d28cc7e9 81 }
quicksand 0:4b56d28cc7e9 82
quicksand 0:4b56d28cc7e9 83 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
quicksand 0:4b56d28cc7e9 84
quicksand 0:4b56d28cc7e9 85 VCNL40x0Error_e VCNL40x0::ReadCurrent (unsigned char *Current) {
quicksand 0:4b56d28cc7e9 86
quicksand 0:4b56d28cc7e9 87 _send[0] = REGISTER_PROX_CURRENT; // VCNL40x0 IR LED current register
quicksand 0:4b56d28cc7e9 88 _i2c.write(VCNL40x0_ADDRESS,_send, 1); // Write 1 byte on I2C
quicksand 0:4b56d28cc7e9 89 _i2c.read(VCNL40x0_ADDRESS+1,_receive, 1); // Read 1 byte on I2C
quicksand 0:4b56d28cc7e9 90
quicksand 0:4b56d28cc7e9 91 *Current = (unsigned char)(_receive[0]);
quicksand 0:4b56d28cc7e9 92
quicksand 0:4b56d28cc7e9 93 return VCNL40x0_ERROR_OK;
quicksand 0:4b56d28cc7e9 94 }
quicksand 0:4b56d28cc7e9 95
quicksand 0:4b56d28cc7e9 96 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
quicksand 0:4b56d28cc7e9 97
quicksand 0:4b56d28cc7e9 98 VCNL40x0Error_e VCNL40x0::SetProximityRate (unsigned char ProximityRate) {
quicksand 0:4b56d28cc7e9 99
quicksand 0:4b56d28cc7e9 100 _send[0] = REGISTER_PROX_RATE; // VCNL40x0 Proximity rate register
quicksand 0:4b56d28cc7e9 101 _send[1] = ProximityRate;
quicksand 0:4b56d28cc7e9 102 _i2c.write(VCNL40x0_ADDRESS,_send, 2); // Write 2 bytes on I2C
quicksand 0:4b56d28cc7e9 103
quicksand 0:4b56d28cc7e9 104 return VCNL40x0_ERROR_OK;
quicksand 0:4b56d28cc7e9 105 }
quicksand 0:4b56d28cc7e9 106
quicksand 0:4b56d28cc7e9 107 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
quicksand 0:4b56d28cc7e9 108
quicksand 0:4b56d28cc7e9 109 VCNL40x0Error_e VCNL40x0::SetAmbiConfiguration (unsigned char AmbiConfiguration) {
quicksand 0:4b56d28cc7e9 110
quicksand 0:4b56d28cc7e9 111 _send[0] = REGISTER_AMBI_PARAMETER; // VCNL40x0 Ambilight configuration
quicksand 0:4b56d28cc7e9 112 _send[1] = AmbiConfiguration;
quicksand 0:4b56d28cc7e9 113 _i2c.write(VCNL40x0_ADDRESS,_send, 2); // Write 2 bytes on I2C
quicksand 0:4b56d28cc7e9 114
quicksand 0:4b56d28cc7e9 115 return VCNL40x0_ERROR_OK;
quicksand 0:4b56d28cc7e9 116 }
quicksand 0:4b56d28cc7e9 117
quicksand 0:4b56d28cc7e9 118 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
quicksand 0:4b56d28cc7e9 119
quicksand 0:4b56d28cc7e9 120 VCNL40x0Error_e VCNL40x0::SetInterruptControl (unsigned char InterruptControl) {
quicksand 0:4b56d28cc7e9 121
quicksand 0:4b56d28cc7e9 122 _send[0] = REGISTER_INTERRUPT_CONTROL; // VCNL40x0 Interrupt Control register
quicksand 0:4b56d28cc7e9 123 _send[1] = InterruptControl;
quicksand 0:4b56d28cc7e9 124 _i2c.write(VCNL40x0_ADDRESS,_send, 2); // Write 2 bytes on I2C
quicksand 0:4b56d28cc7e9 125
quicksand 0:4b56d28cc7e9 126 return VCNL40x0_ERROR_OK;
quicksand 0:4b56d28cc7e9 127 }
quicksand 0:4b56d28cc7e9 128
quicksand 0:4b56d28cc7e9 129 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
quicksand 0:4b56d28cc7e9 130
quicksand 0:4b56d28cc7e9 131 VCNL40x0Error_e VCNL40x0::ReadInterruptControl (unsigned char *InterruptControl) {
quicksand 0:4b56d28cc7e9 132
quicksand 0:4b56d28cc7e9 133 _send[0] = REGISTER_INTERRUPT_CONTROL; // VCNL40x0 Interrupt Control register
quicksand 0:4b56d28cc7e9 134 _i2c.write(VCNL40x0_ADDRESS,_send, 1); // Write 1 byte on I2C
quicksand 0:4b56d28cc7e9 135 _i2c.read(VCNL40x0_ADDRESS+1,_receive, 1); // Read 1 byte on I2C
quicksand 0:4b56d28cc7e9 136
quicksand 0:4b56d28cc7e9 137 *InterruptControl = (unsigned char)(_receive[0]);
quicksand 0:4b56d28cc7e9 138
quicksand 0:4b56d28cc7e9 139 return VCNL40x0_ERROR_OK;
quicksand 0:4b56d28cc7e9 140 }
quicksand 0:4b56d28cc7e9 141
quicksand 0:4b56d28cc7e9 142 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
quicksand 0:4b56d28cc7e9 143
quicksand 0:4b56d28cc7e9 144 VCNL40x0Error_e VCNL40x0::SetInterruptStatus (unsigned char InterruptStatus) {
quicksand 0:4b56d28cc7e9 145
quicksand 0:4b56d28cc7e9 146 _send[0] = REGISTER_INTERRUPT_STATUS; // VCNL40x0 Interrupt Status register
quicksand 0:4b56d28cc7e9 147 _send[1] = InterruptStatus;
quicksand 0:4b56d28cc7e9 148 _i2c.write(VCNL40x0_ADDRESS,_send, 2); // Write 2 bytes on I2C
quicksand 0:4b56d28cc7e9 149
quicksand 0:4b56d28cc7e9 150 return VCNL40x0_ERROR_OK;
quicksand 0:4b56d28cc7e9 151 }
quicksand 0:4b56d28cc7e9 152
quicksand 0:4b56d28cc7e9 153 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
quicksand 0:4b56d28cc7e9 154
quicksand 0:4b56d28cc7e9 155 VCNL40x0Error_e VCNL40x0::SetModulatorTimingAdjustment (unsigned char ModulatorTimingAdjustment) {
quicksand 0:4b56d28cc7e9 156
quicksand 0:4b56d28cc7e9 157 _send[0] = REGISTER_PROX_TIMING; // VCNL40x0 Modulator Timing Adjustment register
quicksand 0:4b56d28cc7e9 158 _send[1] = ModulatorTimingAdjustment;
quicksand 0:4b56d28cc7e9 159 _i2c.write(VCNL40x0_ADDRESS,_send, 2); // Write 2 bytes on I2C
quicksand 0:4b56d28cc7e9 160
quicksand 0:4b56d28cc7e9 161 return VCNL40x0_ERROR_OK;
quicksand 0:4b56d28cc7e9 162 }
quicksand 0:4b56d28cc7e9 163
quicksand 0:4b56d28cc7e9 164 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
quicksand 0:4b56d28cc7e9 165
quicksand 0:4b56d28cc7e9 166 VCNL40x0Error_e VCNL40x0::ReadInterruptStatus (unsigned char *InterruptStatus) {
quicksand 0:4b56d28cc7e9 167
quicksand 0:4b56d28cc7e9 168 _send[0] = REGISTER_INTERRUPT_STATUS; // VCNL40x0 Interrupt Status register
quicksand 0:4b56d28cc7e9 169 _i2c.write(VCNL40x0_ADDRESS,_send, 1); // Write 1 byte on I2C
quicksand 0:4b56d28cc7e9 170 _i2c.read(VCNL40x0_ADDRESS+1,_receive, 1); // Read 1 byte on I2C
quicksand 0:4b56d28cc7e9 171
quicksand 0:4b56d28cc7e9 172 *InterruptStatus = (unsigned char)(_receive[0]);
quicksand 0:4b56d28cc7e9 173
quicksand 0:4b56d28cc7e9 174 return VCNL40x0_ERROR_OK;
quicksand 0:4b56d28cc7e9 175 }
quicksand 0:4b56d28cc7e9 176
quicksand 0:4b56d28cc7e9 177 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
quicksand 0:4b56d28cc7e9 178
quicksand 0:4b56d28cc7e9 179 VCNL40x0Error_e VCNL40x0::ReadProxiValue (unsigned int *ProxiValue) {
quicksand 0:4b56d28cc7e9 180
quicksand 0:4b56d28cc7e9 181 _send[0] = REGISTER_PROX_VALUE; // VCNL40x0 Proximity Value register
quicksand 0:4b56d28cc7e9 182 _i2c.write(VCNL40x0_ADDRESS, _send, 1); // Write 1 byte on I2C
quicksand 0:4b56d28cc7e9 183 _i2c.read(VCNL40x0_ADDRESS+1, _receive, 2); // Read 2 bytes on I2C
quicksand 0:4b56d28cc7e9 184 *ProxiValue = ((unsigned int)_receive[0] << 8 | (unsigned char)_receive[1]);
quicksand 0:4b56d28cc7e9 185
quicksand 0:4b56d28cc7e9 186 return VCNL40x0_ERROR_OK;
quicksand 0:4b56d28cc7e9 187
quicksand 0:4b56d28cc7e9 188 }
quicksand 0:4b56d28cc7e9 189
quicksand 0:4b56d28cc7e9 190 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
quicksand 0:4b56d28cc7e9 191
quicksand 0:4b56d28cc7e9 192 VCNL40x0Error_e VCNL40x0::ReadAmbiValue (unsigned int *AmbiValue) {
quicksand 0:4b56d28cc7e9 193
quicksand 0:4b56d28cc7e9 194 _send[0] = REGISTER_AMBI_VALUE; // VCNL40x0 Ambient Light Value register
quicksand 0:4b56d28cc7e9 195 _i2c.write(VCNL40x0_ADDRESS, _send, 1); // Write 1 byte on I2C
quicksand 0:4b56d28cc7e9 196 _i2c.read(VCNL40x0_ADDRESS+1, _receive, 2); // Read 2 bytes on I2C
quicksand 0:4b56d28cc7e9 197 *AmbiValue = ((unsigned int)_receive[0] << 8 | (unsigned char)_receive[1]);
quicksand 0:4b56d28cc7e9 198
quicksand 0:4b56d28cc7e9 199 return VCNL40x0_ERROR_OK;
quicksand 0:4b56d28cc7e9 200
quicksand 0:4b56d28cc7e9 201 }
quicksand 0:4b56d28cc7e9 202
quicksand 0:4b56d28cc7e9 203 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
quicksand 0:4b56d28cc7e9 204
quicksand 0:4b56d28cc7e9 205 VCNL40x0Error_e VCNL40x0::SetLowThreshold (unsigned int LowThreshold) {
quicksand 0:4b56d28cc7e9 206
quicksand 0:4b56d28cc7e9 207 unsigned char LoByte=0, HiByte=0;
quicksand 0:4b56d28cc7e9 208
quicksand 0:4b56d28cc7e9 209 LoByte = (unsigned char)(LowThreshold & 0x00ff);
quicksand 0:4b56d28cc7e9 210 HiByte = (unsigned char)((LowThreshold & 0xff00)>>8);
quicksand 0:4b56d28cc7e9 211
quicksand 0:4b56d28cc7e9 212 _send[0] = REGISTER_INTERRUPT_LOW_THRES; // VCNL40x0 Low Threshold Register, Hi Byte
quicksand 0:4b56d28cc7e9 213 _send[1] = HiByte;
quicksand 0:4b56d28cc7e9 214 _i2c.write(VCNL40x0_ADDRESS,_send, 2); // Write 2 bytes on I2C
quicksand 0:4b56d28cc7e9 215
quicksand 0:4b56d28cc7e9 216 _send[0] = REGISTER_INTERRUPT_LOW_THRES+1; // VCNL40x0 Low Threshold Register, Lo Byte
quicksand 0:4b56d28cc7e9 217 _send[1] = LoByte;
quicksand 0:4b56d28cc7e9 218 _i2c.write(VCNL40x0_ADDRESS,_send, 2); // Write 2 bytes on I2C
quicksand 0:4b56d28cc7e9 219
quicksand 0:4b56d28cc7e9 220 return VCNL40x0_ERROR_OK;
quicksand 0:4b56d28cc7e9 221
quicksand 0:4b56d28cc7e9 222 }
quicksand 0:4b56d28cc7e9 223
quicksand 0:4b56d28cc7e9 224 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
quicksand 0:4b56d28cc7e9 225
quicksand 0:4b56d28cc7e9 226 VCNL40x0Error_e VCNL40x0::SetHighThreshold (unsigned int HighThreshold) {
quicksand 0:4b56d28cc7e9 227
quicksand 0:4b56d28cc7e9 228 unsigned char LoByte=0, HiByte=0;
quicksand 0:4b56d28cc7e9 229
quicksand 0:4b56d28cc7e9 230 LoByte = (unsigned char)(HighThreshold & 0x00ff);
quicksand 0:4b56d28cc7e9 231 HiByte = (unsigned char)((HighThreshold & 0xff00)>>8);
quicksand 0:4b56d28cc7e9 232
quicksand 0:4b56d28cc7e9 233 _send[0] = REGISTER_INTERRUPT_HIGH_THRES; // VCNL40x0 High Threshold Register, Hi Byte
quicksand 0:4b56d28cc7e9 234 _send[1] = HiByte;
quicksand 0:4b56d28cc7e9 235 _i2c.write(VCNL40x0_ADDRESS,_send, 2); // Write 2 bytes on I2C
quicksand 0:4b56d28cc7e9 236
quicksand 0:4b56d28cc7e9 237 _send[0] = REGISTER_INTERRUPT_HIGH_THRES+1; // VCNL40x0 High Threshold Register, Lo Byte
quicksand 0:4b56d28cc7e9 238 _send[1] = LoByte;
quicksand 0:4b56d28cc7e9 239 _i2c.write(VCNL40x0_ADDRESS,_send, 2); // Write 2 bytes on I2C
quicksand 0:4b56d28cc7e9 240
quicksand 0:4b56d28cc7e9 241 return VCNL40x0_ERROR_OK;
quicksand 0:4b56d28cc7e9 242
quicksand 0:4b56d28cc7e9 243 }
quicksand 0:4b56d28cc7e9 244
quicksand 0:4b56d28cc7e9 245 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
quicksand 0:4b56d28cc7e9 246 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
quicksand 0:4b56d28cc7e9 247 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
quicksand 0:4b56d28cc7e9 248
quicksand 0:4b56d28cc7e9 249 VCNL40x0Error_e VCNL40x0::ReadProxiOnDemand (unsigned int *ProxiValue) {
quicksand 0:4b56d28cc7e9 250
quicksand 0:4b56d28cc7e9 251 unsigned char Command=0;
quicksand 0:4b56d28cc7e9 252
quicksand 0:4b56d28cc7e9 253 // enable prox value on demand
quicksand 0:4b56d28cc7e9 254 SetCommandRegister (COMMAND_PROX_ENABLE | COMMAND_PROX_ON_DEMAND);
quicksand 0:4b56d28cc7e9 255
quicksand 0:4b56d28cc7e9 256 // wait on prox data ready bit
quicksand 0:4b56d28cc7e9 257 do {
quicksand 0:4b56d28cc7e9 258 ReadCommandRegister (&Command); // read command register
quicksand 0:4b56d28cc7e9 259 } while (!(Command & COMMAND_MASK_PROX_DATA_READY));
quicksand 0:4b56d28cc7e9 260
quicksand 0:4b56d28cc7e9 261 ReadProxiValue (ProxiValue); // read prox value
quicksand 0:4b56d28cc7e9 262
quicksand 0:4b56d28cc7e9 263 SetCommandRegister (COMMAND_ALL_DISABLE); // stop prox value on demand
quicksand 0:4b56d28cc7e9 264
quicksand 0:4b56d28cc7e9 265 return VCNL40x0_ERROR_OK;
quicksand 0:4b56d28cc7e9 266 }
quicksand 0:4b56d28cc7e9 267
quicksand 0:4b56d28cc7e9 268 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
quicksand 0:4b56d28cc7e9 269
quicksand 0:4b56d28cc7e9 270 VCNL40x0Error_e VCNL40x0::ReadAmbiOnDemand (unsigned int *AmbiValue) {
quicksand 0:4b56d28cc7e9 271
quicksand 0:4b56d28cc7e9 272 unsigned char Command=0;
quicksand 0:4b56d28cc7e9 273
quicksand 0:4b56d28cc7e9 274 // enable ambi value on demand
quicksand 0:4b56d28cc7e9 275 SetCommandRegister (COMMAND_PROX_ENABLE | COMMAND_AMBI_ON_DEMAND);
quicksand 0:4b56d28cc7e9 276
quicksand 0:4b56d28cc7e9 277 // wait on ambi data ready bit
quicksand 0:4b56d28cc7e9 278 do {
quicksand 0:4b56d28cc7e9 279 ReadCommandRegister (&Command); // read command register
quicksand 0:4b56d28cc7e9 280 } while (!(Command & COMMAND_MASK_AMBI_DATA_READY));
quicksand 0:4b56d28cc7e9 281
quicksand 0:4b56d28cc7e9 282 ReadAmbiValue (AmbiValue); // read ambi value
quicksand 0:4b56d28cc7e9 283
quicksand 0:4b56d28cc7e9 284 SetCommandRegister (COMMAND_ALL_DISABLE); // stop ambi value on demand
quicksand 0:4b56d28cc7e9 285
quicksand 0:4b56d28cc7e9 286 return VCNL40x0_ERROR_OK;
quicksand 0:4b56d28cc7e9 287 }