A lib in development for TSL2561 light sensor communication.
Dependents: TSL2561_Townsend TSL2561_Light_sensor Light
Diff: TSL2561.cpp
- Revision:
- 1:ab906ac6e90b
- Parent:
- 0:df9baf6459b7
--- a/TSL2561.cpp Tue Sep 10 15:13:49 2013 +0000 +++ b/TSL2561.cpp Thu Jan 09 10:16:51 2014 +0000 @@ -1,5 +1,7 @@ #include "TSL2561.h" +#include "mbed.h" + Serial DEBUG(USBTX, USBRX); #define DEBUG_PRINTX(z,x) if(z==1) DEBUG.printf(x); @@ -9,7 +11,7 @@ TSL2561::TSL2561():i2c(TSL2561_I2C_PINNAME_SDA,TSL2561_I2C_PINNAME_SCL){ i2c.frequency (300); - _addr = TSL2561_ADDR_FLOAT<<1; + _addr = TSL2561_ADDR_FLOAT; _initialized = false; _integration = TSL2561_INTEGRATIONTIME_13MS; _gain = TSL2561_GAIN_16X; @@ -17,7 +19,7 @@ TSL2561::TSL2561(uint8_t addr):i2c(TSL2561_I2C_PINNAME_SDA,TSL2561_I2C_PINNAME_SCL) { - _addr = addr<<1; + _addr = addr; _initialized = false; _integration = TSL2561_INTEGRATIONTIME_13MS; _gain = TSL2561_GAIN_16X; @@ -26,7 +28,7 @@ TSL2561::TSL2561(PinName sda, PinName scl):i2c(sda, scl) { - _addr = TSL2561_ADDR_FLOAT<<1; + _addr = TSL2561_ADDR_FLOAT; _initialized = false; _integration = TSL2561_INTEGRATIONTIME_13MS; _gain = TSL2561_GAIN_16X; @@ -35,7 +37,7 @@ TSL2561::TSL2561(PinName sda, PinName scl, uint8_t addr):i2c(sda, scl) { - _addr = addr<<1; + _addr = addr; _initialized = false; _integration = TSL2561_INTEGRATIONTIME_13MS; _gain = TSL2561_GAIN_16X; @@ -57,7 +59,7 @@ } else if (channel == 2) { // Reads all and subtracts out just the visible! - return ( (x & 0xFFFF) - (x >> 16)); + return ( (x & 0xFFFF) - (x >> 16) ); } // unknown channel! @@ -85,19 +87,19 @@ break; } -DEBUG_PRINTLNXY(1," Integration:= %d",_integration); +//DEBUG_PRINTLNXY(0," Integration:= %d",_integration); uint32_t x; x = read16(TSL2561_COMMAND_BIT | TSL2561_WORD_BIT | TSL2561_REGISTER_CHAN1_LOW); - DEBUG_PRINTLNXY(1," x:= %d",x); + // DEBUG_PRINTLNXY(0," x:= %d",x); x <<= 16; x |= read16(TSL2561_COMMAND_BIT | TSL2561_WORD_BIT | TSL2561_REGISTER_CHAN0_LOW); - DEBUG_PRINTLNXY(1," x:= %d",x); + //DEBUG_PRINTLNXY(0," x:= %d",x); - wait(3); + //wait(3); disable(); return x; @@ -106,20 +108,16 @@ bool TSL2561::begin(void) { - char reg = TSL2561_REGISTER_ID; - char read; - - i2c.start(); - i2c.write(_addr); - i2c.write(reg); - - //i2c.start(); - //i2c.write(reg); - read = i2c.read(1); - i2c.stop(); - + char reg[1]; + reg[0] = TSL2561_REGISTER_ID; + char receivedata[1]; + char read; + i2c.write(_addr<<1, reg, 1); + i2c.read(_addr<<1, receivedata, 1); + read=receivedata[0]; + if (read & 0x0A ) { - DEBUG_PRINTLNXY(1,"Read 0x%x => Found TSL2561",read); + DEBUG_PRINTLNXY(0,"Read 0x%x => Found TSL2561",read); } else { return false; } @@ -137,35 +135,37 @@ uint16_t TSL2561::read16(uint8_t reg) { - uint16_t x; uint16_t t; - char _x;char _t;char r[1]; + uint16_t x; + uint16_t t; + char _x; + char _t; + char r[1]; r[0] = reg; - - i2c.start(); - i2c.write(_addr); - i2c.write(reg); + char receivedata[2]; - //i2c.start(); - //i2c.write(reg); - _t = i2c.read(1); - _x = i2c.read(1); + i2c.write(_addr<<1, r, 1); + i2c.read(_addr<<1, receivedata, 2); + + _t=receivedata[0]; + _x=receivedata[1]; - DEBUG_PRINTLNXY(0,"%x",_x); - DEBUG_PRINTLNXY(0,"%x",_t); - - i2c.stop(); + DEBUG_PRINTLNXY(0,"_t:=0x%x",_t); + DEBUG_PRINTLNXY(0,"_x:=0x%x",_x); - t=(uint16_t)&_t; - x=(uint16_t)&_x; + t=(uint16_t)_t; + x=(uint16_t)_x; x <<= 8; x |= t; + + DEBUG_PRINTLNXY(0,"x:= %d",x); + return x; } void TSL2561::write8 (uint8_t reg, uint8_t value) { i2c.start(); - i2c.write(_addr); + i2c.write(_addr<<1); i2c.write(reg); i2c.write(value); i2c.stop(); @@ -175,45 +175,45 @@ if (!_initialized) begin(); -else DEBUG_PRINTLNX(1,"--------------Set Timing---------"); +else DEBUG_PRINTLNX(0,"--------------Set Timing---------"); enable(); _integration = integration; - DEBUG_PRINTLNXY(1,"Integration: 0x%x",_integration); - DEBUG_PRINTLNXY(1,"Gain: 0x%x",_gain); - DEBUG_PRINTLNXY(1,"Integration | Gain: 0x%x",_integration | _gain); + DEBUG_PRINTLNXY(0,"Integration: 0x%x",_integration); + DEBUG_PRINTLNXY(0,"Gain: 0x%x",_gain); + DEBUG_PRINTLNXY(0,"Integration | Gain: 0x%x",_integration | _gain); write8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_TIMING, _integration | _gain); disable(); - DEBUG_PRINTLNX(1,"--------------Complete Set Timing-------------"); + DEBUG_PRINTLNX(0,"--------------Complete Set Timing-------------"); - wait(1); + //wait(1); } void TSL2561::setGain(tsl2561Gain_t gain) { if (!_initialized) begin(); -else DEBUG_PRINTLNX(1,"-------------Set Gain--------------"); +else DEBUG_PRINTLNX(0,"-------------Set Gain--------------"); enable(); - DEBUG_PRINTLNXY(1,"Intergration: 0x%x",_integration); - DEBUG_PRINTLNXY(1,"Gain: 0x%x",_gain); - DEBUG_PRINTLNXY(1,"Intergration | Gain: 0x%x",_integration | _gain); + DEBUG_PRINTLNXY(0,"Intergration: 0x%x",_integration); + DEBUG_PRINTLNXY(0,"Gain: 0x%x",_gain); + DEBUG_PRINTLNXY(0,"Intergration | Gain: 0x%x",_integration | _gain); _gain = gain; write8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_TIMING, _integration | _gain); //write8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_TIMING, _gain); disable(); - DEBUG_PRINTLNX(1,"---------------Complete Set Gain----------------"); - wait(1); + DEBUG_PRINTLNX(0,"---------------Complete Set Gain----------------"); + //wait(1); } @@ -222,7 +222,7 @@ if (!_initialized) begin(); // Enable the device by setting the control bit to 0x03 - DEBUG_PRINTLNX(1," Power On"); + DEBUG_PRINTLNX(0," Power On"); write8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_CONTROL, TSL2561_CONTROL_POWERON); } @@ -231,6 +231,6 @@ if (!_initialized) begin(); // Disable the device by setting the control bit to 0x03 - DEBUG_PRINTLNX(1," Power Off"); + DEBUG_PRINTLNX(0," Power Off"); write8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_CONTROL, TSL2561_CONTROL_POWEROFF); } \ No newline at end of file