Library for using the AMS TSL45315 Ambient Light Sensor

Committer:
ajenal
Date:
Mon Mar 24 17:00:33 2014 +0000
Revision:
0:cafc6c4ed875
Child:
1:303c95402cdc
intial commit

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 0:cafc6c4ed875 7 TSL45315::TSL45315( PinName p_sda, PinName p_scl ): _i2c( p_sda, p_scl )
ajenal 0:cafc6c4ed875 8 {
ajenal 0:cafc6c4ed875 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 0:cafc6c4ed875 14 _luxTicker.attach( this, &TSL45315::getLuxData, 1 );
ajenal 0:cafc6c4ed875 15 }
ajenal 0:cafc6c4ed875 16
ajenal 0:cafc6c4ed875 17 TSL45315::TSL45315( PinName p_sda, PinName p_scl, uint8_t mult ): _i2c( p_sda, p_scl )
ajenal 0:cafc6c4ed875 18 {
ajenal 0:cafc6c4ed875 19 _i2c.frequency( I2C_FREQ );
ajenal 0:cafc6c4ed875 20 getIDdata( );
ajenal 0:cafc6c4ed875 21 setReg( CONTROL_REG, NORMAL_OP );
ajenal 0:cafc6c4ed875 22 setReg( CONFIG_REG, mult );
ajenal 0:cafc6c4ed875 23 setMultiplier( mult );
ajenal 0:cafc6c4ed875 24 _luxTicker.attach( this, &TSL45315::getLuxData, 1 );
ajenal 0:cafc6c4ed875 25 }
ajenal 0:cafc6c4ed875 26
ajenal 0:cafc6c4ed875 27 void TSL45315::setMultiplier( uint8_t mult )
ajenal 0:cafc6c4ed875 28 {
ajenal 0:cafc6c4ed875 29 switch( mult ) {
ajenal 0:cafc6c4ed875 30 case 0:
ajenal 0:cafc6c4ed875 31 multiplier = 1;
ajenal 0:cafc6c4ed875 32 break;
ajenal 0:cafc6c4ed875 33 case 1:
ajenal 0:cafc6c4ed875 34 multiplier = 2;
ajenal 0:cafc6c4ed875 35 break;
ajenal 0:cafc6c4ed875 36 case 2:
ajenal 0:cafc6c4ed875 37 multiplier = 4;
ajenal 0:cafc6c4ed875 38 break;
ajenal 0:cafc6c4ed875 39 default:
ajenal 0:cafc6c4ed875 40 multiplier = 0;
ajenal 0:cafc6c4ed875 41 break;
ajenal 0:cafc6c4ed875 42 }
ajenal 0:cafc6c4ed875 43 }
ajenal 0:cafc6c4ed875 44
ajenal 0:cafc6c4ed875 45 void TSL45315::setReg( int reg, int arg )
ajenal 0:cafc6c4ed875 46 {
ajenal 0:cafc6c4ed875 47 char cmd[2];
ajenal 0:cafc6c4ed875 48 cmd[0] = ( 0x80|reg );
ajenal 0:cafc6c4ed875 49 cmd[1] = arg;
ajenal 0:cafc6c4ed875 50 _i2c.write( I2C_ADDR, cmd, 2 );
ajenal 0:cafc6c4ed875 51 }
ajenal 0:cafc6c4ed875 52
ajenal 0:cafc6c4ed875 53
ajenal 0:cafc6c4ed875 54 void TSL45315::getIDdata( )
ajenal 0:cafc6c4ed875 55 {
ajenal 0:cafc6c4ed875 56 char id[1];
ajenal 0:cafc6c4ed875 57 id[0]= 0;
ajenal 0:cafc6c4ed875 58
ajenal 0:cafc6c4ed875 59 char cmd[1];
ajenal 0:cafc6c4ed875 60 cmd[0] = (0x80|ID_REG);
ajenal 0:cafc6c4ed875 61 _i2c.write(I2C_ADDR, cmd, 1);
ajenal 0:cafc6c4ed875 62 _i2c.read(I2C_ADDR, id, 1);
ajenal 0:cafc6c4ed875 63
ajenal 0:cafc6c4ed875 64 devID = ( id[0]&0xF0 );
ajenal 0:cafc6c4ed875 65 }
ajenal 0:cafc6c4ed875 66
ajenal 0:cafc6c4ed875 67 void TSL45315::getLuxData()
ajenal 0:cafc6c4ed875 68 {
ajenal 0:cafc6c4ed875 69 char data[2];
ajenal 0:cafc6c4ed875 70 char cmd[1];
ajenal 0:cafc6c4ed875 71 cmd[0] = (0x80|DATALOW_REG);
ajenal 0:cafc6c4ed875 72 _i2c.write(I2C_ADDR, cmd, 1);
ajenal 0:cafc6c4ed875 73 _i2c.read(I2C_ADDR, data, 2);
ajenal 0:cafc6c4ed875 74 lux =uint32_t( (data[1]<<8)|data[0] );
ajenal 0:cafc6c4ed875 75 lux *= multiplier;
ajenal 0:cafc6c4ed875 76 }
ajenal 0:cafc6c4ed875 77 }