I recently bought a 5050 RGB 12V 3A LED strip and I set it all up with my Arduino and run this code (from adafruit website), everything is good: Example Code Once you have the strip wired up, it is easy to control the color of the strip by using PWM output, for Arduino you can use
#define REDPIN 5
#define GREENPIN 6
#define BLUEPIN 3
#define FADESPEED 5 // make this higher to slow down
void setup() {
pinMode(REDPIN, OUTPUT);
pinMode(GREENPIN, OUTPUT);
pinMode(BLUEPIN, OUTPUT);
}
void loop() {
int r, g, b;
// fade from blue to violet
for (r = 0; r < 256; r++) {
analogWrite(REDPIN, r);
delay(FADESPEED);
}
// fade from violet to red
for (b = 255; b > 0; b--) {
analogWrite(BLUEPIN, b);
delay(FADESPEED);
}
// fade from red to yellow
for (g = 0; g < 256; g++) {
analogWrite(GREENPIN, g);
delay(FADESPEED);
}
// fade from yellow to green
for (r = 255; r > 0; r--) {
analogWrite(REDPIN, r);
delay(FADESPEED);
}
// fade from green to teal
for (b = 0; b < 256; b++) {
analogWrite(BLUEPIN, b);
delay(FADESPEED);
}
// fade from teal to blue
for (g = 255; g > 0; g--) {
analogWrite(GREENPIN, g);
delay(FADESPEED);
}
}
I tried to find a way to achieve the same effect but only with two colors...red to yellow..red fade to yellow and fade to red and so on..
EDIT: Thanks to @majenko I achieved this...Fade from Red to Yellow and back on:
for (int r = 0; r < 256; r++) {
analogWrite(REDPIN, r);
analogWrite(GREENPINPIN, 255 - r);
analogWrite(BLUEPIN, 0);
delay(FADESPEED);
}
// Fade red down and blue up
for (g = 0; g < 256; g++) {
analogWrite(REDPIN, 255);
analogWrite(BLUEPIN, 0);
analogWrite(GREENPINPIN, G);
delay(FADESPEED);
}
-
What kind of arrangement are you after? Assuming red and blue are your two colours, do you want "NONE -> R -> R+B -> B -> NONE..." or "R -> B -> R -> B...", or what?Majenko– Majenko10/01/2016 18:32:49Commented Oct 1, 2016 at 18:32
-
@Majenko R ....fade to B....fade to R...fade to R and so on...FabioEnne– FabioEnne10/01/2016 18:38:32Commented Oct 1, 2016 at 18:38
1 Answer 1
The main difference between what you want and what that code does is that you want to fade both colours at once, but that code is aimed at only fading one colour at a time.
You want to fade R up whilst fading B down, and then fade R down whilst fading B up. The simplest way is with just two loops:
// Fade red up and blue down
for (int i = 0; i < 256; i++) {
analogWrite(REDPIN, i);
analogWrite(BLUEPIN, 255 - i);
delay(FADESPEED);
}
// Fade red down and blue up
for (int i = 0; i < 256; i++) {
analogWrite(REDPIN, 255 - i);
analogWrite(BLUEPIN, i);
delay(FADESPEED);
}
One fade value (i
) per loop, and a little bit of maths to turn 0-255 into 255-0 for the value you are fading down.
For Red->Yellow->Red you just need to keep red on and fade green on and off. You already have code to fade green on and off in your original program:
// fade from red to yellow
for (g = 0; g < 256; g++) {
analogWrite(GREENPIN, g);
delay(FADESPEED);
}
// fade from teal to blue
for (g = 255; g > 0; g--) {
analogWrite(GREENPIN, g);
delay(FADESPEED);
}
Couple that with setting the red and blue to on and off respectively, and you have:
#define REDPIN 5
#define GREENPIN 6
#define BLUEPIN 3
#define FADESPEED 5 // make this higher to slow down
void setup() {
pinMode(REDPIN, OUTPUT);
pinMode(GREENPIN, OUTPUT);
pinMode(BLUEPIN, OUTPUT);
analogWrite(REDPIN, 255);
analogWrite(BLUEPIN, 0);
}
void loop() {
int g;
// fade from red to yellow
for (g = 0; g < 256; g++) {
analogWrite(GREENPIN, g);
delay(FADESPEED);
}
// fade from yellow to red
for (g = 255; g > 0; g--) {
analogWrite(GREENPIN, g);
delay(FADESPEED);
}
}
-
Comments are not for extended discussion; this conversation has been moved to chat.10/02/2016 20:46:44Commented Oct 2, 2016 at 20:46