0

I am doing this simple introductory exercise to light an RGB Led, but I am confused about the code in the exercise. The following is the code:

/* Adafruit Arduino - Lesson 3. RGB LED
*/
int redPin = 11;
int greenPin = 10; 
int bluePin = 9;
 
 //uncomment this line if using a Common Anode LED //#define
 COMMON_ANODE
 
void setup() { 
pinMode(redPin, OUTPUT); 
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT); }
 
void loop() { 
 setColor(255, 0, 0); // red 
 delay(1000); 
 setColor(0, 255, 0); // green 
 delay(1000); 
 setColor(0, 0, 255); // blue 
 delay(1000); 
 setColor(255, 255, 0); // yellow 
 delay(1000); 
 setColor(80, 0, 80); // purple 
 delay(1000); 
 setColor(0, 255, 255); // aqua 
 delay(1000); }
 
void setColor(int red, int green, int blue) { 
#ifdef COMMON_ANODE
 red = 255 - red;
 green = 255 - green;
 blue = 255 - blue; 
#endif 
 analogWrite(redPin, red); 
 analogWrite(greenPin, green); 
 analogWrite(bluePin, blue); }

In this code, why were they able to carry out setColor before expanding upon what it means later through void setColor(int red, int green, int blue)? Should that portion of the code come earlier or does it matter? Also I don't quite understand how the definition of the colors red, green, and blue were defined towards the bottom. I know what 255 would indicate maximum brightness, but why do you have to subtract the color from 255? Any help would be much appreciated.

CharlieHanson
1,4201 gold badge11 silver badges25 bronze badges
asked May 11, 2021 at 16:23

1 Answer 1

1

why were they able to carry out setColor before expanding upon what it means later

You are correct in C that is the case. However the Arduino IDE adds "function prototypes" to the top of your code automatically. That means you no longer have to abide by the "define before use" of C and C++.

I know what 255 would indicate maximum brightness, but why do you have to subtract the color from 255?

This is for if your LED is "common anode" instead of "common cathode". With a common anode LED you write a LOW to turn it on and a HIGH to turn it off - this is the exact opposite of a common cathode.

So to set the brightness of a common anode LED you need to use the opposite value, and since PWM goes from 0-255 the opposite is 255-0: 255 is off, and 0 is fully on.

answered May 11, 2021 at 16:29

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.