Old working code

Dependencies:   mbed QEI ros_lib_melodic

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Sensor.h Source File

Sensor.h

00001 #ifndef _Sensor_h
00002 #define _Sensor_h
00003 
00004 #include "mbed.h"
00005 
00006 #define DEFAULT_DEVICE_ADDRESS               0x29
00007 
00008 #define FAILURE_RESET  -1
00009 
00010 #define IDENTIFICATION_MODEL_ID              0x0000
00011 #define IDENTIFICATION_MODEL_REV_MAJOR       0x0001
00012 #define IDENTIFICATION_MODEL_REV_MINOR       0x0002
00013 #define IDENTIFICATION_MODULE_REV_MAJOR      0x0003
00014 #define IDENTIFICATION_MODULE_REV_MINOR      0x0004
00015 #define IDENTIFICATION_DATE                  0x0006 //16bit value
00016 #define IDENTIFICATION_TIME                  0x0008 //16bit value
00017 
00018 #define SYSTEM_MODE_GPIO0                    0x0010
00019 #define SYSTEM_MODE_GPIO1                    0x0011
00020 #define SYSTEM_HISTORY_CTRL                  0x0012
00021 #define SYSTEM_INTERRUPT_CONFIG_GPIO         0x0014
00022 #define SYSTEM_INTERRUPT_CLEAR               0x0015
00023 #define SYSTEM_FRESH_OUT_OF_RESET            0x0016
00024 #define SYSTEM_GROUPED_PARAMETER_HOLD        0x0017
00025 
00026 #define SYSRANGE_START                       0x0018
00027 #define SYSRANGE_THRESH_HIGH                 0x0019
00028 #define SYSRANGE_THRESH_LOW                  0x001A
00029 #define SYSRANGE_INTERMEASUREMENT_PERIOD     0x001B
00030 #define SYSRANGE_MAX_CONVERGENCE_TIME        0x001C
00031 #define SYSRANGE_CROSSTALK_COMPENSATION_RATE 0x001E
00032 #define SYSRANGE_CROSSTALK_VALID_HEIGHT      0x0021
00033 #define SYSRANGE_EARLY_CONVERGENCE_ESTIMATE  0x0022
00034 #define SYSRANGE_PART_TO_PART_RANGE_OFFSET   0x0024
00035 #define SYSRANGE_RANGE_IGNORE_VALID_HEIGHT   0x0025
00036 #define SYSRANGE_RANGE_IGNORE_THRESHOLD      0x0026
00037 #define SYSRANGE_MAX_AMBIENT_LEVEL_MULT      0x002C
00038 #define SYSRANGE_RANGE_CHECK_ENABLES         0x002D
00039 #define SYSRANGE_VHV_RECALIBRATE             0x002E
00040 #define SYSRANGE_VHV_REPEAT_RATE             0x0031
00041 
00042 #define SYSALS_START                         0x0038
00043 #define SYSALS_THRESH_HIGH                   0x003A
00044 #define SYSALS_THRESH_LOW                    0x003C
00045 #define SYSALS_INTERMEASUREMENT_PERIOD       0x003E
00046 #define SYSALS_ANALOGUE_GAIN                 0x003F
00047 #define SYSALS_INTEGRATION_PERIOD            0x0040
00048 
00049 #define RESULT_RANGE_STATUS                  0x004D
00050 #define RESULT_ALS_STATUS                    0x004E
00051 #define RESULT_INTERRUPT_STATUS_GPIO         0x004F
00052 #define RESULT_ALS_VAL                       0x0050
00053 #define RESULT_HISTORY_BUFFER                0x0052 
00054 #define RESULT_RANGE_VAL                     0x0062
00055 #define RESULT_RANGE_RAW                     0x0064
00056 #define RESULT_RANGE_RETURN_RATE             0x0066
00057 #define RESULT_RANGE_REFERENCE_RATE          0x0068
00058 #define RESULT_RANGE_RETURN_SIGNAL_COUNT     0x006C
00059 #define RESULT_RANGE_REFERENCE_SIGNAL_COUNT  0x0070
00060 #define RESULT_RANGE_RETURN_AMB_COUNT        0x0074
00061 #define RESULT_RANGE_REFERENCE_AMB_COUNT     0x0078
00062 #define RESULT_RANGE_RETURN_CONV_TIME        0x007C
00063 #define RESULT_RANGE_REFERENCE_CONV_TIME     0x0080
00064 
00065 #define READOUT_AVERAGING_SAMPLE_PERIOD      0x010A
00066 #define FIRMWARE_BOOTUP                      0x0119
00067 #define FIRMWARE_RESULT_SCALER               0x0120
00068 #define I2C_SLAVE_DEVICE_ADDRESS             0x0212
00069 #define INTERLEAVED_MODE_ENABLE              0x02A3
00070 
00071 class Sensor{
00072     
00073 public:
00074     /** Constructor
00075     * Create a VL6180 object at I2C specified address (7 bit).
00076     * 
00077     * @param sda I2C sda pin number
00078     * @param scl I2C scl pin number
00079     * @param shdn I2C shdn pin number
00080     */
00081     Sensor(PinName sda, PinName scl, PinName shdn);
00082     
00083     /** Init the sensor, load settings and change I2C address
00084     *
00085     * @param address I2C new address
00086     */
00087     int init();
00088     
00089     /** Change I2C address
00090     * 
00091     */
00092     void changeAddress(char address);
00093     
00094     /** Make a range reading
00095     *
00096     */
00097     float read();
00098     
00099     /** Turn off the device
00100     *   
00101     */
00102     void turnOff();
00103     
00104     /** Turn on the device
00105     * 
00106     */
00107     void turnOn();
00108     
00109     /** Indicate if the device detects an obstacle
00110     *
00111     *   @return true if osbtacle otherwise false
00112     */
00113     bool getIsObstacle();
00114         
00115 private:
00116     char addr;
00117     I2C i2c;
00118     DigitalOut SHDN;
00119     bool isObstacle;
00120     void startRange();
00121     void pollRange();
00122     float readRange();
00123     void clearInterrupts();
00124     void setRegister(wchar_t reg, char data);
00125     void writeByte(wchar_t reg,char data);
00126     char readByte(wchar_t reg);
00127     
00128 };
00129 #endif