Led Addressable et boucle avec changement de couleur

Bonjour à tous j'essaye de donner un mouvement à effet que je fais sur une ledstrip addressable. En fait j'essaye de tout décaler d'une couleur dans une boucle mais cela ne fonctionne pas.

#include <Adafruit_NeoPixel.h>

#define PIN 4
int i;
int pixel;
int numpixel=8;

int red;
int blue;
int green;

// Parameter 1 = number of pixels in strip
// Parameter 2 = 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(numpixel, PIN, NEO_GRB + NEO_KHZ400);

void setup() {
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'

}

void loop() {
  strip.setPixelColor(0, 0, 0, 255);
  strip.setPixelColor(1, 0, 0, 255);
  strip.setPixelColor(2, 255, 0, 0);
  strip.setPixelColor(3, 255, 0, 0);
  strip.setPixelColor(4, 255, 255, 255);
  strip.setPixelColor(5, 255, 255, 255);
  strip.setPixelColor(6, 0, 0, 255);
  strip.setPixelColor(7, 0, 0, 255);
  strip.show();
  delay(1000);
  int pos =0;
  for(int i=0; i<strip.numPixels(); i++)
  {
  
  uint32_t color = strip.getPixelColor(i);
  strip.setPixelColor(i+1, color);
  strip.show();
  delay(100);
  
  }
  delay(1000);
}

Ce code me recouvre tout en bleu ...
Alors je crée une boucle sur le nombre de pixel et je lis la couleur et je las mets sur le pixel suivant mais cela me recouvre tt de bleu alors que j'ai du qques pixel en rouge à l'initialisation.

Avez vous une idée ?

Cordialement,
bypbop

normal, tu lis la couleur du 0 pour la mettre dans le 1, puis tu lis celle du 1 pour mettre dans le 2... donc tout se retrouve à la couleur du premier. il faut faire dans l'autre sens :

  for(int i=1; i<strip.numPixels() - 1; i++)
  {
  
  uint32_t color = strip.getPixelColor(i);
  strip.setPixelColor(i-1, color);
  strip.show();
  delay(100);
  
  }

ça te fera défiler du 8 vers le 0, à toi de trouver comment aller dans l'autre sens :wink:

Bonjour Super_Cinci

Alors j'avais essayé de le faire mais cela bouge pas en continue j'ai fait ceci :

Le premier pixel c'est le 0 donc j'ai fait moins -1

for(int i=strip.numPixels()-1; i>=0; i--)
  {
  
  uint32_t color = strip.getPixelColor(i);
  strip.setPixelColor(i+1, color);
  strip.show();
  delay(100);
  Serial.println(i);
  }

Re cela avance bien j'ai essayé de faire ceci mais ma boucle ne foncitionne plus pourquoi ?

for(int i=strip.numPixels()-1; i>=0; i--)
  {
  
  uint32_t color = strip.getPixelColor(i);
  if (i=7){pos=0;}
  else {pos +1;}
  strip.setPixelColor(pos, color);
  strip.show();
  delay(100);
  Serial.println(i);
  }

Cordialement,
bypbop

Voila j'ai fait ceci et y a qd mm une erreur qques part

J'ai mis 4 pixel bleus et 4 blancs un bleu un blanc ... et normalement je lis correctement et j'avance les pixels de 1 dans pos.

#include <Adafruit_NeoPixel.h>

#define PIN 4
int i;
int pixel;
int numpixel=8;

int red;
int blue;
int green;
int  pos = 0; 
// Parameter 1 = number of pixels in strip
// Parameter 2 = 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(numpixel, PIN, NEO_GRB + NEO_KHZ400);

void setup() {
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
  Serial.begin(9600);
  strip.setPixelColor(0, 0, 0, 255);
  strip.setPixelColor(1, 255, 255, 255);
  strip.setPixelColor(2, 0, 0, 255);
  strip.setPixelColor(3, 255, 255, 255);
  strip.setPixelColor(4, 0, 0, 255);
  strip.setPixelColor(5, 255, 255, 255);
  strip.setPixelColor(6, 0, 0, 255);
  strip.setPixelColor(7, 255, 255, 255);
  strip.show();
  delay(1000);
}

void loop() {

  for(int i=strip.numPixels()-1; i>=0; i--)
  {
  
  uint32_t color = strip.getPixelColor(i);
  if (i==7){pos=0;}
  else {pos = i +1;}
  strip.setPixelColor(pos, color);
  strip.show();
  delay(1000);
  Serial.print("i = ");  Serial.print(i);  Serial.print("pos = ");  Serial.println(pos);
  }
  
}

Je comprends pas sur le papier j'ai fait la boucle et cela marche.
normalement je devrais avoir le mm nombre de bleu et de blanc tt le tps mais la nan ....

Cordialement,
bypbop

c'est parce que...

  if (i=7){pos=0;}
  else {pos +1;}

pos +1, ça veut rien dire... mais c'est une instruction valide quand même... pos = i+1; non?

Bonjour Super_Cinci,

Oui je l'ai corrigé dans le post précédent.
Normalement je devrais obtenir un blanc un bleu mais j'ai sur la bande parfois 3 blancs à la suite ...
Cordialement,
bypbop

Bonsoir Super_cinci,

Alors j'ai compris pourquoi en fait : en faisant comme ca qd je lis le pixel 7 je le mets de suiste sur 0 normal vu que je suis à la fin du strip mais le prob aprés c'est que j'ai plus la valeur du pixel 0 qd j'arrive en fin de boucle.

Aurais tu une idée ?
Cordialement,
bypbop

dans ton for(), il faut peut-être remplacer i>=0 par i>0. ou du moins essayer...

Bonsoir SCC,

J'ai essayé j'ai mis ca pour avoir i=0 car le premier pixel c'est 0 : 8 pixels premier 0 et dernier 7
d'ou le moins un sur strip.numPixels()-1;
Cordialement,
bypbop