Address is changed to suit Grove Digital Light Sensor.
Fork of TSL2561_I2C by
TCS3472_I2C.cpp@1:70d7d9f1af01, 2014-03-19 (annotated)
- Committer:
- karlmaxwell67
- Date:
- Wed Mar 19 17:23:11 2014 +0000
- Revision:
- 1:70d7d9f1af01
- Parent:
- 0:453a43c8bf2b
- Child:
- 2:38d5187a4e7b
Can successfully read data from sensor. No ATIME functionality present.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
karlmaxwell67 | 1:70d7d9f1af01 | 1 | #include "TCS3472_I2C.h" |
karlmaxwell67 | 1:70d7d9f1af01 | 2 | |
karlmaxwell67 | 1:70d7d9f1af01 | 3 | TCS3472_I2C::TCS3472_I2C( PinName sda, PinName scl ) : i2c_( sda, scl ){ |
karlmaxwell67 | 1:70d7d9f1af01 | 4 | i2c_.frequency(400000); |
karlmaxwell67 | 1:70d7d9f1af01 | 5 | enableRGBC(); |
karlmaxwell67 | 1:70d7d9f1af01 | 6 | } |
karlmaxwell67 | 1:70d7d9f1af01 | 7 | |
karlmaxwell67 | 1:70d7d9f1af01 | 8 | int TCS3472_I2C::writeSingleRegister( char address, char data ){ |
karlmaxwell67 | 1:70d7d9f1af01 | 9 | char tx[2] = { address | 160, data }; //0d160 = 0b10100000 |
karlmaxwell67 | 1:70d7d9f1af01 | 10 | int ack = i2c_.write( SLAVE_ADDRESS << 1 , tx, 2 ); |
karlmaxwell67 | 1:70d7d9f1af01 | 11 | return ack; |
karlmaxwell67 | 1:70d7d9f1af01 | 12 | } |
karlmaxwell67 | 1:70d7d9f1af01 | 13 | |
karlmaxwell67 | 1:70d7d9f1af01 | 14 | char TCS3472_I2C::readSingleRegister( char address ){ |
karlmaxwell67 | 1:70d7d9f1af01 | 15 | char output = 255; |
karlmaxwell67 | 1:70d7d9f1af01 | 16 | char command = address | 160; //0d160 = 0b10100000 |
karlmaxwell67 | 1:70d7d9f1af01 | 17 | i2c_.write( SLAVE_ADDRESS << 1, &command, 1, true ); |
karlmaxwell67 | 1:70d7d9f1af01 | 18 | i2c_.read( SLAVE_ADDRESS << 1, &output, 1 ); |
karlmaxwell67 | 1:70d7d9f1af01 | 19 | return output; |
karlmaxwell67 | 1:70d7d9f1af01 | 20 | } |
karlmaxwell67 | 1:70d7d9f1af01 | 21 | |
karlmaxwell67 | 1:70d7d9f1af01 | 22 | int TCS3472_I2C::readMultipleRegisters( char address, char* output, int quantity ){ |
karlmaxwell67 | 1:70d7d9f1af01 | 23 | char command = address | 160; //0d160 = 0b10100000 |
karlmaxwell67 | 1:70d7d9f1af01 | 24 | i2c_.write( SLAVE_ADDRESS << 1, &command, 1, true ); |
karlmaxwell67 | 1:70d7d9f1af01 | 25 | int ack = i2c_.read( SLAVE_ADDRESS << 1, output, quantity ); |
karlmaxwell67 | 1:70d7d9f1af01 | 26 | return ack; |
karlmaxwell67 | 1:70d7d9f1af01 | 27 | } |
karlmaxwell67 | 1:70d7d9f1af01 | 28 | |
karlmaxwell67 | 1:70d7d9f1af01 | 29 | int TCS3472_I2C::enableRGBC(){ |
karlmaxwell67 | 1:70d7d9f1af01 | 30 | int ack = writeSingleRegister( ENABLE_REGISTER, 3 ); |
karlmaxwell67 | 1:70d7d9f1af01 | 31 | return ack; |
karlmaxwell67 | 1:70d7d9f1af01 | 32 | } |
karlmaxwell67 | 1:70d7d9f1af01 | 33 | |
karlmaxwell67 | 1:70d7d9f1af01 | 34 | char TCS3472_I2C::readEnableRegister(){ |
karlmaxwell67 | 1:70d7d9f1af01 | 35 | return readSingleRegister( ENABLE_REGISTER ); |
karlmaxwell67 | 1:70d7d9f1af01 | 36 | } |
karlmaxwell67 | 0:453a43c8bf2b | 37 | |
karlmaxwell67 | 1:70d7d9f1af01 | 38 | int TCS3472_I2C::getAllColours( int* readings ){ |
karlmaxwell67 | 1:70d7d9f1af01 | 39 | char buffer[8] = { 0 }; |
karlmaxwell67 | 1:70d7d9f1af01 | 40 | |
karlmaxwell67 | 1:70d7d9f1af01 | 41 | readMultipleRegisters( CDATA, buffer, 8 ); |
karlmaxwell67 | 1:70d7d9f1af01 | 42 | |
karlmaxwell67 | 1:70d7d9f1af01 | 43 | readings[0] = (int)buffer[1] << 8 | (int)buffer[0]; |
karlmaxwell67 | 1:70d7d9f1af01 | 44 | readings[1] = (int)buffer[3] << 8 | (int)buffer[2]; |
karlmaxwell67 | 1:70d7d9f1af01 | 45 | readings[2] = (int)buffer[5] << 8 | (int)buffer[4]; |
karlmaxwell67 | 1:70d7d9f1af01 | 46 | readings[3] = (int)buffer[7] << 8 | (int)buffer[6]; |
karlmaxwell67 | 0:453a43c8bf2b | 47 | |
karlmaxwell67 | 1:70d7d9f1af01 | 48 | return 0; |
karlmaxwell67 | 1:70d7d9f1af01 | 49 | } |
karlmaxwell67 | 1:70d7d9f1af01 | 50 | |
karlmaxwell67 | 1:70d7d9f1af01 | 51 | int TCS3472_I2C::getClearData(){ |
karlmaxwell67 | 1:70d7d9f1af01 | 52 | char buffer[2] = { 0 }; |
karlmaxwell67 | 1:70d7d9f1af01 | 53 | readMultipleRegisters( CDATA, buffer, 2 ); |
karlmaxwell67 | 1:70d7d9f1af01 | 54 | int reading = (int)buffer[1] << 8 | (int)buffer[0]; |
karlmaxwell67 | 1:70d7d9f1af01 | 55 | return reading; |
karlmaxwell67 | 1:70d7d9f1af01 | 56 | } |
karlmaxwell67 | 1:70d7d9f1af01 | 57 | |
karlmaxwell67 | 1:70d7d9f1af01 | 58 | int TCS3472_I2C::getRedData(){ |
karlmaxwell67 | 1:70d7d9f1af01 | 59 | char buffer[2] = { 0 }; |
karlmaxwell67 | 1:70d7d9f1af01 | 60 | readMultipleRegisters( RDATA, buffer, 2 ); |
karlmaxwell67 | 1:70d7d9f1af01 | 61 | int reading = (int)buffer[1] << 8 | (int)buffer[0]; |
karlmaxwell67 | 1:70d7d9f1af01 | 62 | return reading; |
karlmaxwell67 | 1:70d7d9f1af01 | 63 | } |
karlmaxwell67 | 1:70d7d9f1af01 | 64 | |
karlmaxwell67 | 1:70d7d9f1af01 | 65 | int TCS3472_I2C::getGreenData(){ |
karlmaxwell67 | 1:70d7d9f1af01 | 66 | char buffer[2] = { 0 }; |
karlmaxwell67 | 1:70d7d9f1af01 | 67 | readMultipleRegisters( GDATA, buffer, 2 ); |
karlmaxwell67 | 1:70d7d9f1af01 | 68 | int reading = (int)buffer[1] << 8 | (int)buffer[0]; |
karlmaxwell67 | 1:70d7d9f1af01 | 69 | return reading; |
karlmaxwell67 | 1:70d7d9f1af01 | 70 | } |
karlmaxwell67 | 1:70d7d9f1af01 | 71 | |
karlmaxwell67 | 1:70d7d9f1af01 | 72 | int TCS3472_I2C::getBlueData(){ |
karlmaxwell67 | 1:70d7d9f1af01 | 73 | char buffer[2] = { 0 }; |
karlmaxwell67 | 1:70d7d9f1af01 | 74 | readMultipleRegisters( BDATA, buffer, 2 ); |
karlmaxwell67 | 1:70d7d9f1af01 | 75 | int reading = (int)buffer[1] << 8 | (int)buffer[0]; |
karlmaxwell67 | 1:70d7d9f1af01 | 76 | return reading; |
karlmaxwell67 | 0:453a43c8bf2b | 77 | } |