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.
VL53L0X.h
00001 #ifndef VL53L0X_h 00002 #define VL53L0X_h 00003 #include "mbed.h" 00004 //#include "millis.h" 00005 class VL53L0X 00006 { 00007 public: 00008 // register addresses from API vl53l0x_device.h (ordered as listed there) 00009 enum regAddr 00010 { 00011 SYSRANGE_START = 0x00, 00012 00013 SYSTEM_THRESH_HIGH = 0x0C, 00014 SYSTEM_THRESH_LOW = 0x0E, 00015 00016 SYSTEM_SEQUENCE_CONFIG = 0x01, 00017 SYSTEM_RANGE_CONFIG = 0x09, 00018 SYSTEM_INTERMEASUREMENT_PERIOD = 0x04, 00019 00020 SYSTEM_INTERRUPT_CONFIG_GPIO = 0x0A, 00021 00022 GPIO_HV_MUX_ACTIVE_HIGH = 0x84, 00023 00024 SYSTEM_INTERRUPT_CLEAR = 0x0B, 00025 00026 RESULT_INTERRUPT_STATUS = 0x13, 00027 RESULT_RANGE_STATUS = 0x14, 00028 00029 RESULT_CORE_AMBIENT_WINDOW_EVENTS_RTN = 0xBC, 00030 RESULT_CORE_RANGING_TOTAL_EVENTS_RTN = 0xC0, 00031 RESULT_CORE_AMBIENT_WINDOW_EVENTS_REF = 0xD0, 00032 RESULT_CORE_RANGING_TOTAL_EVENTS_REF = 0xD4, 00033 RESULT_PEAK_SIGNAL_RATE_REF = 0xB6, 00034 00035 ALGO_PART_TO_PART_RANGE_OFFSET_MM = 0x28, 00036 00037 I2C_SLAVE_DEVICE_ADDRESS = 0x8A, 00038 00039 MSRC_CONFIG_CONTROL = 0x60, 00040 00041 PRE_RANGE_CONFIG_MIN_SNR = 0x27, 00042 PRE_RANGE_CONFIG_VALID_PHASE_LOW = 0x56, 00043 PRE_RANGE_CONFIG_VALID_PHASE_HIGH = 0x57, 00044 PRE_RANGE_MIN_COUNT_RATE_RTN_LIMIT = 0x64, 00045 00046 FINAL_RANGE_CONFIG_MIN_SNR = 0x67, 00047 FINAL_RANGE_CONFIG_VALID_PHASE_LOW = 0x47, 00048 FINAL_RANGE_CONFIG_VALID_PHASE_HIGH = 0x48, 00049 FINAL_RANGE_CONFIG_MIN_COUNT_RATE_RTN_LIMIT = 0x44, 00050 00051 PRE_RANGE_CONFIG_SIGMA_THRESH_HI = 0x61, 00052 PRE_RANGE_CONFIG_SIGMA_THRESH_LO = 0x62, 00053 00054 PRE_RANGE_CONFIG_VCSEL_PERIOD = 0x50, 00055 PRE_RANGE_CONFIG_TIMEOUT_MACROP_HI = 0x51, 00056 PRE_RANGE_CONFIG_TIMEOUT_MACROP_LO = 0x52, 00057 00058 SYSTEM_HISTOGRAM_BIN = 0x81, 00059 HISTOGRAM_CONFIG_INITIAL_PHASE_SELECT = 0x33, 00060 HISTOGRAM_CONFIG_READOUT_CTRL = 0x55, 00061 00062 FINAL_RANGE_CONFIG_VCSEL_PERIOD = 0x70, 00063 FINAL_RANGE_CONFIG_TIMEOUT_MACROP_HI = 0x71, 00064 FINAL_RANGE_CONFIG_TIMEOUT_MACROP_LO = 0x72, 00065 CROSSTALK_COMPENSATION_PEAK_RATE_MCPS = 0x20, 00066 00067 MSRC_CONFIG_TIMEOUT_MACROP = 0x46, 00068 00069 SOFT_RESET_GO2_SOFT_RESET_N = 0xBF, 00070 IDENTIFICATION_MODEL_ID = 0xC0, 00071 IDENTIFICATION_REVISION_ID = 0xC2, 00072 00073 OSC_CALIBRATE_VAL = 0xF8, 00074 00075 GLOBAL_CONFIG_VCSEL_WIDTH = 0x32, 00076 GLOBAL_CONFIG_SPAD_ENABLES_REF_0 = 0xB0, 00077 GLOBAL_CONFIG_SPAD_ENABLES_REF_1 = 0xB1, 00078 GLOBAL_CONFIG_SPAD_ENABLES_REF_2 = 0xB2, 00079 GLOBAL_CONFIG_SPAD_ENABLES_REF_3 = 0xB3, 00080 GLOBAL_CONFIG_SPAD_ENABLES_REF_4 = 0xB4, 00081 GLOBAL_CONFIG_SPAD_ENABLES_REF_5 = 0xB5, 00082 00083 GLOBAL_CONFIG_REF_EN_START_SELECT = 0xB6, 00084 DYNAMIC_SPAD_NUM_REQUESTED_REF_SPAD = 0x4E, 00085 DYNAMIC_SPAD_REF_EN_START_OFFSET = 0x4F, 00086 POWER_MANAGEMENT_GO1_POWER_FORCE = 0x80, 00087 00088 VHV_CONFIG_PAD_SCL_SDA__EXTSUP_HV = 0x89, 00089 00090 ALGO_PHASECAL_LIM = 0x30, 00091 ALGO_PHASECAL_CONFIG_TIMEOUT = 0x30, 00092 }; 00093 00094 enum vcselPeriodType { VcselPeriodPreRange, VcselPeriodFinalRange }; 00095 00096 uint8_t last_status; // status of last I2C transmission 00097 00098 VL53L0X(PinName sda_pin, PinName scl_pin); 00099 00100 void setAddress(uint8_t new_addr); 00101 inline uint8_t getAddress(void) { return address; } 00102 00103 bool init(bool io_2v8 = true); 00104 00105 00106 00107 bool setSignalRateLimit(float limit_Mcps); 00108 float getSignalRateLimit(void); 00109 00110 bool setMeasurementTimingBudget(uint32_t budget_us); 00111 uint32_t getMeasurementTimingBudget(void); 00112 00113 bool setVcselPulsePeriod(vcselPeriodType type, uint8_t period_pclks); 00114 uint8_t getVcselPulsePeriod(vcselPeriodType type); 00115 00116 void startContinuous(uint32_t period_ms = 0); 00117 void stopContinuous(void); 00118 uint16_t readRangeContinuousMillimeters(void); 00119 uint16_t readRangeSingleMillimeters(void); 00120 00121 inline void setTimeout(uint16_t timeout) { io_timeout = timeout; } 00122 inline uint16_t getTimeout(void) { return io_timeout; } 00123 bool timeoutOccurred(void); 00124 00125 private: 00126 // TCC: Target CentreCheck 00127 // MSRC: Minimum Signal Rate Check 00128 // DSS: Dynamic Spad Selection 00129 I2C m_i2c; 00130 int m_addr; 00131 00132 void writeReg(uint8_t reg, uint8_t value); 00133 void writeReg16Bit(uint8_t reg, uint16_t value); 00134 void writeReg32Bit(uint8_t reg, uint32_t value); 00135 uint8_t readReg(uint8_t reg); 00136 uint16_t readReg16Bit(uint8_t reg); 00137 uint32_t readReg32Bit(uint8_t reg); 00138 00139 void writeMulti(uint8_t reg, char src[], uint8_t count); 00140 void readMulti(uint8_t reg, char dst[], uint8_t count); 00141 00142 struct SequenceStepEnables 00143 { 00144 bool tcc, msrc, dss, pre_range, final_range; 00145 }; 00146 00147 struct SequenceStepTimeouts 00148 { 00149 uint16_t pre_range_vcsel_period_pclks, final_range_vcsel_period_pclks; 00150 00151 uint16_t msrc_dss_tcc_mclks, pre_range_mclks, final_range_mclks; 00152 uint32_t msrc_dss_tcc_us, pre_range_us, final_range_us; 00153 }; 00154 00155 uint8_t address; 00156 uint16_t io_timeout; 00157 bool did_timeout; 00158 uint16_t timeout_start_ms; 00159 00160 uint8_t stop_variable; // read by init and used when starting measurement; is StopVariable field of VL53L0X_DevData_t structure in API 00161 uint32_t measurement_timing_budget_us; 00162 00163 bool getSpadInfo(uint8_t * count, bool * type_is_aperture); 00164 00165 void getSequenceStepEnables(SequenceStepEnables * enables); 00166 void getSequenceStepTimeouts(SequenceStepEnables const * enables, SequenceStepTimeouts * timeouts); 00167 00168 bool performSingleRefCalibration(uint8_t vhv_init_byte); 00169 00170 static uint16_t decodeTimeout(uint16_t value); 00171 static uint16_t encodeTimeout(uint16_t timeout_mclks); 00172 static uint32_t timeoutMclksToMicroseconds(uint16_t timeout_period_mclks, uint8_t vcsel_period_pclks); 00173 static uint32_t timeoutMicrosecondsToMclks(uint32_t timeout_period_us, uint8_t vcsel_period_pclks); 00174 }; 00175 00176 #endif
Generated on Fri Jul 15 2022 06:34:21 by
1.7.2