Thundersoft
/
VL6180XA1_for_TT_Mxx
Creating a project about VL6180XA1 for TT_Mxx
VL6180XA1/VL6180X/VL6180X.h
- Committer:
- ThunderSoft
- Date:
- 2019-04-26
- Revision:
- 3:7a97a01bad5e
- Parent:
- 0:293917667c17
File content as of revision 3:7a97a01bad5e:
#ifndef VL6180X_h #define VL6180X_h #include "mbed.h" class VL6180X { public: // register addresses enum regAddr { IDENTIFICATION__MODEL_ID = 0x000, IDENTIFICATION__MODEL_REV_MAJOR = 0x001, IDENTIFICATION__MODEL_REV_MINOR = 0x002, IDENTIFICATION__MODULE_REV_MAJOR = 0x003, IDENTIFICATION__MODULE_REV_MINOR = 0x004, IDENTIFICATION__DATE_HI = 0x006, IDENTIFICATION__DATE_LO = 0x007, IDENTIFICATION__TIME = 0x008, // 16-bit SYSTEM__MODE_GPIO0 = 0x010, SYSTEM__MODE_GPIO1 = 0x011, SYSTEM__HISTORY_CTRL = 0x012, SYSTEM__INTERRUPT_CONFIG_GPIO = 0x014, SYSTEM__INTERRUPT_CLEAR = 0x015, SYSTEM__FRESH_OUT_OF_RESET = 0x016, SYSTEM__GROUPED_PARAMETER_HOLD = 0x017, SYSRANGE__START = 0x018, SYSRANGE__THRESH_HIGH = 0x019, SYSRANGE__THRESH_LOW = 0x01A, SYSRANGE__INTERMEASUREMENT_PERIOD = 0x01B, SYSRANGE__MAX_CONVERGENCE_TIME = 0x01C, SYSRANGE__CROSSTALK_COMPENSATION_RATE = 0x01E, // 16-bit SYSRANGE__CROSSTALK_VALID_HEIGHT = 0x021, SYSRANGE__EARLY_CONVERGENCE_ESTIMATE = 0x022, // 16-bit SYSRANGE__PART_TO_PART_RANGE_OFFSET = 0x024, SYSRANGE__RANGE_IGNORE_VALID_HEIGHT = 0x025, SYSRANGE__RANGE_IGNORE_THRESHOLD = 0x026, // 16-bit SYSRANGE__MAX_AMBIENT_LEVEL_MULT = 0x02C, SYSRANGE__RANGE_CHECK_ENABLES = 0x02D, SYSRANGE__VHV_RECALIBRATE = 0x02E, SYSRANGE__VHV_REPEAT_RATE = 0x031, SYSALS__START = 0x038, SYSALS__THRESH_HIGH = 0x03A, SYSALS__THRESH_LOW = 0x03C, SYSALS__INTERMEASUREMENT_PERIOD = 0x03E, SYSALS__ANALOGUE_GAIN = 0x03F, SYSALS__INTEGRATION_PERIOD = 0x040, RESULT__RANGE_STATUS = 0x04D, RESULT__ALS_STATUS = 0x04E, RESULT__INTERRUPT_STATUS_GPIO = 0x04F, RESULT__ALS_VAL = 0x050, // 16-bit RESULT__HISTORY_BUFFER_0 = 0x052, // 16-bit RESULT__HISTORY_BUFFER_1 = 0x054, // 16-bit RESULT__HISTORY_BUFFER_2 = 0x056, // 16-bit RESULT__HISTORY_BUFFER_3 = 0x058, // 16-bit RESULT__HISTORY_BUFFER_4 = 0x05A, // 16-bit RESULT__HISTORY_BUFFER_5 = 0x05C, // 16-bit RESULT__HISTORY_BUFFER_6 = 0x05E, // 16-bit RESULT__HISTORY_BUFFER_7 = 0x060, // 16-bit RESULT__RANGE_VAL = 0x062, RESULT__RANGE_RAW = 0x064, RESULT__RANGE_RETURN_RATE = 0x066, // 16-bit RESULT__RANGE_REFERENCE_RATE = 0x068, // 16-bit RESULT__RANGE_RETURN_SIGNAL_COUNT = 0x06C, // 32-bit RESULT__RANGE_REFERENCE_SIGNAL_COUNT = 0x070, // 32-bit RESULT__RANGE_RETURN_AMB_COUNT = 0x074, // 32-bit RESULT__RANGE_REFERENCE_AMB_COUNT = 0x078, // 32-bit RESULT__RANGE_RETURN_CONV_TIME = 0x07C, // 32-bit RESULT__RANGE_REFERENCE_CONV_TIME = 0x080, // 32-bit RANGE_SCALER = 0x096, // 16-bit - see STSW-IMG003 core/inc/vl6180x_def.h READOUT__AVERAGING_SAMPLE_PERIOD = 0x10A, FIRMWARE__BOOTUP = 0x119, FIRMWARE__RESULT_SCALER = 0x120, I2C_SLAVE__DEVICE_ADDRESS = 0x212, INTERLEAVED_MODE__ENABLE = 0x2A3, }; uint8_t last_status; // status of last I2C transmission VL6180X(I2C *_i2c); /** * @brief Read device's ID. * @return [device ID] 0x64. */ uint8_t readID() { return readReg(IDENTIFICATION__MODEL_ID); } void setAddress(uint8_t new_addr); void init(void); void configureDefault(void); void writeReg(uint16_t reg, uint8_t value); void writeReg16Bit(uint16_t reg, uint16_t value); void writeReg32Bit(uint16_t reg, uint32_t value); uint8_t readReg(uint16_t reg); uint16_t readReg16Bit(uint16_t reg); uint32_t readReg32Bit(uint16_t reg); uint32_t millis() { return 2; } void setScaling(uint8_t new_scaling); inline uint8_t getScaling(void) { return scaling; } uint8_t readRangeSingle(void); inline uint16_t readRangeSingleMillimeters(void) { return (uint16_t)scaling * readRangeSingle(); } uint16_t readAmbientSingle(void); void startRangeContinuous(uint16_t period = 100); void startAmbientContinuous(uint16_t period = 500); void startInterleavedContinuous(uint16_t period = 500); void stopContinuous(); uint8_t readRangeContinuous(void); inline uint16_t readRangeContinuousMillimeters(void) { return (uint16_t)scaling * readRangeContinuous(); } uint16_t readAmbientContinuous(void); inline void setTimeout(uint16_t timeout) { io_timeout = timeout; } inline uint16_t getTimeout(void) { return io_timeout; } bool timeoutOccurred(void); private: I2C *i2c; uint8_t address; uint8_t scaling; uint8_t ptp_offset; uint16_t io_timeout; bool did_timeout; }; #endif