Description
I finished two exercises during the two-hour lab, using single pot controls brightness, and using one pot controls blinking and the other controls brightness. I also finish the three pots control the brightness of three LEDs at home, and the potentiometers worked very well. It really was an interesting experience.
For the home work, I recalled my experience of select colors in Photoshop by applying a slider, so I decided to transform this feature into my LED set. On one hand, instead of using the code provided by the course website, I created lines of code to control PWM in order to fake brightness. On the other hand, for the slider feature, I create a function based on the transformation formula of Hue value to RGB at http://en.wikipedia.org/wiki/HSV_color_space.
At the beginning, for some reason, the code didn’t work very well, it looked fine in the green LED, but not in the red and blue ones, say, the red one is always on, and the blues one is always off. I don’t have lots experience in debugging, so I asked help from my friend who is majoring in computer science. He found out that it is necessary to reset some variables as float, and finally, the code works!!!.
Component
- Arduino board
- White breadboard
- Three LED (the red one connects to pin11, the green one connects to pin9, and the blue one connects to pin10)
- Three 220-OHM resistors (labeled as red-red-brown-gold)
- Wires connect LED to Arduino board (black and 3 short blue ones connect to ground, and 3 yellow connect LEDs and the resistors to pin 9, 10, 11)
- 2 potentiometer with wires soldered on
- Wires connect potentiometer to Arduino board (black ones connect to ground, red ones connects to 5V, and yellow ones connect to pin 0 and 1 )
- 2 rubber bands
- USB cable
- Arduino environment
Code
/*
* Use one potentiometer to control BRIGHTNESS, and the other to control the Hue Value * Brightness-> Control PWM * Hue Value-> Contver to RGB */ // Debug flag int DEBUG = 0; int i = 0; // loop counter // Potentiameter pin settings; analog inputs; value ranges from 0 - 1023 int aIn = 0; // Control LED Blinkging PWM int bIn = 1; // Control Hue Value // Digital pin settings int rOut = 11; // goes to Red LED int gOut = 9; // goes to Green LED int bOut = 10; // goes to Blue LED // Values int aVal = 0; // Variables to store the input from the potentiometer int bVal = 0; int period = 10; // period of the PWM, millisecond float hue; // Hue Value int R, G, B; void HSB2RGB(float h, float s, float v){ //formula of converting Hue Value to RGB float f, p, q, t, r, g, b; int hi; hi = int(h/60); f = h/60-hi; p = v*(1-s); q = v*(1-f*s); t = v*(1-(1-f)*s); switch (hi){ case 0: r = v; g = t; b = p; break; case 1: r = q; g = v; b = p; break; case 2: r = p; g = v; b = t; break; case 3: r = p; g = q; b = v; break; case 4: r = t; g = p; b = v; break; case 5: r = v; g = p; b = q; break; default: r = 1.0; g = 1.0; b = 1.0; } // debugging output if (DEBUG) { if (i % 200 == 0) { // print the value of B every second Serial.print("r = "); Serial.print((int)r*1000); Serial.print(", g = "); Serial.print((int)g*1000); Serial.print(", b = "); Serial.println((int)b*1000); } } R=r*255; G=g*255; B=b*255; } // end HSB2RGB() void setup() { pinMode(rOut, OUTPUT); pinMode(gOut, OUTPUT); pinMode(bOut, OUTPUT); Serial.begin(9600); } void loop() { float lowtime, hightime; i++; aVal = analogRead(aIn); //read the value from pot 0, between 0 - 1024, for blinking bVal = analogRead(bIn); hue = (float)bVal*360/1024; hightime = (float)aVal*period/1024; lowtime = period - hightime; HSB2RGB(hue, 1.0, 1.0); analogWrite(rOut, R); analogWrite(gOut, G); analogWrite(bOut, B); /* digitalWrite(rOut, HIGH); // turn the LEDs on digitalWrite(gOut, HIGH); digitalWrite(bOut, HIGH); */ delay((int)hightime); // stop the program for some time digitalWrite(rOut, LOW); // turn the LEDs off digitalWrite(gOut, LOW); digitalWrite(bOut, LOW); delay((int)lowtime); // stop the program for some time // debugging output if (DEBUG) { if (i % 200 == 0) { // print the value of B every second Serial.print("aIn = "); Serial.print(aVal); Serial.print(", bIn = "); Serial.print(bVal); Serial.print(", hue = "); Serial.print((int)hue); Serial.print(", R = "); Serial.print(R); Serial.print(", G = "); Serial.print(G); Serial.print(", B = "); Serial.println(B); } } } // end loop()
Photograph

