Created
January 5, 2011 20:59
-
-
Save jimsynz/766994 to your computer and use it in GitHub Desktop.
Arduino sketch to cycle an RGB LED through the colour spectrum.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const int redPin = 11; | |
const int greenPin = 10; | |
const int bluePin = 9; | |
void setup() { | |
// Start off with the LED off. | |
setColourRgb(0,0,0); | |
} | |
void loop() { | |
unsigned int rgbColour[3]; | |
// Start off with red. | |
rgbColour[0] = 255; | |
rgbColour[1] = 0; | |
rgbColour[2] = 0; | |
// Choose the colours to increment and decrement. | |
for (int decColour = 0; decColour < 3; decColour += 1) { | |
int incColour = decColour == 2 ? 0 : decColour + 1; | |
// cross-fade the two colours. | |
for(int i = 0; i < 255; i += 1) { | |
rgbColour[decColour] -= 1; | |
rgbColour[incColour] += 1; | |
setColourRgb(rgbColour[0], rgbColour[1], rgbColour[2]); | |
delay(5); | |
} | |
} | |
} | |
void setColourRgb(unsigned int red, unsigned int green, unsigned int blue) { | |
analogWrite(redPin, red); | |
analogWrite(greenPin, green); | |
analogWrite(bluePin, blue); | |
} |
Otherwise the LED doesn't ever hit a pure red output.
??? WHY ???
for (int decColour = 0; decColour < 3; decColour += 1) {
// When `decColour ==2`
int incColour = decColour == 2 ? 0 : decColour + 1;
// `incColour = 0` at this moment
After finish the i loop
,
rgbColour[0]=255;
and rgbColour[1]=rgbColour[2]=0; ... back to pure red
again...
right ?
Another kinds of colour cycle
it might ignore darker shade problem
but it's total different spectrum with original
void loop() {
unsigned int rgbColour[3];
// Start off with red.
rgbColour[0] = 255;
rgbColour[1] = 255; //// Different place !
rgbColour[2] = 0;
// Choose the colours to increment and decrement.
for (int decColour = 0; decColour < 3; decColour += 1) {
int incColour = (0==decColour ) ? 2 : decColour - 1; //// Different place !
// cross-fade the two colours.
for(int i = 0; i < 255; i += 1) {
rgbColour[decColour] -= 1;
rgbColour[incColour] += 1;
setColourRgb(rgbColour[0], rgbColour[1], rgbColour[2]);
delay(5);
}
}
}
for states :
255, 0, 0
255, 255, 0
0, 255, 0
0, 255, 255
0, 0, 255
255, 0, 255
255, 0, 0
void loop() {
unsigned int rgbColour[3];
// Start off with red.
rgbColour[0] = 255;
rgbColour[1] = 0;
rgbColour[2] = 0;
int decColour =0;
int incColour =1;
void loop() {
if (255<=rgbColour[incColour]) {
if (0>=rgbColour[decColour]) {
decColour++; decColour %= 3;
incColour++; incColour %= 3;
} else // if (0==rgbColour[decColour]) {
rgbColour[decColour] -= 15; // --
} else // if (255==rgbColour[incColour]) {
rgbColour[incColour] += 15; // ++
setColourRgb(rgbColour[0], rgbColour[1], rgbColour[2]);
delay(5);
}
}
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
i have this, and i want to implement this into my code using one of the 'case' statements i have. now, i have no clue what i'm doing so help would be appreciated. i want to add it into the lowest one (play/pause key)
=]ppm #include <IRremote.h>
// Define sensor pin
const int RECV_PIN = 4;
// Define LED pin constants
const int redPin = 3;
const int greenPin = 5;
const int bluePin = 6;
// Define integer to remember toggle state
int togglestate = 0;
// Define IR Receiver and Results Objects
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup(){
// Enable the IR Receiver
irrecv.enableIRIn();
// Set LED pins as Outputs
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}
void loop(){
if (irrecv.decode(&results)){
}
}