/*
* 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
}