Library for using the AMS TSL45315 Ambient Light Sensor
Diff: tsl45315.cpp
- Revision:
- 0:cafc6c4ed875
- Child:
- 1:303c95402cdc
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsl45315.cpp Mon Mar 24 17:00:33 2014 +0000 @@ -0,0 +1,77 @@ + +#include "tsl45315.hpp" + +namespace TSL45x +{ + +TSL45315::TSL45315( PinName p_sda, PinName p_scl ): _i2c( p_sda, p_scl ) +{ + _i2c.frequency( I2C_FREQ ); + getIDdata(); + setReg( CONTROL_REG, NORMAL_OP); + setReg( CONFIG_REG, M1); + setMultiplier( M1 ); + _luxTicker.attach( this, &TSL45315::getLuxData, 1 ); +} + +TSL45315::TSL45315( PinName p_sda, PinName p_scl, uint8_t mult ): _i2c( p_sda, p_scl ) +{ + _i2c.frequency( I2C_FREQ ); + getIDdata( ); + setReg( CONTROL_REG, NORMAL_OP ); + setReg( CONFIG_REG, mult ); + setMultiplier( mult ); + _luxTicker.attach( this, &TSL45315::getLuxData, 1 ); +} + +void TSL45315::setMultiplier( uint8_t mult ) +{ + switch( mult ) { + case 0: + multiplier = 1; + break; + case 1: + multiplier = 2; + break; + case 2: + multiplier = 4; + break; + default: + multiplier = 0; + break; + } +} + +void TSL45315::setReg( int reg, int arg ) +{ + char cmd[2]; + cmd[0] = ( 0x80|reg ); + cmd[1] = arg; + _i2c.write( I2C_ADDR, cmd, 2 ); +} + + +void TSL45315::getIDdata( ) +{ + char id[1]; + id[0]= 0; + + char cmd[1]; + cmd[0] = (0x80|ID_REG); + _i2c.write(I2C_ADDR, cmd, 1); + _i2c.read(I2C_ADDR, id, 1); + + devID = ( id[0]&0xF0 ); +} + +void TSL45315::getLuxData() +{ + char data[2]; + char cmd[1]; + cmd[0] = (0x80|DATALOW_REG); + _i2c.write(I2C_ADDR, cmd, 1); + _i2c.read(I2C_ADDR, data, 2); + lux =uint32_t( (data[1]<<8)|data[0] ); + lux *= multiplier; +} +} \ No newline at end of file