Programer led rgb Ws2813

Salut j'aurais besoin d'aide pour programmer ws2813 rgb 30led, j'utilise 3 potentiemetre et avec chaque potentiemetre je doit avoir une couleur rouge jaune vert merci de m'aider.

Please try a forum area in your own language

La première chose qu'on va te demander ici est de choisir:
− tu veux que l'on fasse tout le projet à ta place ⇒ Ce n'est pas le bon forum
− tu as besoin d'aide ⇒ il faut que tu dises où tu en es, notamment le programme déja fait, le choix de la bibliothèque, le câblage... Si il y a un point que tu ne sait pas choisir, il faut que tu dises ce que tu veux, ce à quoi tu penses...

Commencez par installer une bonne librairie, à tout exemple qu'ils apporteront il vous sera facile d'ajouter la lecture des potentiomètres. Je recommande FastLED ou Adafruit_NeoPixel comme les meilleurs.

Bonjour dydy55

J'aime beaucoup utiliser ces LED, elles sont faciles d'emploi pour de superbes effets!

Tu dois, tout d'abord, installer la bibliothèque Adafruit NeoPixel.
Tu fais quelques exemples pour apréhender la "mécanique".
Tu verras que les couleurs sont commandées séparément R, G, B (Rouge, Vert, Bleu).
La luminosité des couleurs se règle de 0 à 255. Ainsi, pour alumer la LED n, l'ordre est

strip.setPixelColor(n, 0, 255, 127);
strip.show();

n est le numéro de la LED, Rouge est éteinte, vert totalement allumée et bleu allumée à moitié.

Tu lis tes potentiomètres qui te donnent une valeur de 0 à 1023.
Tu "reserres" ces valeurs avec map():

int potRougeValeur = 0;
....
potRougeValeur = analogRead(A0);
potRougeValeur = map(potRougeValeur , 0, 1023, 0, 255);
La même chose pour le vert et le bleu.

Puis
strip.setPixelColor(n, potRougeValeur , potVertValeur , potBleuValeur );
strip.show();

C'est dans les grandes lignes, je n'ai pas testé "en vrai".

A+
Cordialement
jpbbricole

Cher et lent car le calcul se fait sur des long. En plus il y a une division.
potRougeValeur /= 4;
est plus simple et en plus c'est traduit par un décalage donc peu d'octets programme. Si en plus on utilise une variable 8 bits, c'est encore mieux, sachant qu'elle est définie par
void setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b);
Autant faire la transformation entier 16 bits -> entier 8 bits le plus tôt:

uint8_t potRougeValeur;
....
potRougeValeur = analogRead(A0) / 4;

Serait-il possible d'attendre la réponse de l'OP avant de partir dans tous les sens ?

Et serait-il possible de rester sur le forum public afin que tout le monde profite des conseils au lieu de travailler dans son coin en messages privés.

salut je suis un débutant ,j'ai réussi a trouver un exemple et a attribuer une couleur au trois potentiomètre ,mais j'ai placer un quatrième potentiomètre afin de régler la luminosité mais sa ne marche pas qui pourrait m'aider voici le programme:

#include"FastLED.h"

#define PIN_SLIDE_POT_A A0
#define PIN_SLIDE_POT_B A1
#define PIN_SLIDE_POT_C A2
#define NUM_LEDS 60
#define PIN_LED 5
#define LED_COLOR CRGB::DarkOrchid // see Pixel reference · FastLED/FastLED Wiki · GitHub for a full list, e.g. CRGB::AliceBlue, CRGB::Amethyst, CRGB::AntiqueWhite...
#define MAX_SLIDE_POT_ANALGOG_READ_VALUE 700

CRGB rgb_led[NUM_LEDS];

void setup() {

pinMode(PIN_SLIDE_POT_A, INPUT);
pinMode(PIN_SLIDE_POT_B, INPUT);
pinMode(PIN_SLIDE_POT_C, INPUT);
FastLED.addLeds<WS2813, PIN_LED>(rgb_led, NUM_LEDS);

Serial.println("Setup done.");
Serial.begin(9600);
}

void loop() {
// 1) Analog value of slide pot is read
int value_slide_pot_a = analogRead(PIN_SLIDE_POT_A);
Serial.print("Slide Pot value: ");
Serial.println(value_slide_pot_a);

int value_slide_pot_b = analogRead(PIN_SLIDE_POT_B);
Serial.print("Slide Pot valueB: ");
Serial.println(value_slide_pot_b);

int value_slide_pot_c = analogRead(PIN_SLIDE_POT_C);
Serial.print("Slide Pot valueC: ");
Serial.println(value_slide_pot_c);

// 2) Analog value is mapped from slide pot range (analog input value) to led range (number of LEDs)
int num_leds_switchedon = map(value_slide_pot_a, 0, MAX_SLIDE_POT_ANALGOG_READ_VALUE, 0, NUM_LEDS);
int num_leds = map(value_slide_pot_b, 0, MAX_SLIDE_POT_ANALGOG_READ_VALUE, 0, NUM_LEDS);
int num_ledsC = map(value_slide_pot_c, 0, MAX_SLIDE_POT_ANALGOG_READ_VALUE, 0, NUM_LEDS);

// 3) Light up the LEDs
// Only LEDs are switched on which correspond to the area left of the slide knob
for (int i = 0; i < num_leds_switchedon; ++i) {
rgb_led[i] = CRGB::AliceBlue;
}
// LEDs are switched off which correspond to the area right of the slide knob
for (int i = num_leds_switchedon; i < NUM_LEDS; ++i) {
rgb_led[i] = CRGB::Black;
FastLED.show();
}

for (int i = 0; i < num_leds; ++i) {
rgb_led[i] = CRGB::Green;
}

for (int i = num_leds; i < NUM_LEDS; ++i) {
rgb_led[i] = CRGB::Black;
FastLED.show();
}

for (int i = 0; i < num_ledsC; ++i) {
rgb_led[i] = CRGB::Red;
}

for (int i =num_ledsC; i < NUM_LEDS; ++i) {
rgb_led[i] = CRGB::Black;
FastLED.show();
}

}

Bonjour,
Merci de lire les bonnes pratiques du forum

et de formater ton code correctement en le plaçant entre balises.

Bonjour, la bibliothèque FastLED dispose de la fonction de commande générale suivante pour l'ensemble de la bande de LED :

 FastLED.setBrightness(X);

Là où X peut aller de zéro à 254, faites comme vous l'avez fait auparavant avec les potentiomètres de couleur, une fonction de map :

FastLED.setBrightness(map (lecture du potentiomètre,0,1024,0,254));

Salutations.