0
\$\begingroup\$

Over the last few days I've been working on an anode RGB LED in Arduino, I've tried getting it to do an RGB spectrum but all I would get is just the colors from red to green, then it would get stuck on white and cyan, I believe that the red LED in the RGB Anode turns on and off, as the combination of green and blue is cyan and the three of them result white if they're equal which in this case I guess they are (not entirely sure).

Thing is the RGB Anode doesn't display all colors, I made it so the level of voltage given to the RGB anode is increased with a loop function and decreased once reached 255 with a decreasing function, here's the code:

 int redPin = 11;
int greenPin = 10;
int bluePin = 9;
void setup() {
 pinMode(redPin, OUTPUT);
 pinMode(greenPin, OUTPUT);
 pinMode(bluePin, OUTPUT);
}
void loop() {
redFuncInc(1);
delay(100);
greenFuncInc(1);
delay(150);
blueFuncInc(1);
delay(200);
// calling decreasing methods
redFuncDec(255);
delay(10);
greenFuncDec(255);
delay(15);
blueFuncDec(255);
delay(20);
}
// Increasing from rainbow spectrum
void redFuncInc(int red){
 for (int i = 1; i<=255; i +=1){
 analogWrite(redPin, i);
 delay(10);
}
}
void greenFuncInc(int green){
 for (int z = 1; z<=255; z +=1){
 analogWrite(greenPin, z);
 delay(20);
}
}
void blueFuncInc(int blue){
 for (int u = 1; u<=255; u +=1){
 analogWrite(bluePin, u);
 delay(30);
}
}
// Decreasing from rainbow spectrum
void redFuncDec(int red){
 for (int y = 255; y <=255; y -=1){
 analogWrite(redPin, y);
 delay(10);
 }
}
void greenFuncDec(int green){
 for (int x = 255; x <=255; x -=1){
 analogWrite(greenPin, x);
 delay(10);
 }
}
void blueFuncDec(int blue){
 for (int g = 255; g <=255; g -=1){
 analogWrite(bluePin, g);
 delay(10);
 }
}

Thanks for your help, please don't mind my English...

asked Jul 4, 2019 at 20:49
\$\endgroup\$
2
  • \$\begingroup\$ What is an "RGB Anode"? \$\endgroup\$ Commented Jul 4, 2019 at 21:04
  • \$\begingroup\$ I take that to mean a "Common Anode RGB" LED \$\endgroup\$ Commented Jul 4, 2019 at 21:10

1 Answer 1

1
\$\begingroup\$

(1) None of your Inc / Dec functions use the argument that is passed to them. Not sure if that was intentional, but it's noteworthy.

(2) Your Dec functions have a nonsensical termination condition in their loops. Instead of <=255 surely these should have >=0?

(3) The way you wrote your loop it's basically going to do the following sequence (after you fix (2) that is):

#000000 // BLACK
#010000
...
#FF0000 // RED
#FF0100
...
#FFFF00 // YELLOW
#FFFF01
...
#FFFFFF // WHITE
#FEFFFF
...
#00FFFF // CYAN
#00FEFF
...
#0000FF // BLUE
#0000FE
...
#000000 // BLACK

Not sure that's what you intended, but there you have it.

(4) Don't say z += 1 and z -= 1 in your for loops, say z++ and z--. People who read code will raise their eyebrows at the prior.

answered Jul 4, 2019 at 21:08
\$\endgroup\$
3
  • \$\begingroup\$ Thanks for the quick reply though, how can I get it show colors like purple and pink and let it just complete the spectrum and keep on the loop? (I'm pretty new to Arduino) \$\endgroup\$ Commented Jul 4, 2019 at 21:11
  • 1
    \$\begingroup\$ Take a look at this: arduino.cc/en/Tutorial/ColorCrossfader \$\endgroup\$ Commented Jul 4, 2019 at 21:13
  • 1
    \$\begingroup\$ There's no canonical way to traverse the RGB spectrum. Color space is a complicated thing, but you might benefit from reading up on Hue Saturation Luminance color space and looking for code online that converts between HSL and RGB. \$\endgroup\$ Commented Jul 4, 2019 at 21:14

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.