3 LEDs + Diffuser

alex_gaysinsky's picture

/* 

 * Serial RGB LED
 * ---------------
 * Serial commands control the brightness of R,G,B LEDs
 *
 * Hitting r,g,b reduces corresponding color brightness x2
 * Hitting R,G,B increases corresponding color brightness x2
 *
 * http://todbot.com/
 */
 
 
 
int greenPin = 9;   // Green LED, connected to digital pin 9
int bluePin  = 10;  // Blue LED,  connected to digital pin 10
int redPin   = 11;  // Red LED,   connected to digital pin 11
 
unsigned char redLevel = 0;    // Vraiable that holds current red brightness
unsigned char greenLevel = 0;  // Vraiable that holds current green brightness
unsigned char blueLevel = 0;   // Vraiable that holds current blue brightness
 
void setup() {
  pinMode(redPin,   OUTPUT);   // sets the pins as output
  pinMode(greenPin, OUTPUT);   
  pinMode(bluePin,  OUTPUT);
  
  Serial.begin(9600);
  
  analogWrite(redPin,   redLevel);   // set them all to mid brightness
  analogWrite(greenPin, greenLevel);   // set them all to mid brightness
  analogWrite(bluePin,  blueLevel);   // set them all to mid brightness
  
  Serial.println("Press r,g,b to decrease brightness and R,G,B to increase it!");  
}
 
void loop () {
  if(!Serial.available()) return;  // nothing to do
 
  // read next command
  char nextByte = Serial.read();
 
  switch (nextByte) {
      case 'r':
          redLevel = redLevel / 2;
          analogWrite(redPin, redLevel);
          break;
 
      case 'g':
          greenLevel = greenLevel / 2;
          analogWrite(greenPin, greenLevel);
          break;
 
      case 'b':
          blueLevel = blueLevel / 2;
          analogWrite(bluePin, blueLevel);
          break;
 
      case 'R':
          if (redLevel < 128) redLevel = redLevel ? redLevel * 2 : 1;
          else Serial.println("red is at maximum");
          
          analogWrite(redPin, redLevel);
          break;
 
      case 'G':
          if (greenLevel < 128) greenLevel = greenLevel ? greenLevel * 2 : 1;
          else Serial.println("green is at maximum");
           
          analogWrite(greenPin, greenLevel);
          break;
 
      case 'B':
          if (blueLevel < 128) blueLevel = blueLevel ? blueLevel * 2 : 1;
          else Serial.println("blue is at maximum");
          
          analogWrite(bluePin, blueLevel);
          break;
  }
  
  delay(100);  // wait a bit, for serial data
}
 
IMG_20110913_215112_0.jpg
IMG_20110907_122126_0.jpg
0
Your rating: None