#include <Wire.h>
#include "Adafruit_TCS34725.h"
#define redpin 3
#define greenpin 5
#define bluepin 6
#define commonAnode true
byte gammatable[256];
Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_4X);
void setup() {
Serial.begin(9600);
init_color_sensor();
init_color_leds();
generate_gamma_table();
}
void loop() {
float red, green, blue;
tcs.setInterrupt(false);
delay(60);
tcs.getRGB(&red, &green, &blue);
tcs.setInterrupt(true);
dump_values(red, green, blue);
emit_leds(red, green, blue);
if (gammatable[(int)red] < 210 && gammatable[(int)blue] > 240 && gammatable[(int)green] > 240) {
Serial.println("red");
} else if (gammatable[(int)red] > 240 && gammatable[(int)blue] < 180 && gammatable[(int)green] > 240) {
Serial.println("blue");
} else if (gammatable[(int)red] > 240 && gammatable[(int)blue] > 240 && gammatable[(int)green] < 210) {
Serial.println("green");
} else {
Serial.println("white");
}
}
void init_color_sensor() {
if (tcs.begin()) {
} else {
Serial.println("No TCS34725 found ... check your connections");
while (1);
}
}
void init_color_leds() {
pinMode(redpin, OUTPUT);
pinMode(greenpin, OUTPUT);
pinMode(bluepin, OUTPUT);
}
void generate_gamma_table() {
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;
}
}
}
void dump_values(float red, float green, float blue) {
Serial.print(gammatable[(int)red]);
Serial.print(",");
Serial.print(gammatable[(int)green]);
Serial.print(",");
Serial.print(gammatable[(int)blue]);
Serial.print(": ");
}
void emit_leds(float red, float green, float blue) {
analogWrite(redpin, gammatable[(int)red]);
analogWrite(greenpin, gammatable[(int)green]);
analogWrite(bluepin, gammatable[(int)blue]);
}