class to readout the VEML7700 light sensor via i2c
veml7700.h@1:d6eb62dc0a1e, 2019-09-10 (annotated)
- Committer:
- wbeaumont
- Date:
- Tue Sep 10 13:33:10 2019 +0000
- Revision:
- 1:d6eb62dc0a1e
- Parent:
- 0:e71d3ecdd257
corrections added lux output
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 | 1:d6eb62dc0a1e | 15 | * version 0.50 : added readout in lux |
wbeaumont | 0:e71d3ecdd257 | 16 | * This file make part of the PeriperalDevice package see repository |
wbeaumont | 0:e71d3ecdd257 | 17 | * https://github.com/wimbeaumont/PeripheralDevices |
wbeaumont | 0:e71d3ecdd257 | 18 | * |
wbeaumont | 0:e71d3ecdd257 | 19 | * (C) Wim Beaumont Universiteit Antwerpen 2015 2019 |
wbeaumont | 0:e71d3ecdd257 | 20 | * License see |
wbeaumont | 0:e71d3ecdd257 | 21 | * https://github.com/wimbeaumont/PeripheralDevices/blob/master/LICENSE |
wbeaumont | 0:e71d3ecdd257 | 22 | * |
wbeaumont | 0:e71d3ecdd257 | 23 | **/ |
wbeaumont | 0:e71d3ecdd257 | 24 | |
wbeaumont | 1:d6eb62dc0a1e | 25 | #define VERSION_VEML7700_HDR "0.51" |
wbeaumont | 0:e71d3ecdd257 | 26 | |
wbeaumont | 0:e71d3ecdd257 | 27 | |
wbeaumont | 0:e71d3ecdd257 | 28 | class VEML7700 : public virtual getVersion { |
wbeaumont | 0:e71d3ecdd257 | 29 | |
wbeaumont | 0:e71d3ecdd257 | 30 | private : |
wbeaumont | 0:e71d3ecdd257 | 31 | // registers |
wbeaumont | 0:e71d3ecdd257 | 32 | int gain_nr; // array index of the last set gain . |
wbeaumont | 0:e71d3ecdd257 | 33 | int IntTnr ; //array index of the last set integration time |
wbeaumont | 0:e71d3ecdd257 | 34 | I2CInterface* i2cdev; |
wbeaumont | 0:e71d3ecdd257 | 35 | |
wbeaumont | 0:e71d3ecdd257 | 36 | // a read command to the device |
wbeaumont | 0:e71d3ecdd257 | 37 | u16 read_cmd ( u8 reg); |
wbeaumont | 0:e71d3ecdd257 | 38 | // a write command to the device |
wbeaumont | 0:e71d3ecdd257 | 39 | void write_cmd( u8 reg , u16 value ); |
wbeaumont | 0:e71d3ecdd257 | 40 | |
wbeaumont | 0:e71d3ecdd257 | 41 | |
wbeaumont | 0:e71d3ecdd257 | 42 | // reg the word that has to change |
wbeaumont | 0:e71d3ecdd257 | 43 | // value the value that has to be set into reg |
wbeaumont | 0:e71d3ecdd257 | 44 | // lsb , the position of the lsb in the reg word |
wbeaumont | 0:e71d3ecdd257 | 45 | // bsize the size in bits of the value to be set |
wbeaumont | 0:e71d3ecdd257 | 46 | void set_bits_reg ( u8 reg , u16 value, u16 lsb ,u16 bsize ); |
wbeaumont | 0:e71d3ecdd257 | 47 | |
wbeaumont | 0:e71d3ecdd257 | 48 | // write value to the reg value in the correct place ( calls set_bits_reg ) |
wbeaumont | 0:e71d3ecdd257 | 49 | u16 set_bits(u16 regvalue, u16 value, u16 lsb ,u16 bsize ); |
wbeaumont | 0:e71d3ecdd257 | 50 | |
wbeaumont | 0:e71d3ecdd257 | 51 | |
wbeaumont | 0:e71d3ecdd257 | 52 | public : |
wbeaumont | 0:e71d3ecdd257 | 53 | |
wbeaumont | 0:e71d3ecdd257 | 54 | VEML7700(I2CInterface* i2cinterfaceint , bool init =true ); |
wbeaumont | 0:e71d3ecdd257 | 55 | |
wbeaumont | 0:e71d3ecdd257 | 56 | // returns 0 if no error reported |
wbeaumont | 0:e71d3ecdd257 | 57 | // -10 for communication error |
wbeaumont | 0:e71d3ecdd257 | 58 | int get_status(void) ; |
wbeaumont | 0:e71d3ecdd257 | 59 | |
wbeaumont | 0:e71d3ecdd257 | 60 | // set interrupt enable |
wbeaumont | 0:e71d3ecdd257 | 61 | void set_int_enable( bool int_enable); |
wbeaumont | 0:e71d3ecdd257 | 62 | |
wbeaumont | 0:e71d3ecdd257 | 63 | // set the bits for the ALS config register (0) in one write cycle |
wbeaumont | 0:e71d3ecdd257 | 64 | void set_default_als_config ( bool shutdown=false , bool int_enable=false ,u16 pres=0, u16 integationtime=0, u16 gain =1 ); |
wbeaumont | 0:e71d3ecdd257 | 65 | |
wbeaumont | 0:e71d3ecdd257 | 66 | void shutdown( bool enable) ;// if true set shutdown mode |
wbeaumont | 0:e71d3ecdd257 | 67 | |
wbeaumont | 0:e71d3ecdd257 | 68 | void set_power_saving_enable( bool ps_enable); |
wbeaumont | 0:e71d3ecdd257 | 69 | |
wbeaumont | 0:e71d3ecdd257 | 70 | void set_power_saving_mode( u16 psmode); |
wbeaumont | 0:e71d3ecdd257 | 71 | |
wbeaumont | 0:e71d3ecdd257 | 72 | // set the bits for the power mode config register (0) in one write cycle |
wbeaumont | 0:e71d3ecdd257 | 73 | void set_default_powermode ( bool ps_enable=false , u16 psmode=0); |
wbeaumont | 0:e71d3ecdd257 | 74 | |
wbeaumont | 0:e71d3ecdd257 | 75 | void setHighWarningLevel( int lvl); |
wbeaumont | 0:e71d3ecdd257 | 76 | void setLowWarningLevel( int lvl); |
wbeaumont | 0:e71d3ecdd257 | 77 | |
wbeaumont | 0:e71d3ecdd257 | 78 | bool LowThresoldExeed(void) ; |
wbeaumont | 0:e71d3ecdd257 | 79 | bool HighThresoldExeed(void) ; |
wbeaumont | 0:e71d3ecdd257 | 80 | |
wbeaumont | 0:e71d3ecdd257 | 81 | void set_gain( float gain ); |
wbeaumont | 0:e71d3ecdd257 | 82 | void set_integrationtime( int time_ms ); |
wbeaumont | 0:e71d3ecdd257 | 83 | |
wbeaumont | 1:d6eb62dc0a1e | 84 | // returns convert the value readed from the als or white register, taking in acount the gain and integration time in to lux |
wbeaumont | 1:d6eb62dc0a1e | 85 | // if als is true the ALS register is read, else the white register is read |
wbeaumont | 1:d6eb62dc0a1e | 86 | // if verify is flase it doesn't reads the config register assumes the stored gain ant integration time are corrected stored in the program |
wbeaumont | 1:d6eb62dc0a1e | 87 | float get_lux(bool als=true ,bool verify_reg =false ); |
wbeaumont | 1:d6eb62dc0a1e | 88 | |
wbeaumont | 1:d6eb62dc0a1e | 89 | |
wbeaumont | 0:e71d3ecdd257 | 90 | |
wbeaumont | 0:e71d3ecdd257 | 91 | // these could be private but could be useful for debugging |
wbeaumont | 0:e71d3ecdd257 | 92 | |
wbeaumont | 1:d6eb62dc0a1e | 93 | |
wbeaumont | 1:d6eb62dc0a1e | 94 | // write the gain bits to reg 0 |
wbeaumont | 1:d6eb62dc0a1e | 95 | void set_gain_bits( u16 gbits ) ; |
wbeaumont | 1:d6eb62dc0a1e | 96 | // write the integration time bits to reg 0 |
wbeaumont | 1:d6eb62dc0a1e | 97 | void set_IntT_bits( u16 InTgbits ); |
wbeaumont | 1:d6eb62dc0a1e | 98 | |
wbeaumont | 1:d6eb62dc0a1e | 99 | |
wbeaumont | 0:e71d3ecdd257 | 100 | // get the gain bits depending on the value of gainsel, setgain <= gainsel |
wbeaumont | 0:e71d3ecdd257 | 101 | // so 0 -> .125 , .126 -> .25 , 4 -> 2 1.1 -> 2 |
wbeaumont | 0:e71d3ecdd257 | 102 | u16 get_gain_in_set_bit (float gainsel ); |
wbeaumont | 0:e71d3ecdd257 | 103 | u16 get_IntT_in_set_bit( int time_ms); |
wbeaumont | 0:e71d3ecdd257 | 104 | u16 get_als_bits(void); |
wbeaumont | 0:e71d3ecdd257 | 105 | u16 get_white_ch_bits(void); |
wbeaumont | 0:e71d3ecdd257 | 106 | u16 get_reg( u8 reg) { return read_cmd ( reg); } |
wbeaumont | 0:e71d3ecdd257 | 107 | u16 get_bits(u16 regvalue, u16 lsb ,u16 bsize ); |
wbeaumont | 0:e71d3ecdd257 | 108 | void set_bits_in_reg ( u8 reg , u16 value, u16 lsb ,u16 bsize ) { set_bits_reg ( reg , value, lsb ,bsize ) ;} |
wbeaumont | 0:e71d3ecdd257 | 109 | |
wbeaumont | 1:d6eb62dc0a1e | 110 | float decodeGainBits( u16 gb , int& gainnr) ; |
wbeaumont | 1:d6eb62dc0a1e | 111 | float decodeGainBits( u16 gb); |
wbeaumont | 1:d6eb62dc0a1e | 112 | int decodeIntTbits( u16 ib, int& InTnr ) ; |
wbeaumont | 1:d6eb62dc0a1e | 113 | int decodeIntTbits( u16 ib); |
wbeaumont | 1:d6eb62dc0a1e | 114 | u16 decode_Reg0( bool& sd ,bool& ie, u16& pers_protect,int& IntT, float& gain ) ; |
wbeaumont | 0:e71d3ecdd257 | 115 | |
wbeaumont | 0:e71d3ecdd257 | 116 | }; //end class |
wbeaumont | 0:e71d3ecdd257 | 117 | |
wbeaumont | 0:e71d3ecdd257 | 118 | |
wbeaumont | 0:e71d3ecdd257 | 119 | |
wbeaumont | 0:e71d3ecdd257 | 120 |