Thundersoft
/
VL6180XA1_for_TT_Mxx
Creating a project about VL6180XA1 for TT_Mxx
Embed:
(wiki syntax)
Show/hide line numbers
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 1.7.2