Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
VL6180X.h
00001 #ifndef VL6180X_h 00002 #define VL6180X_h 00003 00004 #include "mbed.h" 00005 00006 class VL6180X 00007 { 00008 public: 00009 // register addresses 00010 enum regAddr 00011 { 00012 IDENTIFICATION__MODEL_ID = 0x000, 00013 IDENTIFICATION__MODEL_REV_MAJOR = 0x001, 00014 IDENTIFICATION__MODEL_REV_MINOR = 0x002, 00015 IDENTIFICATION__MODULE_REV_MAJOR = 0x003, 00016 IDENTIFICATION__MODULE_REV_MINOR = 0x004, 00017 IDENTIFICATION__DATE_HI = 0x006, 00018 IDENTIFICATION__DATE_LO = 0x007, 00019 IDENTIFICATION__TIME = 0x008, // 16-bit 00020 00021 SYSTEM__MODE_GPIO0 = 0x010, 00022 SYSTEM__MODE_GPIO1 = 0x011, 00023 SYSTEM__HISTORY_CTRL = 0x012, 00024 SYSTEM__INTERRUPT_CONFIG_GPIO = 0x014, 00025 SYSTEM__INTERRUPT_CLEAR = 0x015, 00026 SYSTEM__FRESH_OUT_OF_RESET = 0x016, 00027 SYSTEM__GROUPED_PARAMETER_HOLD = 0x017, 00028 00029 SYSRANGE__START = 0x018, 00030 SYSRANGE__THRESH_HIGH = 0x019, 00031 SYSRANGE__THRESH_LOW = 0x01A, 00032 SYSRANGE__INTERMEASUREMENT_PERIOD = 0x01B, 00033 SYSRANGE__MAX_CONVERGENCE_TIME = 0x01C, 00034 SYSRANGE__CROSSTALK_COMPENSATION_RATE = 0x01E, // 16-bit 00035 SYSRANGE__CROSSTALK_VALID_HEIGHT = 0x021, 00036 SYSRANGE__EARLY_CONVERGENCE_ESTIMATE = 0x022, // 16-bit 00037 SYSRANGE__PART_TO_PART_RANGE_OFFSET = 0x024, 00038 SYSRANGE__RANGE_IGNORE_VALID_HEIGHT = 0x025, 00039 SYSRANGE__RANGE_IGNORE_THRESHOLD = 0x026, // 16-bit 00040 SYSRANGE__MAX_AMBIENT_LEVEL_MULT = 0x02C, 00041 SYSRANGE__RANGE_CHECK_ENABLES = 0x02D, 00042 SYSRANGE__VHV_RECALIBRATE = 0x02E, 00043 SYSRANGE__VHV_REPEAT_RATE = 0x031, 00044 00045 SYSALS__START = 0x038, 00046 SYSALS__THRESH_HIGH = 0x03A, 00047 SYSALS__THRESH_LOW = 0x03C, 00048 SYSALS__INTERMEASUREMENT_PERIOD = 0x03E, 00049 SYSALS__ANALOGUE_GAIN = 0x03F, 00050 SYSALS__INTEGRATION_PERIOD = 0x040, 00051 00052 RESULT__RANGE_STATUS = 0x04D, 00053 RESULT__ALS_STATUS = 0x04E, 00054 RESULT__INTERRUPT_STATUS_GPIO = 0x04F, 00055 RESULT__ALS_VAL = 0x050, // 16-bit 00056 RESULT__HISTORY_BUFFER_0 = 0x052, // 16-bit 00057 RESULT__HISTORY_BUFFER_1 = 0x054, // 16-bit 00058 RESULT__HISTORY_BUFFER_2 = 0x056, // 16-bit 00059 RESULT__HISTORY_BUFFER_3 = 0x058, // 16-bit 00060 RESULT__HISTORY_BUFFER_4 = 0x05A, // 16-bit 00061 RESULT__HISTORY_BUFFER_5 = 0x05C, // 16-bit 00062 RESULT__HISTORY_BUFFER_6 = 0x05E, // 16-bit 00063 RESULT__HISTORY_BUFFER_7 = 0x060, // 16-bit 00064 RESULT__RANGE_VAL = 0x062, 00065 RESULT__RANGE_RAW = 0x064, 00066 RESULT__RANGE_RETURN_RATE = 0x066, // 16-bit 00067 RESULT__RANGE_REFERENCE_RATE = 0x068, // 16-bit 00068 RESULT__RANGE_RETURN_SIGNAL_COUNT = 0x06C, // 32-bit 00069 RESULT__RANGE_REFERENCE_SIGNAL_COUNT = 0x070, // 32-bit 00070 RESULT__RANGE_RETURN_AMB_COUNT = 0x074, // 32-bit 00071 RESULT__RANGE_REFERENCE_AMB_COUNT = 0x078, // 32-bit 00072 RESULT__RANGE_RETURN_CONV_TIME = 0x07C, // 32-bit 00073 RESULT__RANGE_REFERENCE_CONV_TIME = 0x080, // 32-bit 00074 00075 RANGE_SCALER = 0x096, // 16-bit - see STSW-IMG003 core/inc/vl6180x_def.h 00076 00077 READOUT__AVERAGING_SAMPLE_PERIOD = 0x10A, 00078 FIRMWARE__BOOTUP = 0x119, 00079 FIRMWARE__RESULT_SCALER = 0x120, 00080 I2C_SLAVE__DEVICE_ADDRESS = 0x212, 00081 INTERLEAVED_MODE__ENABLE = 0x2A3, 00082 }; 00083 00084 uint8_t last_status; // status of last I2C transmission 00085 00086 VL6180X(I2C *_i2c); 00087 00088 /** 00089 * @brief Read device's ID. 00090 * @return [device ID] 0x64. 00091 */ 00092 uint8_t readID() 00093 { 00094 return readReg(IDENTIFICATION__MODEL_ID); 00095 } 00096 00097 void setAddress(uint8_t new_addr); 00098 00099 void init(void); 00100 00101 void configureDefault(void); 00102 00103 void writeReg(uint16_t reg, uint8_t value); 00104 void writeReg16Bit(uint16_t reg, uint16_t value); 00105 void writeReg32Bit(uint16_t reg, uint32_t value); 00106 uint8_t readReg(uint16_t reg); 00107 uint16_t readReg16Bit(uint16_t reg); 00108 uint32_t readReg32Bit(uint16_t reg); 00109 00110 uint32_t millis() 00111 { 00112 return 2; 00113 } 00114 00115 void setScaling(uint8_t new_scaling); 00116 inline uint8_t getScaling(void) { return scaling; } 00117 00118 uint8_t readRangeSingle(void); 00119 inline uint16_t readRangeSingleMillimeters(void) { return (uint16_t)scaling * readRangeSingle(); } 00120 uint16_t readAmbientSingle(void); 00121 00122 void startRangeContinuous(uint16_t period = 100); 00123 void startAmbientContinuous(uint16_t period = 500); 00124 void startInterleavedContinuous(uint16_t period = 500); 00125 void stopContinuous(); 00126 00127 uint8_t readRangeContinuous(void); 00128 inline uint16_t readRangeContinuousMillimeters(void) { return (uint16_t)scaling * readRangeContinuous(); } 00129 uint16_t readAmbientContinuous(void); 00130 00131 inline void setTimeout(uint16_t timeout) { io_timeout = timeout; } 00132 inline uint16_t getTimeout(void) { return io_timeout; } 00133 bool timeoutOccurred(void); 00134 00135 private: 00136 I2C *i2c; 00137 uint8_t address; 00138 uint8_t scaling; 00139 uint8_t ptp_offset; 00140 uint16_t io_timeout; 00141 bool did_timeout; 00142 }; 00143 00144 #endif 00145 00146 00147 00148
Generated on Tue Jul 12 2022 21:49:23 by
