Introduction: RGB LED Transition (Arduino)
Hello Guys, in this instructable I will give you a code for transtioning an LED. My group, Newton Labs, has spent quite a bit of time on this. Transitioning isn't as easy as it seems for a nice smooth transition.
Submitted by Newton Labs for the Instructables Sponsorship Program
Submitted by Newton Labs for the Instructables Sponsorship Program
Step 1: The Circuit
In this circuit, you will need to use 3 Pulse Width Modulation pins, PWM for short. Pins that are not specified as PWM pins are digital pins, which can only turn on and off. PWM pins can go from lets say 3.3 volts to five volts to 1.1 volts.
In my program Red = pin 3, Blue = pin 5, and Green = pin 6.
In my program Red = pin 3, Blue = pin 5, and Green = pin 6.
Step 2: The Code
int prevR = 0, prevG = 0, prevB = 0; // all of the previous RGB values
int const Red = 3; //pin 3
int const Blue = 5; // pin 4
int const Green = 6; // pin 5
void setup(){} // sets up the program
void loop() { //main loop of the program
RGB(255, 255, 255); // this calls the RGB function
delay(1000); //stays on white for one second
RGB(0, 0, 255);
delay(1000);
RGB(0,120,255);
delay(1000);
RGB(0, 255, 0);
delay(1000);
RGB(255, 0, 255);
delay(10);
RGB(0,0,0);
delay(1000);
}
void RGB(int R, int G, int B) {
for (int i = 0; i <= 255; i++)
{
if (i >= prevR - R && prevR < R) {
analogWrite(Red, prevR + i);
}
if (i >= prevG - G && prevG < G) {
analogWrite(Green, prevG + i);
}
if (i >= prevB - B && prevB < B) {
analogWrite(Blue, prevB + i);
}
//delay(10);
//}
//for (int i = 0; i <= 255; i++)
//{
if (i >= R - prevR && prevR > R) {
analogWrite(Red, prevR - i);
}
if (i >= G - prevG && prevG > G) {
analogWrite(Green, prevG - i);
}
if (i >= B - prevB && prevB > B) {
analogWrite(Blue, prevB - i);
}
delay(10);
}
delay(10);
analogWrite(Red, R);
analogWrite(Green, G);
analogWrite(Blue, B);
prevR = R;
prevG = G;
prevB = B;
}
int const Red = 3; //pin 3
int const Blue = 5; // pin 4
int const Green = 6; // pin 5
void setup(){} // sets up the program
void loop() { //main loop of the program
RGB(255, 255, 255); // this calls the RGB function
delay(1000); //stays on white for one second
RGB(0, 0, 255);
delay(1000);
RGB(0,120,255);
delay(1000);
RGB(0, 255, 0);
delay(1000);
RGB(255, 0, 255);
delay(10);
RGB(0,0,0);
delay(1000);
}
void RGB(int R, int G, int B) {
for (int i = 0; i <= 255; i++)
{
if (i >= prevR - R && prevR < R) {
analogWrite(Red, prevR + i);
}
if (i >= prevG - G && prevG < G) {
analogWrite(Green, prevG + i);
}
if (i >= prevB - B && prevB < B) {
analogWrite(Blue, prevB + i);
}
//delay(10);
//}
//for (int i = 0; i <= 255; i++)
//{
if (i >= R - prevR && prevR > R) {
analogWrite(Red, prevR - i);
}
if (i >= G - prevG && prevG > G) {
analogWrite(Green, prevG - i);
}
if (i >= B - prevB && prevB > B) {
analogWrite(Blue, prevB - i);
}
delay(10);
}
delay(10);
analogWrite(Red, R);
analogWrite(Green, G);
analogWrite(Blue, B);
prevR = R;
prevG = G;
prevB = B;
}
Step 3: Hooray!
You are done and you should have Revision 3 of my RGB LED transitioning program!