Led ws2811Ws2811 plusieur bande led

bonjour

Jai un petit problème. Jai réussi a faire mon code pour faire allumer ma bande led ws2811 avec 4 bouton de chacune des couleur que je voulais mais le problème est lors du montage quand je branche mais bande led a mais bornier les boutons ne fonctionne pu et Jai juste la couleur blanche qui marche et plus aucun bouton marche après cela voici mon code et le schémas si quelqu'un peux Maider a comprendre le pourquoi

merci

#include <Adafruit_NeoPixel.h>

#define PIN 4
#define HIGH 1
#define LOW 0

// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
// NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
// NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
// NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products)
// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(150, PIN, NEO_GRB + NEO_KHZ800);

// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input
// and minimize distance between Arduino and first pixel. Avoid connecting
// on a live circuit...if you must, connect GND first.

// constants won't change. They're used here to
// set pin numbers:
const int offPin = 10; // the number of the pushbutton pin
const int whitePin = 13;
const int greenPin = 6;
const int redPin = 8;
const int bluePin = 5;

// variables will change:
int offState = 0; // variable for reading the pushbutton status
int whiteState = 0;
int greenState = 0;
int redState = 0;
int blueState = 0;
int pixelSpeed = 10;

void setup() {
strip.begin();
strip.show(); // Initialize all pixels to 'off'
pinMode(offPin, INPUT_PULLUP);
pinMode(whitePin, INPUT_PULLUP);
pinMode(greenPin, INPUT_PULLUP);
pinMode(bluePin, INPUT_PULLUP);
pinMode(redPin, INPUT_PULLUP);
pinMode(13, OUTPUT);
}

void loop() {
// Some example procedures showing how to display to the pixels:
whiteState = digitalRead(whitePin);
offState = digitalRead(offPin);
greenState = digitalRead (greenPin);
blueState = digitalRead (bluePin);
redState = digitalRead (redPin);
if (greenState == LOW | redState == LOW | blueState == LOW) {
colorWipe(strip.Color(255 * (1-redState), 255 * (1-greenState), 255 * (1-blueState)), pixelSpeed); // RGB
}
else if (whiteState == LOW) {
colorWipe(strip.Color(255, 255, 255), pixelSpeed); // WHITE
}
else if (offState == LOW) {
colorWipe(strip.Color(0, 0, 0), pixelSpeed); // WHITE
}
}

// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint8_t wait) {
for(uint16_t i=0; i<strip.numPixels(); i++) {
strip.setPixelColor(i, c);
strip.show();
delay(wait);
}
}

vous avez un bandeau de 150 LEDs ou 9 bandeaux de 4 LEDs comme sur le dessin?

jai 9 bandeau de 5 led et 3 bandeau de 12 led

alors pourquoi faites vous cela ?

strip est un bandeau de 150 LEDs

En fait, le câblage n'est pas bon.
Il n'y a qu'une seule sortie pour piloter les bandeaux et ils sont tous en parallèle.
En principe:

  • soit tu prévois une sortie de la carte Arduino par bandeau. Il faut alors faire une déclaration pour chaque bandeau en précisant bien la taille du bandeau à chaque fois par exemple Adafruit_NeoPixel strip = Adafruit_NeoPixel(5, PIN, NEO_GRB + NEO_KHZ800);
  • soit tu cascades les bandeaux. La sortie de l'un entre dans le bandeau suivant en ainsi de suite. Il n'y a alors qu'une seule déclaration. Adafruit_NeoPixel strip = Adafruit_NeoPixel(81, PIN, NEO_GRB + NEO_KHZ800);

Ok je voulais pas les mettre en cascade pour des raison de soudure et qu'il son pas tout dans la même direction donc je doit prévoir une sortie pour chaque bandeau ou je pourrais en mètre 3 -4 par sorti en parallèle ?

est-ce que le comportement des bandeaux est identique ou chaque bandeau doit avoir son signal propre ?

le signal est le même pour tout les bande de led quand je click sur un bouton les led son tout identique sur tout les bande de led

merci de votre aide

mais vous n’avez pas le même nombre de Leds dans tous les bandeaux…

exactement jai des bande de 5 led et dautre de 12 led mais il doivent allumer tout de la meme couleur quand jappuie sur le bouton rouge vert bleu orange ....

Déclarez 2 bandeaux pilotés par 2 pins différentes

Mettez en parallèle ceux qui ont le même nombre de leds (la mème pin de commande)

Et pour simplifier votre gestion des boutons, éventuellement utilisez la librairie Button dans easyRun de @bricoleau ou alors la librairie OneButton de Matthias Hertel.

Ce serait la chose logique à faire, mais pour ce montage c'est indifférent, la bande de 5 s'allumera et se comportera de la même façon en recevant les ordres de la bande de 12.

En ce qui concerne le montage, si cette lentille bleue représente le condensateur 1000 uF, elle ne va pas sur cette planche d'essai, (alimentation de l'arduino), elle doit aller sur l'autre (alimentation des bandes). Il n'y a donc pas besoin du fil rouge qui sort de la broche 5V de l'arduino.

En ce qui concerne le code, essayez le loop suivante et commentez les résultats.

void loop() {
  // Some example procedures showing how to display to the pixels:
  whiteState = digitalRead(whitePin);
  offState = digitalRead(offPin);
  greenState = digitalRead (greenPin);
  blueState = digitalRead (bluePin);
  redState = digitalRead (redPin);
  if (greenState == LOW || redState == LOW || blueState == LOW) {
    colorWipe(strip.Color(255 * (1 - redState), 255 * (1 - greenState), 255 * (1 - blueState)), pixelSpeed); // RGB
  }
  else {
    if (whiteState == LOW) {
      colorWipe(strip.Color(255, 255, 255), pixelSpeed); // WHITE
    }
    if (offState == LOW) {
      colorWipe(strip.Color(0, 0, 0), pixelSpeed); // BLACK
    }
  }
}

c’est effectivement une bonne remarque on peut se contenter d’un bandeau de 12

vraiment merci de votre aide
Est ce que je pourrais rajouter des sortie pour mais bande de 5 led et mais bande de 12 led soit sur 2 sortie différant de ma carte
si oui je doit changer mon code comment

merci

Je ne comprends pas la question…

si je veux connecter tout mais bande de 5 led sur la même sortie qui est la pin 4 et tout les bande les de 12 sur la sortie 3 par Example comment je pourrais faire dans mon programme pour que les 2 sortie donne la même chose

donc j'aurais 2 sortie qui font la même chose sur mon arduino

Vous déclarez deux instances par exemple strip5 et strip12 avec la bonne pin (appelées par exemple PIN5 et PIN12)

Adafruit_NeoPixel strip5 = Adafruit_NeoPixel(5, PIN5, NEO_GRB + NEO_KHZ800);

Adafruit_NeoPixel strip12 = Adafruit_NeoPixel(12, PIN12, NEO_GRB + NEO_KHZ800);

Ensuite il faut envoyer des commandes aux deux avant d’appeler show sur chaque bandeau

PS/ attention à l’orthographe mais ce n’est pas la même chose que mes ➜ on comprend difficilement ce que vous écrivez

Désoler j'étais parti en vacance .
Donc si j'ai bien compris je dois rajouter dans le début du code les 2 ligne

Adafruit_NeoPixel strip5 = Adafruit_NeoPixel(5, PIN5, NEO_GRB + NEO_KHZ800);

Adafruit_NeoPixel strip12 = Adafruit_NeoPixel(12, PIN12, NEO_GRB + NEO_KHZ800);

Est-ce que je dois changer tout les ligne de code

void setup() {
strip5.begin();
strip12.begin();
strip5.show(); 
strip12.show(); 
pinMode(offPin, INPUT_PULLUP);
pinMode(whitePin, INPUT_PULLUP);
pinMode(greenPin, INPUT_PULLUP);
pinMode(bluePin, INPUT_PULLUP);
pinMode(redPin, INPUT_PULLUP);
pinMode(13, OUTPUT);

et pour tout le reste du code
Désoler je suis un peu nouveaux pour coder

donc sa donnerais ceci

#include <Adafruit_NeoPixel.h>

#define PIN 4
#define PIN 3
#define HIGH 1
#define LOW 0


Adafruit_NeoPixel strip150 = Adafruit_NeoPixel(150, PIN3, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip100 = Adafruit_NeoPixel(100, PIN4, NEO_GRB + NEO_KHZ800);

const int offPin = 10; // the number of the pushbutton pin
const int whitePin = 13;
const int greenPin = 6;
const int redPin = 8;
const int bluePin = 5;

// variables will change:
int offState = 0; // variable for reading the pushbutton status
int whiteState = 0;
int greenState = 0;
int redState = 0;
int blueState = 0;
int pixelSpeed = 10;

void setup() {
strip150.begin();
strip100.begin();
strip150.show();
strip100.show();
pinMode(offPin, INPUT_PULLUP);
pinMode(whitePin, INPUT_PULLUP);
pinMode(greenPin, INPUT_PULLUP);
pinMode(bluePin, INPUT_PULLUP);
pinMode(redPin, INPUT_PULLUP);
pinMode(4, OUTPUT);
pinMode(3, OUTPUT);
}

void loop() {
  // Some example procedures showing how to display to the pixels:
  whiteState = digitalRead(whitePin);
  offState = digitalRead(offPin);
  greenState = digitalRead (greenPin);
  blueState = digitalRead (bluePin);
  redState = digitalRead (redPin);
  if (greenState == LOW || redState == LOW || blueState == LOW) {
    colorWipe(strip150.Color(255 * (1 - redState), 255 * (1 - greenState), 255 * (1 - blueState)), pixelSpeed); 
    colorWipe(strip100.Color(255 * (1 - redState), 255 * (1 - greenState), 255 * (1 - blueState)), pixelSpeed);// RGB
  }
  else {
    if (whiteState == LOW) {
      colorWipe(strip150.Color(255, 255, 255), pixelSpeed);
      colorWipe(strip100.Color(255, 255, 255), pixelSpeed);// WHITE
    }
    if (offState == LOW) {
      colorWipe(strip150.Color(0, 0, 0), pixelSpeed);
      colorWipe(strip100.Color(0, 0, 0), pixelSpeed);// BLACK
    }
  }
}
void colorWipe(uint32_t c, uint8_t wait) {
for(uint16_t i=0; i<strip150.numPixels(); i++)
for(uint16_t i=0; i<strip100.numPixels(); i++){
strip150.setPixelColor(i, c);
strip100.setPixelColor(i, c);
strip150.show();
strip100.show();
delay(wait);
}
}

Vraiment merci de ton aide

il y a deux variables i différentes, la seconde masque la première. C'est équivalent à:

for(uint16_t truc=0; truc<strip150.numPixels(); truc++)
for(uint16_t i=0; i<strip100.numPixels(); i++){
strip150.setPixelColor(i, c);
strip100.setPixelColor(i, c);
strip150.show();
strip100.show();
delay(wait);
}

donc mon code ressemblerais a ceci mais mes bande led reste fige a rouge

#include <Adafruit_NeoPixel.h>

#define PIN 4
#define PIN 3
#define HIGH 1
#define LOW 0


Adafruit_NeoPixel strip150 = Adafruit_NeoPixel(150, PIN3, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip100 = Adafruit_NeoPixel(100, PIN4, NEO_GRB + NEO_KHZ800);

const int offPin = 10; // the number of the pushbutton pin
const int whitePin = 13;
const int greenPin = 6;
const int redPin = 8;
const int bluePin = 5;

// variables will change:
int offState = 0; // variable for reading the pushbutton status
int whiteState = 0;
int greenState = 0;
int redState = 0;
int blueState = 0;
int pixelSpeed = 10;

void setup() {
strip150.begin();
strip100.begin();
strip150.show();
strip100.show();
pinMode(offPin, INPUT_PULLUP);
pinMode(whitePin, INPUT_PULLUP);
pinMode(greenPin, INPUT_PULLUP);
pinMode(bluePin, INPUT_PULLUP);
pinMode(redPin, INPUT_PULLUP);
pinMode(4, OUTPUT);
pinMode(3, OUTPUT);
}

void loop() {
  // Some example procedures showing how to display to the pixels:
  whiteState = digitalRead(whitePin);
  offState = digitalRead(offPin);
  greenState = digitalRead (greenPin);
  blueState = digitalRead (bluePin);
  redState = digitalRead (redPin);
  if (greenState == LOW || redState == LOW || blueState == LOW) {
    colorWipe(strip150.Color(255 * (1 - redState), 255 * (1 - greenState), 255 * (1 - blueState)), pixelSpeed); 
    colorWipe(strip100.Color(255 * (1 - redState), 255 * (1 - greenState), 255 * (1 - blueState)), pixelSpeed);// RGB
  }
  else {
    if (whiteState == LOW) {
      colorWipe(strip150.Color(255, 255, 255), pixelSpeed);
      colorWipe(strip100.Color(255, 255, 255), pixelSpeed);// WHITE
    }
    if (offState == LOW) {
      colorWipe(strip150.Color(0, 0, 0), pixelSpeed);
      colorWipe(strip100.Color(0, 0, 0), pixelSpeed);// BLACK
    }
  }
}
void colorWipe(uint32_t c, uint8_t wait) {
for(uint16_t truc=0; truc<strip150.numPixels(); truc++)
for(uint16_t i=0; i<strip100.numPixels(); i++){
strip150.setPixelColor(i, c);
strip100.setPixelColor(i, c);
strip150.show();
strip100.show();
delay(wait);
}
}