Permalink
Join GitHub today
GitHub is home to over 31 million developers working together to host and review code, manage projects, and build software together.
Sign up#include <Wire.h> | |
#include "Adafruit_TCS34725.h" | |
// Pick analog outputs, for the UNO these three work well | |
// use ~560 ohm resistor between Red & Blue, ~1K for green (its brighter) | |
#define redpin 3 | |
#define greenpin 5 | |
#define bluepin 6 | |
// for a common anode LED, connect the common pin to +5V | |
// for common cathode, connect the common to ground | |
// set to false if using a common cathode LED | |
#define commonAnode true | |
// our RGB -> eye-recognized gamma color | |
byte gammatable[256]; | |
Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_4X); | |
void setup() { | |
Serial.begin(9600); | |
//Serial.println("Color View Test!"); | |
if (tcs.begin()) { | |
//Serial.println("Found sensor"); | |
} else { | |
Serial.println("No TCS34725 found ... check your connections"); | |
while (1); // halt! | |
} | |
// use these three pins to drive an LED | |
#if defined(ARDUINO_ARCH_ESP32) | |
ledcAttachPin(redpin, 1); | |
ledcSetup(1, 12000, 8); | |
ledcAttachPin(greenpin, 2); | |
ledcSetup(2, 12000, 8); | |
ledcAttachPin(bluepin, 3); | |
ledcSetup(3, 12000, 8); | |
#else | |
pinMode(redpin, OUTPUT); | |
pinMode(greenpin, OUTPUT); | |
pinMode(bluepin, OUTPUT); | |
#endif | |
// thanks PhilB for this gamma table! | |
// it helps convert RGB colors to what humans see | |
for (int i=0; i<256; i++) { | |
float x = i; | |
x /= 255; | |
x = pow(x, 2.5); | |
x *= 255; | |
if (commonAnode) { | |
gammatable[i] = 255 - x; | |
} else { | |
gammatable[i] = x; | |
} | |
//Serial.println(gammatable[i]); | |
} | |
} | |
// The commented out code in loop is example of getRawData with clear value. | |
// Processing example colorview.pde can work with this kind of data too, but It requires manual conversion to | |
// [0-255] RGB value. You can still uncomments parts of colorview.pde and play with clear value. | |
void loop() { | |
float red, green, blue; | |
tcs.setInterrupt(false); // turn on LED | |
delay(60); // takes 50ms to read | |
tcs.getRGB(&red, &green, &blue); | |
tcs.setInterrupt(true); // turn off LED | |
Serial.print("R:\t"); Serial.print(int(red)); | |
Serial.print("\tG:\t"); Serial.print(int(green)); | |
Serial.print("\tB:\t"); Serial.print(int(blue)); | |
// Serial.print("\t"); | |
// Serial.print((int)red, HEX); Serial.print((int)green, HEX); Serial.print((int)blue, HEX); | |
Serial.print("\n"); | |
// uint16_t red, green, blue, clear; | |
// | |
// tcs.setInterrupt(false); // turn on LED | |
// | |
// delay(60); // takes 50ms to read | |
// | |
// tcs.getRawData(&red, &green, &blue, &clear); | |
// | |
// tcs.setInterrupt(true); // turn off LED | |
// | |
// Serial.print("C:\t"); Serial.print(int(clear)); | |
// Serial.print("R:\t"); Serial.print(int(red)); | |
// Serial.print("\tG:\t"); Serial.print(int(green)); | |
// Serial.print("\tB:\t"); Serial.print(int(blue)); | |
// Serial.println(); | |
#if defined(ARDUINO_ARCH_ESP32) | |
ledcWrite(1, gammatable[(int)red]); | |
ledcWrite(2, gammatable[(int)green]); | |
ledcWrite(3, gammatable[(int)blue]); | |
#else | |
analogWrite(redpin, gammatable[(int)red]); | |
analogWrite(greenpin, gammatable[(int)green]); | |
analogWrite(bluepin, gammatable[(int)blue]); | |
#endif | |
} |