Hi,
I want to be able to control LED lights to change color by averaging the color from a webcam. I found this tutorial on ambient lighting which changes the color based on the average of the computer screen: http://siliconrepublic.blogspot.com/2011/02/arduino-based-pc-ambient-lighting.html
Right now it works pretty well and I am just opening QuickTime and full screening my webcam, which basically does the trick... but I wanted to know if it would be smoother if the code just took the information directly from the webcam opposed to the screen displaying the webcam?... does that make sense?
Also in my experience the color of the LEDS is usually red when the screen is mostly black....
Below is the code for arduino and processing that I got from the link I posted above.
Arduino:
I want to be able to control LED lights to change color by averaging the color from a webcam. I found this tutorial on ambient lighting which changes the color based on the average of the computer screen: http://siliconrepublic.blogspot.com/2011/02/arduino-based-pc-ambient-lighting.html
Right now it works pretty well and I am just opening QuickTime and full screening my webcam, which basically does the trick... but I wanted to know if it would be smoother if the code just took the information directly from the webcam opposed to the screen displaying the webcam?... does that make sense?
Also in my experience the color of the LEDS is usually red when the screen is mostly black....
Below is the code for arduino and processing that I got from the link I posted above.
Arduino:
//Developed by Rajarshi Roy
int red, green, blue; //red, green and blue values
int RedPin = 10; //Red: PWM pin 10
int GreenPin = 11; //Green: PWM pin 11
int BluePin = 9; //Blue: PWM pin 9
void setup()
{
Serial.begin(9600);
//initial values (no significance)
int red = 255;
int blue = 255;
int green = 255;
}
void loop()
{
//protocol expects data in format of 4 bytes
//(xff) as a marker to ensure proper synchronization always
//followed by red, green, blue bytes
if (Serial.available()>=4) {
if(Serial.read() == 0xff){
red = Serial.read();
green= Serial.read();
blue = Serial.read();
}
}
//finally control led brightness through pulse-width modulation
analogWrite (RedPin, red);
analogWrite (GreenPin, green);
analogWrite (BluePin, blue);
delay(10); //just to be safe
}
Processing:
-
//Developed by Rajarshi Royimport java.awt.Robot; //java library that lets us take screenshotsimport java.awt.AWTException;import java.awt.event.InputEvent;import java.awt.image.BufferedImage;import java.awt.Rectangle;import java.awt.Dimension;import processing.serial.*; //library for serial communicationSerial port; //creates object "port" of serial classRobot robby; //creates object "robby" of robot classvoid setup(){port = new Serial(this, Serial.list()[0],9600); //set baud ratesize(100, 100); //window size (doesn't matter)try //standard Robot class error check{robby = new Robot();}catch (AWTException e){println("Robot class not supported by your system!");exit();}}void draw(){int pixel; //ARGB variable with 32 int bytes where//sets of 8 bytes are: Alpha, Red, Green, Bluefloat r=0;float g=0;float b=0;//get screenshot into object "screenshot" of class BufferedImageBufferedImage screenshot = robby.createScreenCapture(new Rectangle(new Dimension(1368,928)));//1368*928 is the screen resolutionint i=0;int j=0;//1368*928//I skip every alternate pixel making my program 4 times fasterfor(i =0;i<1368; i=i+2){for(j=0; j<928;j=j+2){pixel = screenshot.getRGB(i,j); //the ARGB integer has the colors of pixel (i,j)r = r+(int)(255&(pixel>>16)); //add up redsg = g+(int)(255&(pixel>>8)); //add up greensb = b+(int)(255&(pixel)); //add up blues}}r=r/(684*464); //average red (remember that I skipped ever alternate pixel)g=g/(684*464); //average greenb=b/(684*464); //average blueport.write(0xff); //write marker (0xff) for synchronizationport.write((byte)(r)); //write red valueport.write((byte)(g)); //write green valueport.write((byte)(b)); //write blue valuedelay(10); //delay for safetybackground(r,g,b); //make window background average color}
1
