Difference between revisions of "3rd Inning"
Jump to navigation
Jump to search
Notyou007a (talk | contribs) |
|||
(12 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
+ | __NOTOC__ | ||
==Introduction== | ==Introduction== | ||
− | '''Tri-color LED fading''' | + | '''Tri-color LED fading''' |
+ | This is the way to hook up a tri-color LED. Basically you are hooking up 3 leds that have a common ground. The average voltage that each led uses to power itself is varied using pulse width modulation. The code basically does a neato nested loop to vary the colors. This is a fun circuit to play with. Make sure to use the resistors or you may burn up your LED - The cost a couple of bucks! | ||
==Components Needed== | ==Components Needed== | ||
Line 13: | Line 15: | ||
==How to== | ==How to== | ||
− | + | # refer to the fritzing drawing to place the wires | |
+ | # upload the code below using cut and paste | ||
+ | # Run and watch the fading of the led! | ||
==Schematic== | ==Schematic== | ||
+ | [[File:Lvl1-Inning3 schem.jpg]] | ||
==Fritzing== | ==Fritzing== | ||
+ | [[File:Lvl1-Inning3 bb.jpg]] | ||
==Code== | ==Code== | ||
+ | Cut and paste this into your Arduino code window! | ||
+ | |||
+ | |||
+ | <pre> | ||
+ | int RED = 9; // RED pin of the LED to PWM pin 9 | ||
+ | int GREEN = 10; // GREEN pin of the LED to PWM pin 10 | ||
+ | int BLUE = 11; // BLUE pin of the LED to PWM pin 11 | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | // nothing for setup | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | for(int r = 0; r < 1024; r+=5) { | ||
+ | for(int g = 0; g < 1024; g+=5) { | ||
+ | for(int b = 0; b < 1024; b+=5) { | ||
+ | analogWrite(RED, r); | ||
+ | analogWrite(GREEN, g); | ||
+ | analogWrite(BLUE, b); | ||
+ | delay(30); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | </pre> | ||
+ | |||
+ | or cut and paste this one... it is neater | ||
+ | |||
+ | <pre> | ||
+ | //This code comes from... | ||
+ | //http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1207331496 | ||
+ | //modified to just go through a pretty color loop! | ||
+ | //use tools->serial monitor to watch the values | ||
+ | //bpw 5/10/10 | ||
+ | |||
+ | |||
+ | int rpin = 9; // RED pin of the LED to PWM pin 9 | ||
+ | int gpin = 10; // GREEN pin of the LED to PWM pin 10 | ||
+ | int bpin = 11; // BLUE pin of the LED to PWM pin 11 | ||
+ | |||
+ | int r=0, g=0, b=0; | ||
+ | float h; | ||
+ | |||
+ | |||
+ | void h2rgb(float h, int &R, int &G, int &B); | ||
+ | |||
+ | void setup() // run once, when the sketch starts | ||
+ | { | ||
+ | Serial.begin(9600); | ||
+ | } | ||
+ | |||
+ | |||
+ | void loop() // run over and over again | ||
+ | { | ||
+ | |||
+ | for (int val = 0; val <1024; val++) { | ||
+ | h = ((float)val)/1024; | ||
+ | |||
+ | h2rgb(h,r,g,b); | ||
+ | Serial.println (val) ; | ||
+ | Serial.println (h) ; | ||
+ | Serial.println (r) ; | ||
+ | Serial.println (g) ; | ||
+ | Serial.println (b) ; | ||
+ | Serial.println (" ") ; | ||
+ | |||
+ | analogWrite(rpin, r); | ||
+ | analogWrite(gpin, g); | ||
+ | analogWrite(bpin, b); | ||
+ | //delay(50); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void h2rgb(float H, int& R, int& G, int& B) { | ||
+ | |||
+ | int var_i; | ||
+ | float S=1, V=1, var_1, var_2, var_3, var_h, var_r, var_g, var_b; | ||
+ | |||
+ | if ( S == 0 ) //HSV values = 0 ÷ 1 | ||
+ | { | ||
+ | R = V * 255; | ||
+ | G = V * 255; | ||
+ | B = V * 255; | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | var_h = H * 6; | ||
+ | if ( var_h == 6 ) var_h = 0; //H must be < 1 | ||
+ | var_i = int( var_h ) ; //Or ... var_i = floor( var_h ) | ||
+ | var_1 = V * ( 1 - S ); | ||
+ | var_2 = V * ( 1 - S * ( var_h - var_i ) ); | ||
+ | var_3 = V * ( 1 - S * ( 1 - ( var_h - var_i ) ) ); | ||
+ | |||
+ | if ( var_i == 0 ) { | ||
+ | var_r = V ; | ||
+ | var_g = var_3 ; | ||
+ | var_b = var_1 ; | ||
+ | } | ||
+ | else if ( var_i == 1 ) { | ||
+ | var_r = var_2 ; | ||
+ | var_g = V ; | ||
+ | var_b = var_1 ; | ||
+ | } | ||
+ | else if ( var_i == 2 ) { | ||
+ | var_r = var_1 ; | ||
+ | var_g = V ; | ||
+ | var_b = var_3 ; | ||
+ | } | ||
+ | else if ( var_i == 3 ) { | ||
+ | var_r = var_1 ; | ||
+ | var_g = var_2 ; | ||
+ | var_b = V ; | ||
+ | } | ||
+ | else if ( var_i == 4 ) { | ||
+ | var_r = var_3 ; | ||
+ | var_g = var_1 ; | ||
+ | var_b = V ; | ||
+ | } | ||
+ | else { | ||
+ | var_r = V ; | ||
+ | var_g = var_1 ; | ||
+ | var_b = var_2 ; | ||
+ | } | ||
+ | |||
+ | R = (1-var_r) * 255; //RGB results = 0 ÷ 255 | ||
+ | G = (1-var_g) * 255; | ||
+ | B = (1-var_b) * 255; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | </pre> | ||
==Troubleshooting== | ==Troubleshooting== | ||
− | *is your led in correctly | + | *is your led in correctly (the longest pin(cathode) should connect to ground) |
*code for the pins on Arduino correct | *code for the pins on Arduino correct | ||
==Resources== | ==Resources== | ||
− | [http://wiring.org.co/learning/basics/rgbled.html | + | Most of this example is from [http://wiring.org.co/learning/basics/rgbled.html http://wiring.org.co/learning/basics/rgbled.html]. |
+ | |||
+ | A great thread on hue controlled tri-colored LEDs is here... | ||
+ | [http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1207331496 http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1207331496] | ||
+ | |||
+ | [[Category:HOWTO]] |
Latest revision as of 23:49, 25 June 2015
Introduction
Tri-color LED fading
This is the way to hook up a tri-color LED. Basically you are hooking up 3 leds that have a common ground. The average voltage that each led uses to power itself is varied using pulse width modulation. The code basically does a neato nested loop to vary the colors. This is a fun circuit to play with. Make sure to use the resistors or you may burn up your LED - The cost a couple of bucks!
Components Needed
- Freeduino or Arduino or clone
- USB cable for Freeduino
- Freeduino development software - download here!
- Solderless Breadboard
- Hookup wire 22gauge solid
- Common Cathode LED
How to
- refer to the fritzing drawing to place the wires
- upload the code below using cut and paste
- Run and watch the fading of the led!
Schematic
Fritzing
Code
Cut and paste this into your Arduino code window!
int RED = 9; // RED pin of the LED to PWM pin 9 int GREEN = 10; // GREEN pin of the LED to PWM pin 10 int BLUE = 11; // BLUE pin of the LED to PWM pin 11 void setup() { // nothing for setup } void loop() { for(int r = 0; r < 1024; r+=5) { for(int g = 0; g < 1024; g+=5) { for(int b = 0; b < 1024; b+=5) { analogWrite(RED, r); analogWrite(GREEN, g); analogWrite(BLUE, b); delay(30); } } } }
or cut and paste this one... it is neater
//This code comes from... //http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1207331496 //modified to just go through a pretty color loop! //use tools->serial monitor to watch the values //bpw 5/10/10 int rpin = 9; // RED pin of the LED to PWM pin 9 int gpin = 10; // GREEN pin of the LED to PWM pin 10 int bpin = 11; // BLUE pin of the LED to PWM pin 11 int r=0, g=0, b=0; float h; void h2rgb(float h, int &R, int &G, int &B); void setup() // run once, when the sketch starts { Serial.begin(9600); } void loop() // run over and over again { for (int val = 0; val <1024; val++) { h = ((float)val)/1024; h2rgb(h,r,g,b); Serial.println (val) ; Serial.println (h) ; Serial.println (r) ; Serial.println (g) ; Serial.println (b) ; Serial.println (" ") ; analogWrite(rpin, r); analogWrite(gpin, g); analogWrite(bpin, b); //delay(50); } } void h2rgb(float H, int& R, int& G, int& B) { int var_i; float S=1, V=1, var_1, var_2, var_3, var_h, var_r, var_g, var_b; if ( S == 0 ) //HSV values = 0 ÷ 1 { R = V * 255; G = V * 255; B = V * 255; } else { var_h = H * 6; if ( var_h == 6 ) var_h = 0; //H must be < 1 var_i = int( var_h ) ; //Or ... var_i = floor( var_h ) var_1 = V * ( 1 - S ); var_2 = V * ( 1 - S * ( var_h - var_i ) ); var_3 = V * ( 1 - S * ( 1 - ( var_h - var_i ) ) ); if ( var_i == 0 ) { var_r = V ; var_g = var_3 ; var_b = var_1 ; } else if ( var_i == 1 ) { var_r = var_2 ; var_g = V ; var_b = var_1 ; } else if ( var_i == 2 ) { var_r = var_1 ; var_g = V ; var_b = var_3 ; } else if ( var_i == 3 ) { var_r = var_1 ; var_g = var_2 ; var_b = V ; } else if ( var_i == 4 ) { var_r = var_3 ; var_g = var_1 ; var_b = V ; } else { var_r = V ; var_g = var_1 ; var_b = var_2 ; } R = (1-var_r) * 255; //RGB results = 0 ÷ 255 G = (1-var_g) * 255; B = (1-var_b) * 255; } }
Troubleshooting
- is your led in correctly (the longest pin(cathode) should connect to ground)
- code for the pins on Arduino correct
Resources
Most of this example is from http://wiring.org.co/learning/basics/rgbled.html.
A great thread on hue controlled tri-colored LEDs is here... http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1207331496