Description: For lab 2, I made my RGB LEDs have the following control mechanism:
“R” -> increase red brightness by 10%
“r” -> decrease red brightness by 10%
Similar pattern for capital and lowercase b and g for blue and green.
I experimented with a few things with the setup of my wiring and diffuser. First I had laid out the LEDs in a way where they were too far from each other to mix well, then I realized that it would be good to move them farther away from the resistors so that they had more space for the diffuser, so I did that by adding a few extra wires.
For the diffuser, I tried a few different things including a sugar packet, a coffee filter, a napkin, a disposable coffee cup top…
Then I tried half of an eggshell, which worked alright, but similarly to some of the other things that I tried, the color was coming through as three dots, rather than mixing nicer together. What worked best was a piece of napkin placed between the LEDs and the eggshell.
Components:
- Adruino board
- Breadboard
- 3 LEDs (red, green, blue)
- 3 220 ohm resistors
- 7 wires
- 0.5 eggshell
- 1 small piece of napkin
Code:
/* Jake Petterson Lab 2 -- Info 262 9/9/16 Below is the program that I wrote to control the RGB LED setup. Users can use capital R,G,B to increase the brightness of each LED, and lowercase r,g,b to decrease the brightness. */ char colorCommand; // char that will be the commmand from the user int redPin = 9; // Red LED, connected to digital pin 9 int greenPin = 10; // Green LED, connected to digital pin 10 int bluePin = 11; // Blue LED, connected to digital pin 11 double redVal = 0; double greenVal = 0; double blueVal = 0; void setup() { pinMode(redPin, OUTPUT); // sets the pins as output pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); Serial.begin(9600); analogWrite(redPin, 0); // set them all to zero brightness analogWrite(greenPin, 0); analogWrite(bluePin, 0); Serial.println("Press R to increase the red brightness by 10%.\nPress" " G to increase the green brightness by 10%. \nPress B to increase" " the blue brightness by 10%.\n\nPress r, g, or b to decrease the brightness " "by 10%."); Serial.println("\nType the single letter, then press enter."); } void loop () { // set the colorCommand to a space as a placeholder. colorCommand = ' '; // send data only when you receive data: while (Serial.available() > 0) { // read the incoming byte: colorCommand = Serial.read(); Serial.println("colorCommand: "); Serial.println(colorCommand); // use the adjustBrightness function' adjustBrightness(colorCommand, redVal, greenVal, blueVal); Serial.println("red: "); Serial.println(redVal); Serial.println("green: "); Serial.println(greenVal); Serial.println("blue: "); Serial.println(blueVal); colorCommand = ' '; } } // this function adjusts the brightness by // 10% depending on the command void adjustBrightness(char colorCommand, double &redVal, double &greenVal, double &blueVal) { if(colorCommand == 'r' || colorCommand == 'R') { if(colorCommand == 'r' && redVal != 0) { redVal = redVal - 25.5; analogWrite(redPin, redVal); Serial.println("Red down 10%"); } else if(colorCommand == 'R' && redVal != 255) { redVal = redVal + 25.5; Serial.println("Red up 10%"); analogWrite(redPin, redVal); } } if(colorCommand == 'g' || colorCommand == 'G') { if(colorCommand == 'g' && greenVal != 0) { greenVal = greenVal - 25.5; analogWrite(greenPin, greenVal); Serial.println("Green down 10%"); } else if(colorCommand == 'G' && greenVal != 255) { greenVal = greenVal + 25.5; analogWrite(greenPin, greenVal); Serial.println("Green up 10%"); } } if(colorCommand == 'b' || colorCommand == 'B') { if(colorCommand == 'b' && blueVal != 0) { blueVal = blueVal - 25.5; analogWrite(bluePin, blueVal); Serial.println("Blue down 10%"); } else if(colorCommand == 'B' && blueVal != 255) { blueVal = blueVal + 25.5; analogWrite(bluePin, blueVal); Serial.println("Blue up 10%"); } } }