class to readout the VEML7700 light sensor via i2c

Dependents:   veml7700_tst

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?

UserRevisionLine numberNew 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