class to readout the VEML7700 light sensor via i2c
veml7700.h@0:e71d3ecdd257, 2019-09-10 (annotated)
- Committer:
- wbeaumont
- Date:
- Tue Sep 10 11:11:19 2019 +0000
- Revision:
- 0:e71d3ecdd257
- Child:
- 1:d6eb62dc0a1e
initial version for the VEML7700 light detector. Basic methods implemented, tested with FRDM-KL057
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
wbeaumont | 0:e71d3ecdd257 | 1 | #include "getVersion.h" |
wbeaumont | 0:e71d3ecdd257 | 2 | #include "dev_interface_def.h" |
wbeaumont | 0:e71d3ecdd257 | 3 | #include "I2CInterface.h" |
wbeaumont | 0:e71d3ecdd257 | 4 | |
wbeaumont | 0:e71d3ecdd257 | 5 | /** |
wbeaumont | 0:e71d3ecdd257 | 6 | * veml7700.h |
wbeaumont | 0:e71d3ecdd257 | 7 | * This is a C++ class header to read the veml7700 lux sensor |
wbeaumont | 0:e71d3ecdd257 | 8 | * via the I2C interface |
wbeaumont | 0:e71d3ecdd257 | 9 | * |
wbeaumont | 0:e71d3ecdd257 | 10 | * version history |
wbeaumont | 0:e71d3ecdd257 | 11 | * version 0.20 : initial value not tested with the sensor |
wbeaumont | 0:e71d3ecdd257 | 12 | * version 0.21 : just change the name from VEML770 VEML7700 |
wbeaumont | 0:e71d3ecdd257 | 13 | * version 0.30 : start with error reporting |
wbeaumont | 0:e71d3ecdd257 | 14 | * version 0.42 : more methodes |
wbeaumont | 0:e71d3ecdd257 | 15 | * This file make part of the PeriperalDevice package see repository |
wbeaumont | 0:e71d3ecdd257 | 16 | * https://github.com/wimbeaumont/PeripheralDevices |
wbeaumont | 0:e71d3ecdd257 | 17 | * |
wbeaumont | 0:e71d3ecdd257 | 18 | * (C) Wim Beaumont Universiteit Antwerpen 2015 2019 |
wbeaumont | 0:e71d3ecdd257 | 19 | * License see |
wbeaumont | 0:e71d3ecdd257 | 20 | * https://github.com/wimbeaumont/PeripheralDevices/blob/master/LICENSE |
wbeaumont | 0:e71d3ecdd257 | 21 | * |
wbeaumont | 0:e71d3ecdd257 | 22 | **/ |
wbeaumont | 0:e71d3ecdd257 | 23 | |
wbeaumont | 0:e71d3ecdd257 | 24 | #define VERSION_VEML7700_HDR "0.42" |
wbeaumont | 0:e71d3ecdd257 | 25 | |
wbeaumont | 0:e71d3ecdd257 | 26 | |
wbeaumont | 0:e71d3ecdd257 | 27 | class VEML7700 : public virtual getVersion { |
wbeaumont | 0:e71d3ecdd257 | 28 | |
wbeaumont | 0:e71d3ecdd257 | 29 | private : |
wbeaumont | 0:e71d3ecdd257 | 30 | // registers |
wbeaumont | 0:e71d3ecdd257 | 31 | int gain_nr; // array index of the last set gain . |
wbeaumont | 0:e71d3ecdd257 | 32 | int IntTnr ; //array index of the last set integration time |
wbeaumont | 0:e71d3ecdd257 | 33 | I2CInterface* i2cdev; |
wbeaumont | 0:e71d3ecdd257 | 34 | |
wbeaumont | 0:e71d3ecdd257 | 35 | // a read command to the device |
wbeaumont | 0:e71d3ecdd257 | 36 | u16 read_cmd ( u8 reg); |
wbeaumont | 0:e71d3ecdd257 | 37 | // a write command to the device |
wbeaumont | 0:e71d3ecdd257 | 38 | void write_cmd( u8 reg , u16 value ); |
wbeaumont | 0:e71d3ecdd257 | 39 | |
wbeaumont | 0:e71d3ecdd257 | 40 | |
wbeaumont | 0:e71d3ecdd257 | 41 | // reg the word that has to change |
wbeaumont | 0:e71d3ecdd257 | 42 | // value the value that has to be set into reg |
wbeaumont | 0:e71d3ecdd257 | 43 | // lsb , the position of the lsb in the reg word |
wbeaumont | 0:e71d3ecdd257 | 44 | // bsize the size in bits of the value to be set |
wbeaumont | 0:e71d3ecdd257 | 45 | void set_bits_reg ( u8 reg , u16 value, u16 lsb ,u16 bsize ); |
wbeaumont | 0:e71d3ecdd257 | 46 | |
wbeaumont | 0:e71d3ecdd257 | 47 | // write value to the reg value in the correct place ( calls set_bits_reg ) |
wbeaumont | 0:e71d3ecdd257 | 48 | u16 set_bits(u16 regvalue, u16 value, u16 lsb ,u16 bsize ); |
wbeaumont | 0:e71d3ecdd257 | 49 | |
wbeaumont | 0:e71d3ecdd257 | 50 | |
wbeaumont | 0:e71d3ecdd257 | 51 | public : |
wbeaumont | 0:e71d3ecdd257 | 52 | |
wbeaumont | 0:e71d3ecdd257 | 53 | VEML7700(I2CInterface* i2cinterfaceint , bool init =true ); |
wbeaumont | 0:e71d3ecdd257 | 54 | |
wbeaumont | 0:e71d3ecdd257 | 55 | // returns 0 if no error reported |
wbeaumont | 0:e71d3ecdd257 | 56 | // -10 for communication error |
wbeaumont | 0:e71d3ecdd257 | 57 | int get_status(void) ; |
wbeaumont | 0:e71d3ecdd257 | 58 | |
wbeaumont | 0:e71d3ecdd257 | 59 | // set interrupt enable |
wbeaumont | 0:e71d3ecdd257 | 60 | void set_int_enable( bool int_enable); |
wbeaumont | 0:e71d3ecdd257 | 61 | |
wbeaumont | 0:e71d3ecdd257 | 62 | // write the gain bits to reg 0 |
wbeaumont | 0:e71d3ecdd257 | 63 | void set_gain_bits( u16 gbits ) ; |
wbeaumont | 0:e71d3ecdd257 | 64 | // write the integration time bits to reg 0 |
wbeaumont | 0:e71d3ecdd257 | 65 | void set_IntT_bits( u16 InTgbits ); |
wbeaumont | 0:e71d3ecdd257 | 66 | |
wbeaumont | 0:e71d3ecdd257 | 67 | // set the bits for the ALS config register (0) in one write cycle |
wbeaumont | 0:e71d3ecdd257 | 68 | void set_default_als_config ( bool shutdown=false , bool int_enable=false ,u16 pres=0, u16 integationtime=0, u16 gain =1 ); |
wbeaumont | 0:e71d3ecdd257 | 69 | |
wbeaumont | 0:e71d3ecdd257 | 70 | void shutdown( bool enable) ;// if true set shutdown mode |
wbeaumont | 0:e71d3ecdd257 | 71 | |
wbeaumont | 0:e71d3ecdd257 | 72 | void set_power_saving_enable( bool ps_enable); |
wbeaumont | 0:e71d3ecdd257 | 73 | |
wbeaumont | 0:e71d3ecdd257 | 74 | void set_power_saving_mode( u16 psmode); |
wbeaumont | 0:e71d3ecdd257 | 75 | |
wbeaumont | 0:e71d3ecdd257 | 76 | // set the bits for the power mode config register (0) in one write cycle |
wbeaumont | 0:e71d3ecdd257 | 77 | void set_default_powermode ( bool ps_enable=false , u16 psmode=0); |
wbeaumont | 0:e71d3ecdd257 | 78 | |
wbeaumont | 0:e71d3ecdd257 | 79 | void setHighWarningLevel( int lvl); |
wbeaumont | 0:e71d3ecdd257 | 80 | void setLowWarningLevel( int lvl); |
wbeaumont | 0:e71d3ecdd257 | 81 | |
wbeaumont | 0:e71d3ecdd257 | 82 | bool LowThresoldExeed(void) ; |
wbeaumont | 0:e71d3ecdd257 | 83 | bool HighThresoldExeed(void) ; |
wbeaumont | 0:e71d3ecdd257 | 84 | |
wbeaumont | 0:e71d3ecdd257 | 85 | void set_gain( float gain ); |
wbeaumont | 0:e71d3ecdd257 | 86 | void set_integrationtime( int time_ms ); |
wbeaumont | 0:e71d3ecdd257 | 87 | |
wbeaumont | 0:e71d3ecdd257 | 88 | // return convert the value readed from the als register, taking in acount the gain and integration factor in to lux |
wbeaumont | 0:e71d3ecdd257 | 89 | float get_lux_als(void) { return 0;} |
wbeaumont | 0:e71d3ecdd257 | 90 | |
wbeaumont | 0:e71d3ecdd257 | 91 | float get_lux_white(void) { return 0;} |
wbeaumont | 0:e71d3ecdd257 | 92 | // these could be private but could be useful for debugging |
wbeaumont | 0:e71d3ecdd257 | 93 | |
wbeaumont | 0:e71d3ecdd257 | 94 | // get the gain bits depending on the value of gainsel, setgain <= gainsel |
wbeaumont | 0:e71d3ecdd257 | 95 | // so 0 -> .125 , .126 -> .25 , 4 -> 2 1.1 -> 2 |
wbeaumont | 0:e71d3ecdd257 | 96 | u16 get_gain_in_set_bit (float gainsel ); |
wbeaumont | 0:e71d3ecdd257 | 97 | u16 get_IntT_in_set_bit( int time_ms); |
wbeaumont | 0:e71d3ecdd257 | 98 | u16 get_als_bits(void); |
wbeaumont | 0:e71d3ecdd257 | 99 | u16 get_white_ch_bits(void); |
wbeaumont | 0:e71d3ecdd257 | 100 | u16 get_reg( u8 reg) { return read_cmd ( reg); } |
wbeaumont | 0:e71d3ecdd257 | 101 | u16 get_bits(u16 regvalue, u16 lsb ,u16 bsize ); |
wbeaumont | 0:e71d3ecdd257 | 102 | void set_bits_in_reg ( u8 reg , u16 value, u16 lsb ,u16 bsize ) { set_bits_reg ( reg , value, lsb ,bsize ) ;} |
wbeaumont | 0:e71d3ecdd257 | 103 | |
wbeaumont | 0:e71d3ecdd257 | 104 | float decodeGainBits( u16 gb) ; |
wbeaumont | 0:e71d3ecdd257 | 105 | int decodeIntTbits( u16 ib ) ; |
wbeaumont | 0:e71d3ecdd257 | 106 | void decode_Reg0( bool& sd ,bool& ie, u16& pers_protect,int& IntT, float& gain ) ; |
wbeaumont | 0:e71d3ecdd257 | 107 | |
wbeaumont | 0:e71d3ecdd257 | 108 | }; //end class |
wbeaumont | 0:e71d3ecdd257 | 109 | |
wbeaumont | 0:e71d3ecdd257 | 110 | |
wbeaumont | 0:e71d3ecdd257 | 111 | |
wbeaumont | 0:e71d3ecdd257 | 112 |