Basic library for the TCS34725, based off of several example programs and the Adafruit Arduino library
Dependents: MF_FUJIKO_BASE STEM_2019 STEM_2020
TCS34725.h
- Committer:
- mwilkens241
- Date:
- 2017-03-22
- Revision:
- 4:41f1acad69e5
- Parent:
- 3:afb107db7994
File content as of revision 4:41f1acad69e5:
// TCS34725 RGB Color I2C Sensor breakout library for F030R8 Nucleo board
#ifndef MBED_TCS34725_H
#define MBED_TCS34725_H
#include "mbed.h"
//These pins should be the only piece specific to the F030R8
#define SCL PB_8
#define SDA PB_9
//I2C Address
#define SENSOR_ADDR (0x29<<1)
#define COMMAND_BIT 0x80
//Important Registers
#define TCS34725_ENABLE (0x00) //for turning on the device
#define TCS34725_ATIME (0x01) //for integration time
#define TCS34725_CONTROL (0x0F) //for setting the gain
#define TCS34725_ID (0x12)
#define TCS34725_CDATAL (0x14) /* Clear channel data */
#define TCS34725_CDATAH (0x15)
#define TCS34725_RDATAL (0x16) /* Red channel data */
#define TCS34725_RDATAH (0x17)
#define TCS34725_GDATAL (0x18) /* Green channel data */
#define TCS34725_GDATAH (0x19)
#define TCS34725_BDATAL (0x1A) /* Blue channel data */
#define TCS34725_BDATAH (0x1B)
//Configuration Bits
#define TCS34725_ENABLE_AEN (0x02) /* RGBC Enable - Writing 1 actives the ADC, 0 disables it */
#define TCS34725_ENABLE_PON (0x01) /* Power on - Writing 1 activates the internal oscillator, 0 disables it */
#define TCS34725_INTEGRATIONTIME_2_4MS 0xFF /**< 2.4ms - 1 cycle - Max Count: 1024 */
#define TCS34725_INTEGRATIONTIME_24MS 0xF6 /**< 24ms - 10 cycles - Max Count: 10240 */
#define TCS34725_INTEGRATIONTIME_50MS 0xEB /**< 50ms - 20 cycles - Max Count: 20480 */
#define TCS34725_INTEGRATIONTIME_101MS 0xD5 /**< 101ms - 42 cycles - Max Count: 43008 */
#define TCS34725_INTEGRATIONTIME_154MS 0xC0 /**< 154ms - 64 cycles - Max Count: 65535 */
#define TCS34725_INTEGRATIONTIME_700MS 0x00 /**< 700ms - 256 cycles - Max Count: 65535 */
#define TCS34725_GAIN_1X 0x00 /**< No gain */
#define TCS34725_GAIN_4X 0x01 /**< 4x gain */
#define TCS34725_GAIN_16X 0x02 /**< 16x gain */
#define TCS34725_GAIN_60X 0x03 /**< 60x gain */
/** TCS34725 control class.
*
* Example:
* @code
* //Send rgb data to the serial port
* #include "TCS34725.h"
* #include "mbed.h"
*
* TCS34725 colorSens(p9, p10); //I2C sda and scl
* Serial pc(USBTX, USBRX); //USB serial
*
* int main() {
* uint16_t r,g,b,c;
*
* if(!colorSens.init(TCS34725_INTEGRATIONTIME_101MS, TCS34725_GAIN_60X)){
* pc.printf("ERROR\n"); //check to see if i2c is responding
* }
*
* while(1) {
colorSens.getColor(r,g,b,c); //pass variables by reference...
* pc.printf("DATA: r%d g%d b%d c%d", r, g, b, c);
* wait(0.5);
* }
* }
* @endcode
*/
class TCS34725 {
private:
I2C i2c;
uint8_t t_intTime;
uint8_t t_gain;
void i2cWrite8(uint8_t addr, char reg, char data);
uint8_t i2cRead8(uint8_t addr, char reg);
uint16_t i2cRead16(uint8_t addr, char reg);
public:
/** Initialize object with default i2c pins */
TCS34725();
/** Initialize object with specific i2c pins
*
* @param i2c_sda SDA pin
* @param i2c_scl SCL pin
*/
TCS34725(PinName i2c_sda, PinName i2c_scl);
/** Boot up the sensor and checks if acking (see header for param defines)
*
* @param intTime Integration time for reading (will delay accordingly)
* @param i2c_scl Gain value
*/
bool init(char intTime, char gain);
/** Configure after initial boot (will restart sensor)
*
* @param intTime Integration time for reading (will delay accordingly)
* @param i2c_scl Gain value
* @return
* 1 if failed
*` 0 if successful
*/
void config(char intTime, char gain);
/** Returns rgbc reading from the sensor.
*
* @param r Red value (passed by reference)
* @param g Green value (passed by reference)
* @param b Blue value (passed by reference)
* @param c Clear value (all wavelengths - essentially shade) (passed by reference)
*/
void getColor(uint16_t &r, uint16_t &g, uint16_t &b, uint16_t &c);
/** Debug function... probably not useful unless youre debugging your i2c line
*
* @param deb Serial object for debugging (passed by reference)
*/
void DEBUG(Serial *deb);
};
#endif