Library for using the AMS TSL45315 Ambient Light Sensor
tsl45315.cpp@2:2946a5d334a0, 2014-03-25 (annotated)
- Committer:
- ajenal
- Date:
- Tue Mar 25 10:56:45 2014 +0000
- Revision:
- 2:2946a5d334a0
- Parent:
- 1:303c95402cdc
- Child:
- 3:f350cffa13b3
minor bug fixed
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 | 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 | } |