Basic library for the TCS34725, based off of several example programs and the Adafruit Arduino library
Dependents: MF_FUJIKO_BASE STEM_2019 STEM_2020
Diff: TCS34725.h
- Revision:
- 3:afb107db7994
- Parent:
- 2:cc2c0831a763
- Child:
- 4:41f1acad69e5
--- a/TCS34725.h Wed Jan 25 19:25:28 2017 +0000 +++ b/TCS34725.h Wed Jan 25 20:17:57 2017 +0000 @@ -1,4 +1,7 @@ // 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 @@ -40,12 +43,83 @@ #define TCS34725_GAIN_16X 0x02 /**< 16x gain */ #define TCS34725_GAIN_60X 0x03 /**< 60x 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); +/** 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 + */ -bool TCS34725_init(char intTime, char gain); -void TCS34725_config(char intTime, char gain); -void TCS34725_getColor(uint16_t *r, uint16_t *g, uint16_t *b, uint16_t *c); +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); +}; -void TCS34725_DEBUG(Serial *deb); \ No newline at end of file +#endif \ No newline at end of file