Library for using the AMS TSL45315 Ambient Light Sensor

Committer:
ajenal
Date:
Tue Mar 25 10:54:56 2014 +0000
Revision:
1:303c95402cdc
Parent:
0:cafc6c4ed875
Child:
3:f350cffa13b3
* constructor overloaded for different kinds of use; * documentation edited

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ajenal 0:cafc6c4ed875 1
ajenal 0:cafc6c4ed875 2 #include "tsl45315.hpp"
ajenal 0:cafc6c4ed875 3
ajenal 0:cafc6c4ed875 4 namespace TSL45x
ajenal 0:cafc6c4ed875 5 {
ajenal 0:cafc6c4ed875 6
ajenal 1:303c95402cdc 7 TSL45315::TSL45315( PinName p_sda, PinName p_scl, int i2c_freq, float t ): _i2c( p_sda, p_scl )
ajenal 0:cafc6c4ed875 8 {
ajenal 1:303c95402cdc 9 _i2c.frequency( i2c_freq );
ajenal 0:cafc6c4ed875 10 getIDdata();
ajenal 0:cafc6c4ed875 11 setReg( CONTROL_REG, NORMAL_OP);
ajenal 0:cafc6c4ed875 12 setReg( CONFIG_REG, M1);
ajenal 0:cafc6c4ed875 13 setMultiplier( M1 );
ajenal 1:303c95402cdc 14 _luxTicker.attach( this, &TSL45315::getLuxData, t );
ajenal 1:303c95402cdc 15 }
ajenal 1:303c95402cdc 16
ajenal 1:303c95402cdc 17 TSL45315::TSL45315( PinName p_sda, PinName p_scl, int i2c_freq, float t, uint8_t mult ): _i2c( p_sda, p_scl )
ajenal 1:303c95402cdc 18 {
ajenal 1:303c95402cdc 19 _i2c.frequency( i2c_freq );
ajenal 1:303c95402cdc 20 getIDdata( );
ajenal 1:303c95402cdc 21 setReg( CONTROL_REG, NORMAL_OP );
ajenal 1:303c95402cdc 22 setReg( CONFIG_REG, mult );
ajenal 1:303c95402cdc 23 setMultiplier( mult );
ajenal 1:303c95402cdc 24 _luxTicker.attach( this, &TSL45315::getLuxData, t );
ajenal 0:cafc6c4ed875 25 }
ajenal 0:cafc6c4ed875 26
ajenal 0:cafc6c4ed875 27 TSL45315::TSL45315( PinName p_sda, PinName p_scl, uint8_t mult ): _i2c( p_sda, p_scl )
ajenal 0:cafc6c4ed875 28 {
ajenal 0:cafc6c4ed875 29 _i2c.frequency( I2C_FREQ );
ajenal 0:cafc6c4ed875 30 getIDdata( );
ajenal 0:cafc6c4ed875 31 setReg( CONTROL_REG, NORMAL_OP );
ajenal 0:cafc6c4ed875 32 setReg( CONFIG_REG, mult );
ajenal 0:cafc6c4ed875 33 setMultiplier( mult );
ajenal 1:303c95402cdc 34 }
ajenal 1:303c95402cdc 35
ajenal 1:303c95402cdc 36 TSL45315::TSL45315( PinName p_sda, PinName p_scl): _i2c( p_sda, p_scl )
ajenal 1:303c95402cdc 37 {
ajenal 1:303c95402cdc 38 _i2c.frequency( I2C_FREQ );
ajenal 1:303c95402cdc 39 getIDdata( );
ajenal 1:303c95402cdc 40 setReg( CONTROL_REG, NORMAL_OP );
ajenal 1:303c95402cdc 41 setReg( CONFIG_REG, M1 );
ajenal 1:303c95402cdc 42 setMultiplier( M1 );
ajenal 0:cafc6c4ed875 43 }
ajenal 0:cafc6c4ed875 44
ajenal 0:cafc6c4ed875 45 void TSL45315::setMultiplier( uint8_t mult )
ajenal 0:cafc6c4ed875 46 {
ajenal 0:cafc6c4ed875 47 switch( mult ) {
ajenal 0:cafc6c4ed875 48 case 0:
ajenal 0:cafc6c4ed875 49 multiplier = 1;
ajenal 0:cafc6c4ed875 50 break;
ajenal 0:cafc6c4ed875 51 case 1:
ajenal 0:cafc6c4ed875 52 multiplier = 2;
ajenal 0:cafc6c4ed875 53 break;
ajenal 0:cafc6c4ed875 54 case 2:
ajenal 0:cafc6c4ed875 55 multiplier = 4;
ajenal 0:cafc6c4ed875 56 break;
ajenal 0:cafc6c4ed875 57 default:
ajenal 0:cafc6c4ed875 58 multiplier = 0;
ajenal 0:cafc6c4ed875 59 break;
ajenal 0:cafc6c4ed875 60 }
ajenal 0:cafc6c4ed875 61 }
ajenal 0:cafc6c4ed875 62
ajenal 0:cafc6c4ed875 63 void TSL45315::setReg( int reg, int arg )
ajenal 0:cafc6c4ed875 64 {
ajenal 0:cafc6c4ed875 65 char cmd[2];
ajenal 0:cafc6c4ed875 66 cmd[0] = ( 0x80|reg );
ajenal 0:cafc6c4ed875 67 cmd[1] = arg;
ajenal 0:cafc6c4ed875 68 _i2c.write( I2C_ADDR, cmd, 2 );
ajenal 0:cafc6c4ed875 69 }
ajenal 0:cafc6c4ed875 70
ajenal 0:cafc6c4ed875 71
ajenal 0:cafc6c4ed875 72 void TSL45315::getIDdata( )
ajenal 0:cafc6c4ed875 73 {
ajenal 0:cafc6c4ed875 74 char id[1];
ajenal 0:cafc6c4ed875 75 id[0]= 0;
ajenal 0:cafc6c4ed875 76
ajenal 0:cafc6c4ed875 77 char cmd[1];
ajenal 0:cafc6c4ed875 78 cmd[0] = (0x80|ID_REG);
ajenal 0:cafc6c4ed875 79 _i2c.write(I2C_ADDR, cmd, 1);
ajenal 0:cafc6c4ed875 80 _i2c.read(I2C_ADDR, id, 1);
ajenal 0:cafc6c4ed875 81
ajenal 0:cafc6c4ed875 82 devID = ( id[0]&0xF0 );
ajenal 0:cafc6c4ed875 83 }
ajenal 0:cafc6c4ed875 84
ajenal 1:303c95402cdc 85 void TSL45315::getLuxData( )
ajenal 0:cafc6c4ed875 86 {
ajenal 0:cafc6c4ed875 87 char data[2];
ajenal 0:cafc6c4ed875 88 char cmd[1];
ajenal 0:cafc6c4ed875 89 cmd[0] = (0x80|DATALOW_REG);
ajenal 0:cafc6c4ed875 90 _i2c.write(I2C_ADDR, cmd, 1);
ajenal 0:cafc6c4ed875 91 _i2c.read(I2C_ADDR, data, 2);
ajenal 0:cafc6c4ed875 92 lux =uint32_t( (data[1]<<8)|data[0] );
ajenal 0:cafc6c4ed875 93 lux *= multiplier;
ajenal 0:cafc6c4ed875 94 }
ajenal 0:cafc6c4ed875 95 }