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.

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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy