VL6180x lib under optimization (add longer ranging and multiple devices on the same I2C)

Dependents:   Coupe Robotique FIP Coupe-Robotique-FIP-Main

Committer:
julientiron
Date:
Tue Jul 07 20:36:43 2015 +0000
Revision:
0:84fb42fedc5b
add I2C internal pull up

Who changed what in which revision?

UserRevisionLine numberNew contents of line
julientiron 0:84fb42fedc5b 1 /**
julientiron 0:84fb42fedc5b 2 * @file VL6180x.h
julientiron 0:84fb42fedc5b 3 * @brief Library for VL6180x time of flight range finder.
julientiron 0:84fb42fedc5b 4 * Casey Kuhns @ SparkFun Electronics
julientiron 0:84fb42fedc5b 5 * 10/29/2014
julientiron 0:84fb42fedc5b 6 * https://github.com/sparkfun/
julientiron 0:84fb42fedc5b 7 *
julientiron 0:84fb42fedc5b 8 * The VL6180x by ST micro is a time of flight range finder that
julientiron 0:84fb42fedc5b 9 * uses pulsed IR light to determine distances from object at close
julientiron 0:84fb42fedc5b 10 * range. The average range of a sensor is between 0-200mm
julientiron 0:84fb42fedc5b 11 *
julientiron 0:84fb42fedc5b 12 * In this file are the function prototypes in the VL6180x class
julientiron 0:84fb42fedc5b 13 *
julientiron 0:84fb42fedc5b 14 * Resources:
julientiron 0:84fb42fedc5b 15 * This library uses the Arduino Wire.h to complete I2C transactions.
julientiron 0:84fb42fedc5b 16 *
julientiron 0:84fb42fedc5b 17 * Development environment specifics:
julientiron 0:84fb42fedc5b 18 * IDE: Arduino 1.0.5
julientiron 0:84fb42fedc5b 19 * Hardware Platform: Arduino Pro 3.3V/8MHz
julientiron 0:84fb42fedc5b 20 * VL6180x Breakout Version: 1.0
julientiron 0:84fb42fedc5b 21 *
julientiron 0:84fb42fedc5b 22 * Some settings and initial values come from code written by Kris Winer
julientiron 0:84fb42fedc5b 23 * VL6180X_t3 Basic Example Code
julientiron 0:84fb42fedc5b 24 * by: Kris Winer
julientiron 0:84fb42fedc5b 25 * date: September 1, 2014
julientiron 0:84fb42fedc5b 26 * license: Beerware - Use this code however you'd like. If you
julientiron 0:84fb42fedc5b 27 * find it useful you can buy me a beer some time.
julientiron 0:84fb42fedc5b 28 *
julientiron 0:84fb42fedc5b 29 * This code is beerware. If you see me (or any other SparkFun employee) at the
julientiron 0:84fb42fedc5b 30 * local pub, and you've found our code helpful, please buy us a round!
julientiron 0:84fb42fedc5b 31 *
julientiron 0:84fb42fedc5b 32 * Distributed as-is; no warranty is given.
julientiron 0:84fb42fedc5b 33 */
julientiron 0:84fb42fedc5b 34 #include "mbed.h"
julientiron 0:84fb42fedc5b 35 #ifndef VL6180x_h
julientiron 0:84fb42fedc5b 36 #define VL6180x_h
julientiron 0:84fb42fedc5b 37
julientiron 0:84fb42fedc5b 38 #define VL6180x_FAILURE_RESET -1
julientiron 0:84fb42fedc5b 39
julientiron 0:84fb42fedc5b 40 #define VL6180X_IDENTIFICATION_MODEL_ID 0x0000
julientiron 0:84fb42fedc5b 41 #define VL6180X_IDENTIFICATION_MODEL_REV_MAJOR 0x0001
julientiron 0:84fb42fedc5b 42 #define VL6180X_IDENTIFICATION_MODEL_REV_MINOR 0x0002
julientiron 0:84fb42fedc5b 43 #define VL6180X_IDENTIFICATION_MODULE_REV_MAJOR 0x0003
julientiron 0:84fb42fedc5b 44 #define VL6180X_IDENTIFICATION_MODULE_REV_MINOR 0x0004
julientiron 0:84fb42fedc5b 45 #define VL6180X_IDENTIFICATION_DATE 0x0006 //16bit value
julientiron 0:84fb42fedc5b 46 #define VL6180X_IDENTIFICATION_TIME 0x0008 //16bit value
julientiron 0:84fb42fedc5b 47
julientiron 0:84fb42fedc5b 48 #define VL6180X_SYSTEM_MODE_GPIO0 0x0010
julientiron 0:84fb42fedc5b 49 #define VL6180X_SYSTEM_MODE_GPIO1 0x0011
julientiron 0:84fb42fedc5b 50 #define VL6180X_SYSTEM_HISTORY_CTRL 0x0012
julientiron 0:84fb42fedc5b 51 #define VL6180X_SYSTEM_INTERRUPT_CONFIG_GPIO 0x0014
julientiron 0:84fb42fedc5b 52 #define VL6180X_SYSTEM_INTERRUPT_CLEAR 0x0015
julientiron 0:84fb42fedc5b 53 #define VL6180X_SYSTEM_FRESH_OUT_OF_RESET 0x0016
julientiron 0:84fb42fedc5b 54 #define VL6180X_SYSTEM_GROUPED_PARAMETER_HOLD 0x0017
julientiron 0:84fb42fedc5b 55
julientiron 0:84fb42fedc5b 56 #define VL6180X_SYSRANGE_START 0x0018
julientiron 0:84fb42fedc5b 57 #define VL6180X_SYSRANGE_THRESH_HIGH 0x0019
julientiron 0:84fb42fedc5b 58 #define VL6180X_SYSRANGE_THRESH_LOW 0x001A
julientiron 0:84fb42fedc5b 59 #define VL6180X_SYSRANGE_INTERMEASUREMENT_PERIOD 0x001B
julientiron 0:84fb42fedc5b 60 #define VL6180X_SYSRANGE_MAX_CONVERGENCE_TIME 0x001C
julientiron 0:84fb42fedc5b 61 #define VL6180X_SYSRANGE_CROSSTALK_COMPENSATION_RATE 0x001E
julientiron 0:84fb42fedc5b 62 #define VL6180X_SYSRANGE_CROSSTALK_VALID_HEIGHT 0x0021
julientiron 0:84fb42fedc5b 63 #define VL6180X_SYSRANGE_EARLY_CONVERGENCE_ESTIMATE 0x0022
julientiron 0:84fb42fedc5b 64 #define VL6180X_SYSRANGE_PART_TO_PART_RANGE_OFFSET 0x0024
julientiron 0:84fb42fedc5b 65 #define VL6180X_SYSRANGE_RANGE_IGNORE_VALID_HEIGHT 0x0025
julientiron 0:84fb42fedc5b 66 #define VL6180X_SYSRANGE_RANGE_IGNORE_THRESHOLD 0x0026
julientiron 0:84fb42fedc5b 67 #define VL6180X_SYSRANGE_MAX_AMBIENT_LEVEL_MULT 0x002C
julientiron 0:84fb42fedc5b 68 #define VL6180X_SYSRANGE_RANGE_CHECK_ENABLES 0x002D
julientiron 0:84fb42fedc5b 69 #define VL6180X_SYSRANGE_VHV_RECALIBRATE 0x002E
julientiron 0:84fb42fedc5b 70 #define VL6180X_SYSRANGE_VHV_REPEAT_RATE 0x0031
julientiron 0:84fb42fedc5b 71
julientiron 0:84fb42fedc5b 72 #define VL6180X_SYSALS_START 0x0038
julientiron 0:84fb42fedc5b 73 #define VL6180X_SYSALS_THRESH_HIGH 0x003A
julientiron 0:84fb42fedc5b 74 #define VL6180X_SYSALS_THRESH_LOW 0x003C
julientiron 0:84fb42fedc5b 75 #define VL6180X_SYSALS_INTERMEASUREMENT_PERIOD 0x003E
julientiron 0:84fb42fedc5b 76 #define VL6180X_SYSALS_ANALOGUE_GAIN 0x003F
julientiron 0:84fb42fedc5b 77 #define VL6180X_SYSALS_INTEGRATION_PERIOD 0x0040
julientiron 0:84fb42fedc5b 78
julientiron 0:84fb42fedc5b 79 #define VL6180X_RESULT_RANGE_STATUS 0x004D
julientiron 0:84fb42fedc5b 80 #define VL6180X_RESULT_ALS_STATUS 0x004E
julientiron 0:84fb42fedc5b 81 #define VL6180X_RESULT_INTERRUPT_STATUS_GPIO 0x004F
julientiron 0:84fb42fedc5b 82 #define VL6180X_RESULT_ALS_VAL 0x0050
julientiron 0:84fb42fedc5b 83 #define VL6180X_RESULT_HISTORY_BUFFER 0x0052
julientiron 0:84fb42fedc5b 84 #define VL6180X_RESULT_RANGE_VAL 0x0062
julientiron 0:84fb42fedc5b 85 #define VL6180X_RESULT_RANGE_RAW 0x0064
julientiron 0:84fb42fedc5b 86 #define VL6180X_RESULT_RANGE_RETURN_RATE 0x0066
julientiron 0:84fb42fedc5b 87 #define VL6180X_RESULT_RANGE_REFERENCE_RATE 0x0068
julientiron 0:84fb42fedc5b 88 #define VL6180X_RESULT_RANGE_RETURN_SIGNAL_COUNT 0x006C
julientiron 0:84fb42fedc5b 89 #define VL6180X_RESULT_RANGE_REFERENCE_SIGNAL_COUNT 0x0070
julientiron 0:84fb42fedc5b 90 #define VL6180X_RESULT_RANGE_RETURN_AMB_COUNT 0x0074
julientiron 0:84fb42fedc5b 91 #define VL6180X_RESULT_RANGE_REFERENCE_AMB_COUNT 0x0078
julientiron 0:84fb42fedc5b 92 #define VL6180X_RESULT_RANGE_RETURN_CONV_TIME 0x007C
julientiron 0:84fb42fedc5b 93 #define VL6180X_RESULT_RANGE_REFERENCE_CONV_TIME 0x0080
julientiron 0:84fb42fedc5b 94
julientiron 0:84fb42fedc5b 95 #define VL6180X_READOUT_AVERAGING_SAMPLE_PERIOD 0x010A
julientiron 0:84fb42fedc5b 96 #define VL6180X_FIRMWARE_BOOTUP 0x0119
julientiron 0:84fb42fedc5b 97 #define VL6180X_FIRMWARE_RESULT_SCALER 0x0120
julientiron 0:84fb42fedc5b 98 #define VL6180X_I2C_SLAVE_DEVICE_ADDRESS 0x0212
julientiron 0:84fb42fedc5b 99 #define VL6180X_INTERLEAVED_MODE_ENABLE 0x02A3
julientiron 0:84fb42fedc5b 100
julientiron 0:84fb42fedc5b 101 /**
julientiron 0:84fb42fedc5b 102 * gain settings for ALS
julientiron 0:84fb42fedc5b 103 *Data sheet shows gain values as binary list
julientiron 0:84fb42fedc5b 104 */
julientiron 0:84fb42fedc5b 105 enum vl6180x_als_gain {
julientiron 0:84fb42fedc5b 106
julientiron 0:84fb42fedc5b 107 GAIN_20 = 0, // Actual ALS Gain of 20
julientiron 0:84fb42fedc5b 108 GAIN_10, // Actual ALS Gain of 10.32
julientiron 0:84fb42fedc5b 109 GAIN_5, // Actual ALS Gain of 5.21
julientiron 0:84fb42fedc5b 110 GAIN_2_5, // Actual ALS Gain of 2.60
julientiron 0:84fb42fedc5b 111 GAIN_1_67, // Actual ALS Gain of 1.72
julientiron 0:84fb42fedc5b 112 GAIN_1_25, // Actual ALS Gain of 1.28
julientiron 0:84fb42fedc5b 113 GAIN_1 , // Actual ALS Gain of 1.01
julientiron 0:84fb42fedc5b 114 GAIN_40, // Actual ALS Gain of 40
julientiron 0:84fb42fedc5b 115
julientiron 0:84fb42fedc5b 116 };
julientiron 0:84fb42fedc5b 117 /**
julientiron 0:84fb42fedc5b 118 * VL6180xIdentification
julientiron 0:84fb42fedc5b 119 * @brief structure to hold module identification
julientiron 0:84fb42fedc5b 120 *
julientiron 0:84fb42fedc5b 121 * @param idModel Model number
julientiron 0:84fb42fedc5b 122 * @param idModelRevMajor Major revision
julientiron 0:84fb42fedc5b 123 * @param idModelRevMinor Minor revision
julientiron 0:84fb42fedc5b 124 * @param idModuleRevMajor Module Major revision
julientiron 0:84fb42fedc5b 125 * @param idModuleRevMinor Module Minor revision
julientiron 0:84fb42fedc5b 126 * @param idDate Date of manufacture
julientiron 0:84fb42fedc5b 127 * @param idTime Seconds after midnight manufacture
julientiron 0:84fb42fedc5b 128 */
julientiron 0:84fb42fedc5b 129 struct VL6180xIdentification {
julientiron 0:84fb42fedc5b 130 uint8_t idModel;
julientiron 0:84fb42fedc5b 131 uint8_t idModelRevMajor;
julientiron 0:84fb42fedc5b 132 uint8_t idModelRevMinor;
julientiron 0:84fb42fedc5b 133 uint8_t idModuleRevMajor;
julientiron 0:84fb42fedc5b 134 uint8_t idModuleRevMinor;
julientiron 0:84fb42fedc5b 135 uint16_t idDate;
julientiron 0:84fb42fedc5b 136 uint16_t idTime;
julientiron 0:84fb42fedc5b 137 };
julientiron 0:84fb42fedc5b 138 /**
julientiron 0:84fb42fedc5b 139 * VL6180x tof/als sensor example
julientiron 0:84fb42fedc5b 140 *
julientiron 0:84fb42fedc5b 141 * @code
julientiron 0:84fb42fedc5b 142 #include "mbed.h"
julientiron 0:84fb42fedc5b 143 #include <VL6180x.h>
julientiron 0:84fb42fedc5b 144
julientiron 0:84fb42fedc5b 145 const float GAIN_1 = 1.01; // Actual ALS Gain of 1.01
julientiron 0:84fb42fedc5b 146 const float GAIN_1_25 = 1.28; // Actual ALS Gain of 1.28
julientiron 0:84fb42fedc5b 147 const float GAIN_1_67 = 1.72; // Actual ALS Gain of 1.72
julientiron 0:84fb42fedc5b 148 const float GAIN_2_5 = 2.6; // Actual ALS Gain of 2.60
julientiron 0:84fb42fedc5b 149 const float GAIN_5 = 5.21; // Actual ALS Gain of 5.21
julientiron 0:84fb42fedc5b 150 const float GAIN_10 = 10.32; // Actual ALS Gain of 10.32
julientiron 0:84fb42fedc5b 151 const float GAIN_20 = 20; // Actual ALS Gain of 20
julientiron 0:84fb42fedc5b 152 const float GAIN_40 = 40; // Actual ALS Gain of 40
julientiron 0:84fb42fedc5b 153
julientiron 0:84fb42fedc5b 154
julientiron 0:84fb42fedc5b 155 #define VL6180X_ADDRESS 0x29
julientiron 0:84fb42fedc5b 156
julientiron 0:84fb42fedc5b 157 VL6180xIdentification identification;
julientiron 0:84fb42fedc5b 158 // mbed uses 8bit addresses shift address by 1 bit left
julientiron 0:84fb42fedc5b 159 VL6180x sensor(D14, D15, VL6180X_ADDRESS<<1);
julientiron 0:84fb42fedc5b 160
julientiron 0:84fb42fedc5b 161 void printIdentification(struct VL6180xIdentification *temp){
julientiron 0:84fb42fedc5b 162 printf("Model ID = ");
julientiron 0:84fb42fedc5b 163 printf("%d\n",temp->idModel);
julientiron 0:84fb42fedc5b 164
julientiron 0:84fb42fedc5b 165 printf("Model Rev = ");
julientiron 0:84fb42fedc5b 166 printf("%d",temp->idModelRevMajor);
julientiron 0:84fb42fedc5b 167 printf(".");
julientiron 0:84fb42fedc5b 168 printf("%d\n",temp->idModelRevMinor);
julientiron 0:84fb42fedc5b 169
julientiron 0:84fb42fedc5b 170 printf("Module Rev = ");
julientiron 0:84fb42fedc5b 171 printf("%d",temp->idModuleRevMajor);
julientiron 0:84fb42fedc5b 172 printf(".");
julientiron 0:84fb42fedc5b 173 printf("%d\n",temp->idModuleRevMinor);
julientiron 0:84fb42fedc5b 174
julientiron 0:84fb42fedc5b 175 printf("Manufacture Date = ");
julientiron 0:84fb42fedc5b 176 printf("%d",((temp->idDate >> 3) & 0x001F));
julientiron 0:84fb42fedc5b 177 printf("/");
julientiron 0:84fb42fedc5b 178 printf("%d",((temp->idDate >> 8) & 0x000F));
julientiron 0:84fb42fedc5b 179 printf("/1");
julientiron 0:84fb42fedc5b 180 printf("%d\n",((temp->idDate >> 12) & 0x000F));
julientiron 0:84fb42fedc5b 181 printf(" Phase: ");
julientiron 0:84fb42fedc5b 182 printf("%d\n",(temp->idDate & 0x0007));
julientiron 0:84fb42fedc5b 183
julientiron 0:84fb42fedc5b 184 printf("Manufacture Time (s)= ");
julientiron 0:84fb42fedc5b 185 printf("%d\n",(temp->idTime * 2));
julientiron 0:84fb42fedc5b 186 printf("\n\n");
julientiron 0:84fb42fedc5b 187 }
julientiron 0:84fb42fedc5b 188 int main() {
julientiron 0:84fb42fedc5b 189
julientiron 0:84fb42fedc5b 190 wait_ms(100); // delay .1s
julientiron 0:84fb42fedc5b 191
julientiron 0:84fb42fedc5b 192 sensor.getIdentification(&identification); // Retrieve manufacture info from device memory
julientiron 0:84fb42fedc5b 193 printIdentification(&identification); // Helper function to print all the Module information
julientiron 0:84fb42fedc5b 194
julientiron 0:84fb42fedc5b 195 if(sensor.VL6180xInit() != 0){
julientiron 0:84fb42fedc5b 196 printf("FAILED TO INITALIZE\n"); //Initialize device and check for errors
julientiron 0:84fb42fedc5b 197 };
julientiron 0:84fb42fedc5b 198
julientiron 0:84fb42fedc5b 199 sensor.VL6180xDefautSettings(); //Load default settings to get started.
julientiron 0:84fb42fedc5b 200
julientiron 0:84fb42fedc5b 201 wait_ms(1000); // delay 1s
julientiron 0:84fb42fedc5b 202
julientiron 0:84fb42fedc5b 203
julientiron 0:84fb42fedc5b 204
julientiron 0:84fb42fedc5b 205 while(1) {
julientiron 0:84fb42fedc5b 206 //Get Ambient Light level and report in LUX
julientiron 0:84fb42fedc5b 207 printf("Ambient Light Level (Lux) = ");
julientiron 0:84fb42fedc5b 208
julientiron 0:84fb42fedc5b 209 //Input GAIN for light levels,
julientiron 0:84fb42fedc5b 210 // GAIN_20 // Actual ALS Gain of 20
julientiron 0:84fb42fedc5b 211 // GAIN_10 // Actual ALS Gain of 10.32
julientiron 0:84fb42fedc5b 212 // GAIN_5 // Actual ALS Gain of 5.21
julientiron 0:84fb42fedc5b 213 // GAIN_2_5 // Actual ALS Gain of 2.60
julientiron 0:84fb42fedc5b 214 // GAIN_1_67 // Actual ALS Gain of 1.72
julientiron 0:84fb42fedc5b 215 // GAIN_1_25 // Actual ALS Gain of 1.28
julientiron 0:84fb42fedc5b 216 // GAIN_1 // Actual ALS Gain of 1.01
julientiron 0:84fb42fedc5b 217 // GAIN_40 // Actual ALS Gain of 40
julientiron 0:84fb42fedc5b 218
julientiron 0:84fb42fedc5b 219 printf("%f\n",sensor.getAmbientLight(GAIN_1) );
julientiron 0:84fb42fedc5b 220
julientiron 0:84fb42fedc5b 221 //Get Distance and report in mm
julientiron 0:84fb42fedc5b 222 printf("Distance measured (mm) = ");
julientiron 0:84fb42fedc5b 223 printf("%d\n", sensor.getDistance() );
julientiron 0:84fb42fedc5b 224
julientiron 0:84fb42fedc5b 225 wait_ms(500);
julientiron 0:84fb42fedc5b 226 }
julientiron 0:84fb42fedc5b 227 }
julientiron 0:84fb42fedc5b 228 * @endcode
julientiron 0:84fb42fedc5b 229 */
julientiron 0:84fb42fedc5b 230 class VL6180x
julientiron 0:84fb42fedc5b 231 {
julientiron 0:84fb42fedc5b 232 public:
julientiron 0:84fb42fedc5b 233 /**
julientiron 0:84fb42fedc5b 234 * VL6180x constructor
julientiron 0:84fb42fedc5b 235 *
julientiron 0:84fb42fedc5b 236 * @param sda SDA pin
julientiron 0:84fb42fedc5b 237 * @param sdl SCL pin
julientiron 0:84fb42fedc5b 238 * @param addr addr of the I2C peripheral
julientiron 0:84fb42fedc5b 239 */
julientiron 0:84fb42fedc5b 240 VL6180x(PinName sda, PinName scl, uint8_t addr);
julientiron 0:84fb42fedc5b 241 /**
julientiron 0:84fb42fedc5b 242 * VL6180x destructor
julientiron 0:84fb42fedc5b 243 */
julientiron 0:84fb42fedc5b 244 ~VL6180x();
julientiron 0:84fb42fedc5b 245 /**
julientiron 0:84fb42fedc5b 246 * Send mandatory settings as stated in ST datasheet.
julientiron 0:84fb42fedc5b 247 * http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/DM00122600.pdf (Section 1.3)
julientiron 0:84fb42fedc5b 248 * @returns 0 if ok
julientiron 0:84fb42fedc5b 249 * @returns -1 on error*/
julientiron 0:84fb42fedc5b 250 int VL6180xInit(void);
julientiron 0:84fb42fedc5b 251 /**
julientiron 0:84fb42fedc5b 252 * Use default settings from ST data sheet section 9.
julientiron 0:84fb42fedc5b 253 *
julientiron 0:84fb42fedc5b 254 * http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/DM00122600.pdf
julientiron 0:84fb42fedc5b 255 */
julientiron 0:84fb42fedc5b 256 void VL6180xDefautSettings(void);
julientiron 0:84fb42fedc5b 257 /**
julientiron 0:84fb42fedc5b 258 * Get Range distance in (mm)
julientiron 0:84fb42fedc5b 259 * @returns TOF distance in mm
julientiron 0:84fb42fedc5b 260 */
julientiron 0:84fb42fedc5b 261 uint8_t getDistance();
julientiron 0:84fb42fedc5b 262 /**
julientiron 0:84fb42fedc5b 263 * Get ALS level in Lux
julientiron 0:84fb42fedc5b 264 * @param vl6180x_als_gain gain setting for sensor
julientiron 0:84fb42fedc5b 265 * @param sdl SCL pin
julientiron 0:84fb42fedc5b 266 * @param addr addr of the I2C peripheral
julientiron 0:84fb42fedc5b 267 * @returns light level in Lux
julientiron 0:84fb42fedc5b 268 */
julientiron 0:84fb42fedc5b 269 float getAmbientLight(vl6180x_als_gain VL6180X_ALS_GAIN);
julientiron 0:84fb42fedc5b 270 /**
julientiron 0:84fb42fedc5b 271 * Load structure provided by the user with identification info
julientiron 0:84fb42fedc5b 272 * Structure example:
julientiron 0:84fb42fedc5b 273 * struct VL6180xIdentification
julientiron 0:84fb42fedc5b 274 */
julientiron 0:84fb42fedc5b 275 void getIdentification(struct VL6180xIdentification *temp);
julientiron 0:84fb42fedc5b 276
julientiron 0:84fb42fedc5b 277 /**
julientiron 0:84fb42fedc5b 278 * Change the default address of the device to allow multiple
julientiron 0:84fb42fedc5b 279 * sensors on the bus. Can use up to 127 sensors. New address
julientiron 0:84fb42fedc5b 280 * is saved in non-volatile device memory.
julientiron 0:84fb42fedc5b 281 * @param old_address current address
julientiron 0:84fb42fedc5b 282 * @param new_address desired new address
julientiron 0:84fb42fedc5b 283 * @returns new address
julientiron 0:84fb42fedc5b 284 */
julientiron 0:84fb42fedc5b 285 uint8_t changeAddress(uint8_t old_address, uint8_t new_address);
julientiron 0:84fb42fedc5b 286
julientiron 0:84fb42fedc5b 287
julientiron 0:84fb42fedc5b 288 private:
julientiron 0:84fb42fedc5b 289 //Store address given when the class is initialized.
julientiron 0:84fb42fedc5b 290 //This value can be changed by the changeAddress() function
julientiron 0:84fb42fedc5b 291 I2C m_i2c;
julientiron 0:84fb42fedc5b 292 int m_addr;
julientiron 0:84fb42fedc5b 293 /**
julientiron 0:84fb42fedc5b 294 * read 8 bit register
julientiron 0:84fb42fedc5b 295 * @param registerAddr address for register
julientiron 0:84fb42fedc5b 296 * @returns contents of register
julientiron 0:84fb42fedc5b 297 */
julientiron 0:84fb42fedc5b 298 uint8_t VL6180x_getRegister(uint16_t registerAddr);
julientiron 0:84fb42fedc5b 299 /**
julientiron 0:84fb42fedc5b 300 * read 16 bit register
julientiron 0:84fb42fedc5b 301 * @param registerAddr address for register
julientiron 0:84fb42fedc5b 302 * @param returns contents of register
julientiron 0:84fb42fedc5b 303 */
julientiron 0:84fb42fedc5b 304 uint16_t VL6180x_getRegister16bit(uint16_t registerAddr);
julientiron 0:84fb42fedc5b 305 /**
julientiron 0:84fb42fedc5b 306 * write 8 bit register
julientiron 0:84fb42fedc5b 307 * @param registerAddr address for register
julientiron 0:84fb42fedc5b 308 * @returns ERROR
julientiron 0:84fb42fedc5b 309 */
julientiron 0:84fb42fedc5b 310 void VL6180x_setRegister(uint16_t registerAddr, uint8_t data);
julientiron 0:84fb42fedc5b 311 /**
julientiron 0:84fb42fedc5b 312 * write 16 bit register
julientiron 0:84fb42fedc5b 313 * @param registerAddr address for register
julientiron 0:84fb42fedc5b 314 * @returns ERROR
julientiron 0:84fb42fedc5b 315 */
julientiron 0:84fb42fedc5b 316 void VL6180x_setRegister16bit(uint16_t registerAddr, uint16_t data);
julientiron 0:84fb42fedc5b 317 };
julientiron 0:84fb42fedc5b 318
julientiron 0:84fb42fedc5b 319 #endif