Contôle des LEDs RGB avec Shift Register 74hc595 :
http://www.zem.fr/arduino-controler-des-leds-rgb-avec-shiftpwm-et-des-74hc595/
Inspiré par http://www.elcojacobs.com/shiftpwm/
Led de type « Keyes » avec cathode commune (-)
https://learn.adafruit.com/adafruit-arduino-lesson-3-rgb-leds/arduino-sketch
Placer des résistances de 220 ohms sur chaque broche.
/*
RGB LED
*/
int redPin = A0; //– Avec Resistance 220 Ohms
int greenPin = A1;//– Avec Resistance 220 Ohms
int bluePin = A2;//– Avec Resistance 220 Ohms
//Et Cathode (-) //– Avec Resistance 220 Ohms
//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 circuit, you will need to use 3 Pulse Width Modulation pins, PWM for short. Pins that are not specified as PWM pins are digital pins, which can only turn on and off. PWM pins can go from lets say 3.3 volts to five volts to 1.1 volts.
In my program Red = pin 3, Blue = pin 5, and Green = pin 6.
int prevR = 0, prevG = 0, prevB = 0; // all of the previous RGB values
int const Red = 3; //pin 3
int const Blue = 5; // pin 4
int const Green = 6; // pin 5
void setup(){} // sets up the program
void loop() { //main loop of the program
RGB(255, 255, 255); // this calls the RGB function
delay(1000); //stays on white for one second
RGB(0, 0, 255);
delay(1000);
RGB(0,120,255);
delay(1000);
RGB(0, 255, 0);
delay(1000);
RGB(255, 0, 255);
delay(10);
RGB(0,0,0);
delay(1000);
}
void RGB(int R, int G, int B) {
for (int i = 0; i <= 255; i++)
{
if (i >= prevR – R && prevR < R) {
analogWrite(Red, prevR + i);
}
if (i >= prevG – G && prevG < G) {
analogWrite(Green, prevG + i);
}
if (i >= prevB – B && prevB < B) {
analogWrite(Blue, prevB + i);
}
//delay(10);
//}
//for (int i = 0; i <= 255; i++)
//{
if (i >= R – prevR && prevR > R) {
analogWrite(Red, prevR – i);
}
if (i >= G – prevG && prevG > G) {
analogWrite(Green, prevG – i);
}
if (i >= B – prevB && prevB > B) {
analogWrite(Blue, prevB – i);
}
delay(10);
}
delay(10);
analogWrite(Red, R);
analogWrite(Green, G);
analogWrite(Blue, B);
prevR = R;
prevG = G;
prevB = B;
}
Votre commentaire