Video of it working:
Remove these ads by
Signing UpStep 1: Materials
* Red LED
* Green LED
* Blue LED
* RGB LED
* 3 phototransistors - I used OP550B's, but others could be used.
* 6 220 ohm resistors
* 3 10k ohm resistors
* Cardboard or some other divider to separate the LED's
* Breadboard or circuit board and soldering materials
* wires
* Arduino and usb cord
* Computer
* Electrical tape
* Cards of various colors - I used index cards covered in electrical tape of different colors.




































Visit Our Store »
Go Pro Today »




Of what use is comparing colors to some one who is color blind like I am,
if you don't tell me what colors i am looking at ???
I had not considered that use case. If you add the following code to the setColor function, it should print the name of the color in addition to changing the color of the RGB LED. I haven't tested this code (I don't currently have access to the Arduino), but it compiles. Does this help? Thanks for your interest!
if (color == WHITE) {
Serial.print("WHITE");
} else if (color == RED) {
Serial.print("RED");
} else if (color == YELLOW) {
Serial.print("YELLOW");
} else if (color == MAGENTA) {
Serial.print("MAGENTA");
} else if (color == BLUE) {
Serial.print("BLUE");
} else if (color == GREEN) {
Serial.print("GREEN");
} else {
Serial.print("BLACK OR OFF OR UNREADABLE");
}
When I turn on the program and show the white card, the RGB flashes a couple of colours but it does not turn off for me to switch to the black card. Any ideas? Also-to clarify, is the last section of the code required only if we want to adjust the RGB values? If we want to use the same values you wrote, then we should just keep that part of the code commented out, correct?
I re-uploaded the video. Did you get it working? Let me know if you have any more questions. Good luck!
This part is explained in the missing video. Sorry for the inconvenience.:
To do exactly what I did with the code as-is, you should have the white card showing when you start the program. The RGB LED should flash red, then green, then blue, then white for a longer time than the colors. After no more than about 2 seconds, the light should turn off. After it detects that the white card is no longer there, it should wait for 5 seconds (while you switch to the black card) and then do calculations based on the black card. After that finishes, the LED should turn white. When the LED turns white after being off, it is ready to read cards.
Did you set OFF to {0,0,0}? Can you post any serial output from when you tried to run it?
The last section of the code (from "//comment out the rest of this loop to just display values and not use the RGB LED" to the end of the if/else block) is the part that makes the RGB LED respond to the card changing. If you comment it out, it will dump RGB values to the serial output, and the LED will stay white. Is this the block of code you are referring to? None of it is commented out in the code I posted.
To generate the numbers I used, I ran the program with that code commented out and looked at the serial output when I showed it different cards. I noted the RGB values and the variation for each color card, and hard coded the average RGB values as the values in the ICOLOR arrays. So, to calibrate it for your cards/your background lighting, you should do the same. If you want to use the same values I wrote, you should not comment anything out. Does that answer your question?