cycyy

Dependencies:   MCP23017 WattBob_TextLCD

Committer:
mihaidd
Date:
Wed May 08 03:58:47 2019 +0000
Revision:
0:a9b4ee4ed395
ccc

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mihaidd 0:a9b4ee4ed395 1 /******************************************************************************
mihaidd 0:a9b4ee4ed395 2 * SFE_VL6180.cpp
mihaidd 0:a9b4ee4ed395 3 * Library for VL6180 time of flight range finder.
mihaidd 0:a9b4ee4ed395 4 * Casey Kuhns @ SparkFun Electronics
mihaidd 0:a9b4ee4ed395 5 * 10/29/2014
mihaidd 0:a9b4ee4ed395 6 * https://github.com/sparkfun/
mihaidd 0:a9b4ee4ed395 7 *
mihaidd 0:a9b4ee4ed395 8 * The VL6180 by ST micro is a time of flight range finder that
mihaidd 0:a9b4ee4ed395 9 * uses pulsed IR light to determine distances from object at close
mihaidd 0:a9b4ee4ed395 10 * range. The average range of a sensor is between 0-200mm
mihaidd 0:a9b4ee4ed395 11 *
mihaidd 0:a9b4ee4ed395 12 * In this file are the functions in the VL6180 class
mihaidd 0:a9b4ee4ed395 13 *
mihaidd 0:a9b4ee4ed395 14 * Resources:
mihaidd 0:a9b4ee4ed395 15 * This library uses the Arduino Wire.h to complete I2C transactions.
mihaidd 0:a9b4ee4ed395 16 *
mihaidd 0:a9b4ee4ed395 17 * Development environment specifics:
mihaidd 0:a9b4ee4ed395 18 * IDE: Arduino 1.0.5
mihaidd 0:a9b4ee4ed395 19 * Hardware Platform: Arduino Pro 3.3V/8MHz
mihaidd 0:a9b4ee4ed395 20 * VL6180 Breakout Version: 1.0
mihaidd 0:a9b4ee4ed395 21 *
mihaidd 0:a9b4ee4ed395 22 *
mihaidd 0:a9b4ee4ed395 23 * This code is beerware. If you see me (or any other SparkFun employee) at the
mihaidd 0:a9b4ee4ed395 24 * local pub, and you've found our code helpful, please buy us a round!
mihaidd 0:a9b4ee4ed395 25 *
mihaidd 0:a9b4ee4ed395 26 * Distributed as-is; no warranty is given.
mihaidd 0:a9b4ee4ed395 27 ******************************************************************************/
mihaidd 0:a9b4ee4ed395 28
mihaidd 0:a9b4ee4ed395 29 #include "VL6180.h"
mihaidd 0:a9b4ee4ed395 30
mihaidd 0:a9b4ee4ed395 31 //
mihaidd 0:a9b4ee4ed395 32 // Constructors
mihaidd 0:a9b4ee4ed395 33 //
mihaidd 0:a9b4ee4ed395 34 VL6180::VL6180(PinName sda, PinName scl) : i2c(sda, scl)
mihaidd 0:a9b4ee4ed395 35 {
mihaidd 0:a9b4ee4ed395 36 VL6180_i2cAddress = VL6180_DEF_ADDR;
mihaidd 0:a9b4ee4ed395 37 }
mihaidd 0:a9b4ee4ed395 38
mihaidd 0:a9b4ee4ed395 39 VL6180::VL6180(PinName sda, PinName scl, int i2cAddress) : i2c(sda, scl)
mihaidd 0:a9b4ee4ed395 40 {
mihaidd 0:a9b4ee4ed395 41 VL6180_i2cAddress = i2cAddress;
mihaidd 0:a9b4ee4ed395 42 VL6180_error_no = 0;
mihaidd 0:a9b4ee4ed395 43 }
mihaidd 0:a9b4ee4ed395 44 //
mihaidd 0:a9b4ee4ed395 45 // destructor
mihaidd 0:a9b4ee4ed395 46 //
mihaidd 0:a9b4ee4ed395 47 VL6180::~VL6180()
mihaidd 0:a9b4ee4ed395 48 {
mihaidd 0:a9b4ee4ed395 49 }
mihaidd 0:a9b4ee4ed395 50
mihaidd 0:a9b4ee4ed395 51 int8_t VL6180::VL6180_Init(void)
mihaidd 0:a9b4ee4ed395 52 {
mihaidd 0:a9b4ee4ed395 53 uint8_t data; //for temp data storage
mihaidd 0:a9b4ee4ed395 54
mihaidd 0:a9b4ee4ed395 55 data = VL6180_getRegister(VL6180_SYSTEM_FRESH_OUT_OF_RESET);
mihaidd 0:a9b4ee4ed395 56
mihaidd 0:a9b4ee4ed395 57 if(data != 1) return VL6180_FAILURE_RESET;
mihaidd 0:a9b4ee4ed395 58
mihaidd 0:a9b4ee4ed395 59 //Required by datasheet
mihaidd 0:a9b4ee4ed395 60 //http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/DM00122600.pdf
mihaidd 0:a9b4ee4ed395 61 VL6180_setRegister(0x0207, 0x01);
mihaidd 0:a9b4ee4ed395 62 VL6180_setRegister(0x0208, 0x01);
mihaidd 0:a9b4ee4ed395 63 VL6180_setRegister(0x0096, 0x00);
mihaidd 0:a9b4ee4ed395 64 VL6180_setRegister(0x0097, 0xfd);
mihaidd 0:a9b4ee4ed395 65 VL6180_setRegister(0x00e3, 0x00);
mihaidd 0:a9b4ee4ed395 66 VL6180_setRegister(0x00e4, 0x04);
mihaidd 0:a9b4ee4ed395 67 VL6180_setRegister(0x00e5, 0x02);
mihaidd 0:a9b4ee4ed395 68 VL6180_setRegister(0x00e6, 0x01);
mihaidd 0:a9b4ee4ed395 69 VL6180_setRegister(0x00e7, 0x03);
mihaidd 0:a9b4ee4ed395 70 VL6180_setRegister(0x00f5, 0x02);
mihaidd 0:a9b4ee4ed395 71 VL6180_setRegister(0x00d9, 0x05);
mihaidd 0:a9b4ee4ed395 72 VL6180_setRegister(0x00db, 0xce);
mihaidd 0:a9b4ee4ed395 73 VL6180_setRegister(0x00dc, 0x03);
mihaidd 0:a9b4ee4ed395 74 VL6180_setRegister(0x00dd, 0xf8);
mihaidd 0:a9b4ee4ed395 75 VL6180_setRegister(0x009f, 0x00);
mihaidd 0:a9b4ee4ed395 76 VL6180_setRegister(0x00a3, 0x3c);
mihaidd 0:a9b4ee4ed395 77 VL6180_setRegister(0x00b7, 0x00);
mihaidd 0:a9b4ee4ed395 78 VL6180_setRegister(0x00bb, 0x3c);
mihaidd 0:a9b4ee4ed395 79 VL6180_setRegister(0x00b2, 0x09);
mihaidd 0:a9b4ee4ed395 80 VL6180_setRegister(0x00ca, 0x09);
mihaidd 0:a9b4ee4ed395 81 VL6180_setRegister(0x0198, 0x01);
mihaidd 0:a9b4ee4ed395 82 VL6180_setRegister(0x01b0, 0x17);
mihaidd 0:a9b4ee4ed395 83 VL6180_setRegister(0x01ad, 0x00);
mihaidd 0:a9b4ee4ed395 84 VL6180_setRegister(0x00ff, 0x05);
mihaidd 0:a9b4ee4ed395 85 VL6180_setRegister(0x0100, 0x05);
mihaidd 0:a9b4ee4ed395 86 VL6180_setRegister(0x0199, 0x05);
mihaidd 0:a9b4ee4ed395 87 VL6180_setRegister(0x01a6, 0x1b);
mihaidd 0:a9b4ee4ed395 88 VL6180_setRegister(0x01ac, 0x3e);
mihaidd 0:a9b4ee4ed395 89 VL6180_setRegister(0x01a7, 0x1f);
mihaidd 0:a9b4ee4ed395 90 VL6180_setRegister(0x0030, 0x00);
mihaidd 0:a9b4ee4ed395 91
mihaidd 0:a9b4ee4ed395 92 VL6180_setRegister(VL6180_SYSTEM_FRESH_OUT_OF_RESET, 0x00);
mihaidd 0:a9b4ee4ed395 93 return 0;
mihaidd 0:a9b4ee4ed395 94 }
mihaidd 0:a9b4ee4ed395 95
mihaidd 0:a9b4ee4ed395 96 void VL6180::VL6180_DefautSettings(void)
mihaidd 0:a9b4ee4ed395 97 {
mihaidd 0:a9b4ee4ed395 98 //Recommended settings from datasheet
mihaidd 0:a9b4ee4ed395 99 //http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/DM00122600.pdf
mihaidd 0:a9b4ee4ed395 100
mihaidd 0:a9b4ee4ed395 101 //Enable Interrupts on Conversion Complete (any source)
mihaidd 0:a9b4ee4ed395 102 VL6180_setRegister(VL6180_SYSTEM_INTERRUPT_CONFIG_GPIO, (4 << 3)|(4) ); // Set GPIO1 high when sample complete
mihaidd 0:a9b4ee4ed395 103
mihaidd 0:a9b4ee4ed395 104
mihaidd 0:a9b4ee4ed395 105 VL6180_setRegister(VL6180_SYSTEM_MODE_GPIO1, 0x10); // Set GPIO1 high when sample complete
mihaidd 0:a9b4ee4ed395 106 VL6180_setRegister(VL6180_READOUT_AVERAGING_SAMPLE_PERIOD, 0x30); //Set Avg sample period
mihaidd 0:a9b4ee4ed395 107 VL6180_setRegister(VL6180_SYSALS_ANALOGUE_GAIN, 0x46); // Set the ALS gain
mihaidd 0:a9b4ee4ed395 108 VL6180_setRegister(VL6180_SYSRANGE_VHV_REPEAT_RATE, 0xFF); // Set auto calibration period (Max = 255)/(OFF = 0)
mihaidd 0:a9b4ee4ed395 109 VL6180_setRegister(VL6180_SYSALS_INTEGRATION_PERIOD, 0x63); // Set ALS integration time to 100ms
mihaidd 0:a9b4ee4ed395 110 VL6180_setRegister(VL6180_SYSRANGE_VHV_RECALIBRATE, 0x01); // perform a single temperature calibration
mihaidd 0:a9b4ee4ed395 111 //Optional settings from datasheet
mihaidd 0:a9b4ee4ed395 112 //http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/DM00122600.pdf
mihaidd 0:a9b4ee4ed395 113 VL6180_setRegister(VL6180_SYSRANGE_INTERMEASUREMENT_PERIOD, 0x09); // Set default ranging inter-measurement period to 100ms
mihaidd 0:a9b4ee4ed395 114 VL6180_setRegister(VL6180_SYSALS_INTERMEASUREMENT_PERIOD, 0x0A); // Set default ALS inter-measurement period to 100ms
mihaidd 0:a9b4ee4ed395 115 VL6180_setRegister(VL6180_SYSTEM_INTERRUPT_CONFIG_GPIO, 0x24); // Configures interrupt on 鈥楴ew Sample Ready threshold event鈥?
mihaidd 0:a9b4ee4ed395 116 //Additional settings defaults from community
mihaidd 0:a9b4ee4ed395 117 VL6180_setRegister(VL6180_SYSRANGE_MAX_CONVERGENCE_TIME, 0x32);
mihaidd 0:a9b4ee4ed395 118 VL6180_setRegister(VL6180_SYSRANGE_RANGE_CHECK_ENABLES, 0x10 | 0x01);
mihaidd 0:a9b4ee4ed395 119 VL6180_setRegister16bit(VL6180_SYSRANGE_EARLY_CONVERGENCE_ESTIMATE, 0x7B );
mihaidd 0:a9b4ee4ed395 120 VL6180_setRegister16bit(VL6180_SYSALS_INTEGRATION_PERIOD, 0x64);
mihaidd 0:a9b4ee4ed395 121
mihaidd 0:a9b4ee4ed395 122 VL6180_setRegister(VL6180_READOUT_AVERAGING_SAMPLE_PERIOD,0x30);
mihaidd 0:a9b4ee4ed395 123 VL6180_setRegister(VL6180_SYSALS_ANALOGUE_GAIN,0x40);
mihaidd 0:a9b4ee4ed395 124 VL6180_setRegister(VL6180_FIRMWARE_RESULT_SCALER,0x01);
mihaidd 0:a9b4ee4ed395 125 }
mihaidd 0:a9b4ee4ed395 126 void VL6180::getIdentification(struct VL6180Identification *temp)
mihaidd 0:a9b4ee4ed395 127 {
mihaidd 0:a9b4ee4ed395 128
mihaidd 0:a9b4ee4ed395 129 temp->idModel = VL6180_getRegister(VL6180_IDENTIFICATION_MODEL_ID);
mihaidd 0:a9b4ee4ed395 130 temp->idModelRevMajor = VL6180_getRegister(VL6180_IDENTIFICATION_MODEL_REV_MAJOR);
mihaidd 0:a9b4ee4ed395 131 temp->idModelRevMinor = VL6180_getRegister(VL6180_IDENTIFICATION_MODEL_REV_MINOR);
mihaidd 0:a9b4ee4ed395 132 temp->idModuleRevMajor = VL6180_getRegister(VL6180_IDENTIFICATION_MODULE_REV_MAJOR);
mihaidd 0:a9b4ee4ed395 133 temp->idModuleRevMinor = VL6180_getRegister(VL6180_IDENTIFICATION_MODULE_REV_MINOR);
mihaidd 0:a9b4ee4ed395 134
mihaidd 0:a9b4ee4ed395 135 temp->idDate = VL6180_getRegister16bit(VL6180_IDENTIFICATION_DATE);
mihaidd 0:a9b4ee4ed395 136 temp->idTime = VL6180_getRegister16bit(VL6180_IDENTIFICATION_TIME);
mihaidd 0:a9b4ee4ed395 137 }
mihaidd 0:a9b4ee4ed395 138
mihaidd 0:a9b4ee4ed395 139
mihaidd 0:a9b4ee4ed395 140 uint8_t VL6180::changeAddress(uint8_t old_address, uint8_t new_address)
mihaidd 0:a9b4ee4ed395 141 {
mihaidd 0:a9b4ee4ed395 142
mihaidd 0:a9b4ee4ed395 143 //NOTICE: IT APPEARS THAT CHANGING THE ADDRESS IS NOT STORED IN NON-VOLATILE MEMORY
mihaidd 0:a9b4ee4ed395 144 // POWER CYCLING THE DEVICE REVERTS ADDRESS BACK TO 0X29
mihaidd 0:a9b4ee4ed395 145
mihaidd 0:a9b4ee4ed395 146 if( old_address == new_address) return old_address;
mihaidd 0:a9b4ee4ed395 147 if( new_address > 127) return old_address;
mihaidd 0:a9b4ee4ed395 148
mihaidd 0:a9b4ee4ed395 149 VL6180_setRegister(VL6180_I2C_SLAVE_DEVICE_ADDRESS, new_address);
mihaidd 0:a9b4ee4ed395 150
mihaidd 0:a9b4ee4ed395 151 return VL6180_getRegister(VL6180_I2C_SLAVE_DEVICE_ADDRESS);
mihaidd 0:a9b4ee4ed395 152 }
mihaidd 0:a9b4ee4ed395 153
mihaidd 0:a9b4ee4ed395 154
mihaidd 0:a9b4ee4ed395 155
mihaidd 0:a9b4ee4ed395 156 uint8_t VL6180::getDistance()
mihaidd 0:a9b4ee4ed395 157 {
mihaidd 0:a9b4ee4ed395 158 VL6180_setRegister(VL6180_SYSRANGE_START, 0x01); //Start Single shot mode
mihaidd 0:a9b4ee4ed395 159 wait(0.01); // 10mS
mihaidd 0:a9b4ee4ed395 160 return VL6180_getRegister(VL6180_RESULT_RANGE_VAL);
mihaidd 0:a9b4ee4ed395 161 // VL6180_setRegister(VL6180_SYSTEM_INTERRUPT_CLEAR, 0x07);
mihaidd 0:a9b4ee4ed395 162 // return distance;
mihaidd 0:a9b4ee4ed395 163 }
mihaidd 0:a9b4ee4ed395 164
mihaidd 0:a9b4ee4ed395 165 float VL6180::getAmbientLight(VL6180_als_gain VL6180_ALS_GAIN)
mihaidd 0:a9b4ee4ed395 166 {
mihaidd 0:a9b4ee4ed395 167 //First load in Gain we are using, do it everytime incase someone changes it on us.
mihaidd 0:a9b4ee4ed395 168 //Note: Upper nibble shoudl be set to 0x4 i.e. for ALS gain of 1.0 write 0x46
mihaidd 0:a9b4ee4ed395 169 VL6180_setRegister(VL6180_SYSALS_ANALOGUE_GAIN, (0x40 | VL6180_ALS_GAIN)); // Set the ALS gain
mihaidd 0:a9b4ee4ed395 170
mihaidd 0:a9b4ee4ed395 171 //Start ALS Measurement
mihaidd 0:a9b4ee4ed395 172 VL6180_setRegister(VL6180_SYSALS_START, 0x01);
mihaidd 0:a9b4ee4ed395 173
mihaidd 0:a9b4ee4ed395 174 wait(0.1); //100Ms
mihaidd 0:a9b4ee4ed395 175
mihaidd 0:a9b4ee4ed395 176 VL6180_setRegister(VL6180_SYSTEM_INTERRUPT_CLEAR, 0x07);
mihaidd 0:a9b4ee4ed395 177
mihaidd 0:a9b4ee4ed395 178 //Retrieve the Raw ALS value from the sensoe
mihaidd 0:a9b4ee4ed395 179 unsigned int alsRaw = VL6180_getRegister16bit(VL6180_RESULT_ALS_VAL);
mihaidd 0:a9b4ee4ed395 180
mihaidd 0:a9b4ee4ed395 181 //Get Integration Period for calculation, we do this everytime incase someone changes it on us.
mihaidd 0:a9b4ee4ed395 182 unsigned int alsIntegrationPeriodRaw = VL6180_getRegister16bit(VL6180_SYSALS_INTEGRATION_PERIOD);
mihaidd 0:a9b4ee4ed395 183
mihaidd 0:a9b4ee4ed395 184 float alsIntegrationPeriod = 100.0 / alsIntegrationPeriodRaw ;
mihaidd 0:a9b4ee4ed395 185
mihaidd 0:a9b4ee4ed395 186 //Calculate actual LUX from Appnotes
mihaidd 0:a9b4ee4ed395 187
mihaidd 0:a9b4ee4ed395 188 float alsGain = 0.0;
mihaidd 0:a9b4ee4ed395 189
mihaidd 0:a9b4ee4ed395 190 switch (VL6180_ALS_GAIN) {
mihaidd 0:a9b4ee4ed395 191 case GAIN_20:
mihaidd 0:a9b4ee4ed395 192 alsGain = 20.0;
mihaidd 0:a9b4ee4ed395 193 break;
mihaidd 0:a9b4ee4ed395 194 case GAIN_10:
mihaidd 0:a9b4ee4ed395 195 alsGain = 10.32;
mihaidd 0:a9b4ee4ed395 196 break;
mihaidd 0:a9b4ee4ed395 197 case GAIN_5:
mihaidd 0:a9b4ee4ed395 198 alsGain = 5.21;
mihaidd 0:a9b4ee4ed395 199 break;
mihaidd 0:a9b4ee4ed395 200 case GAIN_2_5:
mihaidd 0:a9b4ee4ed395 201 alsGain = 2.60;
mihaidd 0:a9b4ee4ed395 202 break;
mihaidd 0:a9b4ee4ed395 203 case GAIN_1_67:
mihaidd 0:a9b4ee4ed395 204 alsGain = 1.72;
mihaidd 0:a9b4ee4ed395 205 break;
mihaidd 0:a9b4ee4ed395 206 case GAIN_1_25:
mihaidd 0:a9b4ee4ed395 207 alsGain = 1.28;
mihaidd 0:a9b4ee4ed395 208 break;
mihaidd 0:a9b4ee4ed395 209 case GAIN_1:
mihaidd 0:a9b4ee4ed395 210 alsGain = 1.01;
mihaidd 0:a9b4ee4ed395 211 break;
mihaidd 0:a9b4ee4ed395 212 case GAIN_40:
mihaidd 0:a9b4ee4ed395 213 alsGain = 40.0;
mihaidd 0:a9b4ee4ed395 214 break;
mihaidd 0:a9b4ee4ed395 215 }
mihaidd 0:a9b4ee4ed395 216
mihaidd 0:a9b4ee4ed395 217 //Calculate LUX from formula in AppNotes
mihaidd 0:a9b4ee4ed395 218
mihaidd 0:a9b4ee4ed395 219 float alsCalculated = (float)0.32 * ((float)alsRaw / alsGain) * alsIntegrationPeriod;
mihaidd 0:a9b4ee4ed395 220
mihaidd 0:a9b4ee4ed395 221 return alsCalculated;
mihaidd 0:a9b4ee4ed395 222 }
mihaidd 0:a9b4ee4ed395 223
mihaidd 0:a9b4ee4ed395 224 // --- Private Functions --- //
mihaidd 0:a9b4ee4ed395 225
mihaidd 0:a9b4ee4ed395 226 uint8_t VL6180::VL6180_getRegister(uint16_t reg_address)
mihaidd 0:a9b4ee4ed395 227 {
mihaidd 0:a9b4ee4ed395 228 char data[2];
mihaidd 0:a9b4ee4ed395 229
mihaidd 0:a9b4ee4ed395 230 data[0] = (reg_address >> 8) & 0xFF; //MSB of register address
mihaidd 0:a9b4ee4ed395 231 data[1] = reg_address & 0xFF; //LSB of register address
mihaidd 0:a9b4ee4ed395 232 VL6180_error_no = i2c.write(VL6180_i2cAddress, data, 2);
mihaidd 0:a9b4ee4ed395 233 VL6180_error_no = i2c.read(VL6180_i2cAddress, data, 1, false);
mihaidd 0:a9b4ee4ed395 234 return data[0];
mihaidd 0:a9b4ee4ed395 235 }
mihaidd 0:a9b4ee4ed395 236
mihaidd 0:a9b4ee4ed395 237 uint16_t VL6180::VL6180_getRegister16bit(uint16_t reg_address)
mihaidd 0:a9b4ee4ed395 238 {
mihaidd 0:a9b4ee4ed395 239 char data[2];
mihaidd 0:a9b4ee4ed395 240
mihaidd 0:a9b4ee4ed395 241 data[0] = (reg_address >> 8) & 0xFF; //MSB of register address
mihaidd 0:a9b4ee4ed395 242 data[1] = reg_address & 0xFF; //LSB of register address
mihaidd 0:a9b4ee4ed395 243 VL6180_error_no = i2c.write(VL6180_i2cAddress, data, 2);
mihaidd 0:a9b4ee4ed395 244 VL6180_error_no = i2c.read(VL6180_i2cAddress, data, 2, false);
mihaidd 0:a9b4ee4ed395 245 return (data[0] + ((data[1] << 8) & 0xFF00));
mihaidd 0:a9b4ee4ed395 246 }
mihaidd 0:a9b4ee4ed395 247
mihaidd 0:a9b4ee4ed395 248 void VL6180::VL6180_setRegister(uint16_t reg_address, uint8_t value)
mihaidd 0:a9b4ee4ed395 249 {
mihaidd 0:a9b4ee4ed395 250 char data[3];
mihaidd 0:a9b4ee4ed395 251
mihaidd 0:a9b4ee4ed395 252 data[0] = (reg_address >> 8) & 0xFF; //MSB of register address
mihaidd 0:a9b4ee4ed395 253 data[1] = reg_address & 0xFF; //LSB of register address
mihaidd 0:a9b4ee4ed395 254 data[2] = value;
mihaidd 0:a9b4ee4ed395 255 VL6180_error_no = VL6180_error_no = i2c.write(VL6180_i2cAddress, data, 3);
mihaidd 0:a9b4ee4ed395 256 }
mihaidd 0:a9b4ee4ed395 257
mihaidd 0:a9b4ee4ed395 258 void VL6180::VL6180_setRegister16bit(uint16_t reg_address, uint16_t value)
mihaidd 0:a9b4ee4ed395 259 {
mihaidd 0:a9b4ee4ed395 260 char data[4];
mihaidd 0:a9b4ee4ed395 261
mihaidd 0:a9b4ee4ed395 262 data[0] = (reg_address >> 8) & 0xFF; //MSB of register address
mihaidd 0:a9b4ee4ed395 263 data[1] = reg_address & 0xFF; //LSB of register address
mihaidd 0:a9b4ee4ed395 264 data[2] = value & 0xFF;
mihaidd 0:a9b4ee4ed395 265 data[3] = ((value >> 8) & 0xFF);
mihaidd 0:a9b4ee4ed395 266 VL6180_error_no = VL6180_error_no = i2c.write(VL6180_i2cAddress, data, 4);
mihaidd 0:a9b4ee4ed395 267 }
mihaidd 0:a9b4ee4ed395 268
mihaidd 0:a9b4ee4ed395 269 int VL6180::writeSingleRegister( uint16_t reg_address, uint8_t data )
mihaidd 0:a9b4ee4ed395 270 {
mihaidd 0:a9b4ee4ed395 271
mihaidd 0:a9b4ee4ed395 272 char data_write[3];
mihaidd 0:a9b4ee4ed395 273 data_write[0] = (reg_address >> 8) & 0xFF; //MSB of register address
mihaidd 0:a9b4ee4ed395 274 data_write[1] = reg_address & 0xFF; //LSB of register address
mihaidd 0:a9b4ee4ed395 275 data_write[2] = data & 0xFF;
mihaidd 0:a9b4ee4ed395 276 return i2c.write(VL6180_DEF_ADDR, data_write, 3);
mihaidd 0:a9b4ee4ed395 277
mihaidd 0:a9b4ee4ed395 278 // char tx[2] = { address | 160, data }; //0d160 = 0b10100000
mihaidd 0:a9b4ee4ed395 279 // int ack = i2c.write( SLAVE_ADDRESS << 1, tx, 2 );
mihaidd 0:a9b4ee4ed395 280 // return ack;
mihaidd 0:a9b4ee4ed395 281 }