Library for using the AMS TSL45315 Ambient Light Sensor
tsl45315.cpp@0:cafc6c4ed875, 2014-03-24 (annotated)
- 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?
User | Revision | Line number | New 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 | } |