Class which provides functions to control a TAOS TCS3472 Color Light-to-Digital Converter with IR Filter via I2C. (Tidied up)

Dependents:   openwear-lifelogger-example

Fork of TCS3472_I2C by Karl Maxwell

Files at this revision

API Documentation at this revision

Comitter:
karlmaxwell67
Date:
Wed Mar 19 18:48:12 2014 +0000
Parent:
1:70d7d9f1af01
Child:
3:6a89ac4a1979
Commit message:
Added functions setIntegrationTime, enableWait, disableWait, enableInterrupt, disableInterrupt and setWaitTime.

Changed in this revision

TCS3472_I2C.cpp Show annotated file Show diff for this revision Revisions of this file
TCS3472_I2C.h Show annotated file Show diff for this revision Revisions of this file
--- a/TCS3472_I2C.cpp	Wed Mar 19 17:23:11 2014 +0000
+++ b/TCS3472_I2C.cpp	Wed Mar 19 18:48:12 2014 +0000
@@ -74,4 +74,53 @@
     readMultipleRegisters( BDATA, buffer, 2 );
     int reading = (int)buffer[1] << 8 | (int)buffer[0];
     return reading;
+}
+
+int TCS3472_I2C::setIntegrationTime( const float itime ){
+    char atime = 256 - itime / 2.4;
+    int ack = writeSingleRegister( ATIME, atime );
+    return ack;
+}
+
+int TCS3472_I2C::enableWait(){
+    char enable_old = readSingleRegister( ENABLE_REGISTER );
+    char enable_new = enable_old | 8; // sets WEN (bit 4) to 1
+    int ack = writeSingleRegister( ENABLE_REGISTER, enable_new );
+    return ack;
+}
+
+int TCS3472_I2C::disableWait(){
+    char enable_old = readSingleRegister( ENABLE_REGISTER );
+    char enable_new = enable_old & 247; // sets WEN (bit 4) to 0
+    int ack = writeSingleRegister( ENABLE_REGISTER, enable_new );
+    return ack;
+}
+
+int TCS3472_I2C::enableInterrupt(){
+    char enable_old = readSingleRegister( ENABLE_REGISTER );
+    char enable_new = enable_old | 16; // sets AIEN (bit 5) to 1
+    int ack = writeSingleRegister( ENABLE_REGISTER, enable_new );
+    return ack;
+}
+
+int TCS3472_I2C::disableInterrupt(){
+    char enable_old = readSingleRegister( ENABLE_REGISTER );
+    char enable_new = enable_old & 239; // sets AIEN (bit 5) to 0
+    int ack = writeSingleRegister( ENABLE_REGISTER, enable_new );
+    return ack;
+}
+
+int TCS3472_I2C::setWaitTime( const float time ){
+    int ack = 1;
+    char wtime = 0;
+    if ( time >= 2.4 && time <= 614.4 ){
+        ack = writeSingleRegister( CONFIGURATION_REGISTER, 0 ); // sets WLONG to 0
+        wtime = 256 - time / 2.4;
+    }
+    else if ( time > 614.4 && time <= 7400 ){
+        ack = writeSingleRegister( CONFIGURATION_REGISTER, 2 ); // sets WLONG to 1
+        wtime = 256 - ( time / 12 ) / 2.4;
+    } 
+    ack = ack || writeSingleRegister( WTIME, wtime );
+    return ack;
 }
\ No newline at end of file
--- a/TCS3472_I2C.h	Wed Mar 19 17:23:11 2014 +0000
+++ b/TCS3472_I2C.h	Wed Mar 19 18:48:12 2014 +0000
@@ -4,7 +4,11 @@
 
 //Defines 
 #define SLAVE_ADDRESS           0x29
+
 #define ENABLE_REGISTER         0x00
+#define ATIME                   0x01
+#define WTIME                   0x03
+#define CONFIGURATION_REGISTER  0x0D
 #define CDATA                   0x14
 #define RDATA                   0x16
 #define GDATA                   0x18
@@ -20,12 +24,18 @@
     int getGreenData();
     int getBlueData();
     
-    char readEnableRegister();
+    int setIntegrationTime( const float itime ); // itime (in ms) should be in the range 2.4 - 614.4ms.
+    int enableWait();
+    int disableWait();
+    int enableInterrupt();
+    int disableInterrupt();
+    int setWaitTime( const float wtime ); // wtime (in ms) should be in the range 2.4 - 7400ms.
 
 private:
     I2C i2c_;
     
     int enableRGBC();
+    char readEnableRegister();
     int writeSingleRegister( char address, char data );
     char readSingleRegister( char address );
     int readMultipleRegisters( char address, char* output, int quantity );