First run the NeoPixel test sketch to make sure all your pixels are connected and receiving good signal. Reinforce connections with more conductive thread as needed.
Follow instructions on the color sensor guide for installing the code library. Run the test code with your serial monitor to be sure your color sensor is hooked up properly and working.
For this project, copy and paste this code into the Adafruit Arduino IDE:
Follow instructions on the color sensor guide for installing the code library. Run the test code with your serial monitor to be sure your color sensor is hooked up properly and working.
For this project, copy and paste this code into the Adafruit Arduino IDE:
#include <Wire.h> #include "Adafruit_TCS34725.h" #include <Adafruit_NeoPixel.h> // Parameter 1 = number of pixels in strip // Parameter 2 = pin number (most are valid) // Parameter 3 = pixel type flags, add together as needed: // NEO_RGB Pixels are wired for RGB bitstream // NEO_GRB Pixels are wired for GRB bitstream // NEO_KHZ400 400 KHz bitstream (e.g. FLORA pixels) // NEO_KHZ800 800 KHz bitstream (e.g. High Density LED strip) Adafruit_NeoPixel strip = Adafruit_NeoPixel(12, 6, NEO_GRB + NEO_KHZ800); // 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!"); strip.begin(); strip.show(); // Initialize all pixels to 'off' if (tcs.begin()) { Serial.println("Found sensor"); } else { Serial.println("No TCS34725 found ... check your connections"); while (1); // halt! } // 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; gammatable[i] = x; //Serial.println(gammatable[i]); } for (int i=0; i<3; i++){ //this sequence flashes the first pixel three times as a countdown to the color reading. strip.setPixelColor (0, strip.Color(188, 188, 188)); //white, but dimmer-- 255 for all three values makes it blinding! strip.show(); delay(1000); strip.setPixelColor (0, strip.Color(0, 0, 0)); strip.show(); delay(500); } uint16_t clear, red, green, blue; 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(clear); Serial.print("\tR:\t"); Serial.print(red); Serial.print("\tG:\t"); Serial.print(green); Serial.print("\tB:\t"); Serial.print(blue); // Figure out some basic hex code for visualization uint32_t sum = red; sum += green; sum += blue; //sum += clear; // clear contains RGB already so no need to re-add it float r, g, b; r = red; r /= sum; g = green; g /= sum; b = blue; b /= sum; r *= 256; g *= 256; b *= 256; Serial.print("\t"); Serial.print((int)r, HEX); Serial.print((int)g, HEX); Serial.print((int)b, HEX); Serial.println(); Serial.print((int)r ); Serial.print(" "); Serial.print((int)g);Serial.print(" "); Serial.println((int)b ); colorWipe(strip.Color(gammatable[(int)r], gammatable[(int)g], gammatable[(int)b]), 0); } // Fill the dots one after the other with a color void colorWipe(uint32_t c, uint8_t wait) { for(uint16_t i=0; i<strip.numPixels(); i++) { strip.setPixelColor(i, c); strip.show(); delay(wait); } } void loop() { //loop is empty because it only takes the color reading once on power up! Turn the scarf off and on again to change the color. }
The first pixel in the chain will flash three times as a countdown to the color sensor reading. Place an object over the sensor during this time, then the LEDs will all light up in the color that was sensed.
To update the color, press the reset button on FLORA (while connected via USB or battery) or turn the board off and back on (only available while on battery power).
To update the color, press the reset button on FLORA (while connected via USB or battery) or turn the board off and back on (only available while on battery power).
Page last edited May 02, 2013
Text editor powered by tinymce.