controler plusieurs anneaux neopixel avec un arduino uno

Bonjour,
je traivaille sur un projet qui consiste a faire fonctionner plusieurs anneaux LED NEOPIXEL avec un arduino
j’ai donc 2 'anneau qui doivent fonctionner indépendamment et en même temps. Cependant, je n’arrive à faire marche que un seul l’autre reste éteint. cela doit être un problème de codage mais je ne trouve pas je vous met le code ici.
pour la condition j’en ai mis une toujours mais mais sera relier pas la suite a des interrupteurs.

#include <Adafruit_NeoPixel.h>
#ifdef AVR
#include <avr/power.h>
#endif

#define PIN 6

#define PIN2 9
int x=1;

Adafruit_NeoPixel strip = Adafruit_NeoPixel(31, 9, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel teil = Adafruit_NeoPixel(35, 6, NEO_GRB + NEO_KHZ800);

void setup() {
// This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
#if defined (AVR_ATtiny85)
if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
// End of trinket special code

strip.begin();
strip.setBrightness(50);
strip.show(); // Initialize all pixels to ‘off’
teil.begin();
teil.setBrightness(50);
teil.show(); // Initialize all pixels to ‘off’
}

void loop(){
if (x=x) {
program1();
}
if (x=x){
program2();
}

}

void program1(){ colorWipe(strip.Color(255, 0, 0), 50); // Red
colorWipe(strip.Color(0, 255, 0), 50); // Green
colorWipe(strip.Color(0, 0, 255), 50); // Blue
//colorWipe(strip.Color(0, 0, 0, 255), 50); // White RGBW
// Send a theater pixel chase in…
theaterChase(strip.Color(127, 127, 127), 50); // White
theaterChase(strip.Color(127, 0, 0), 50); // Red
theaterChase(strip.Color(0, 0, 127), 50); // Blue

rainbow(20);
rainbowCycle(20);
theaterChaseRainbow(50);
}

// 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);
}
}

void rainbow(uint8_t wait) {
uint16_t i, j;

for(j=0; j<256; j++) {
for(i=0; i<strip.numPixels(); i++) {
strip.setPixelColor(i, Wheel((i+j) & 255));
}
strip.show();
delay(wait);
}
}

// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint8_t wait) {
uint16_t i, j;

for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
for(i=0; i< strip.numPixels(); i++) {
strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
}
strip.show();
delay(wait);
}
}

//Theatre-style crawling lights.
void theaterChase(uint32_t c, uint8_t wait) {
for (int j=0; j<10; j++) { //do 10 cycles of chasing
for (int q=0; q < 3; q++) {
for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
strip.setPixelColor(i+q, c); //turn every third pixel on
}
strip.show();

delay(wait);

for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
strip.setPixelColor(i+q, 0); //turn every third pixel off
}
}
}
}

//Theatre-style crawling lights with rainbow effect
void theaterChaseRainbow(uint8_t wait) {
for (int j=0; j < 256; j++) { // cycle all 256 colors in the wheel
for (int q=0; q < 3; q++) {
for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
strip.setPixelColor(i+q, Wheel( (i+j) % 255)); //turn every third pixel on
}
strip.show();

delay(wait);

for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
strip.setPixelColor(i+q, 0); //turn every third pixel off
}
}
}
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if(WheelPos < 85) {
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
if(WheelPos < 170) {
WheelPos -= 85;
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos -= 170;
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);

}

void program2(){ // Some example procedures showing how to display to the pixels:
colorWipe(teil.Color(255, 0, 0), 50); // Red
colorWipe(teil.Color(0, 255, 0), 50); // Green
colorWipe(teil.Color(0, 0, 255), 50); // Blue
//colorWipe(teil.Color(0, 0, 0, 255), 50); // White RGBW
// Send a theater pixel chase in…
theaterChase(teil.Color(127, 127, 127), 50); // White
theaterChase(teil.Color(127, 0, 0), 50); // Red
theaterChase(teil.Color(0, 0, 127), 50); // Blue

rainbow(20);
rainbowCycle(20);
theaterChaseRainbow(50);
}

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

// Slightly different, this makes the rainbow equally distributed throughout

//Theatre-style crawling lights.
void theaterChase1(uint32_t c, uint8_t wait) {
for (int j=0; j<10; j++) { //do 10 cycles of chasing
for (int q=0; q < 3; q++) {
for (uint16_t i=0; i < teil.numPixels(); i=i+3) {
teil.setPixelColor(i+q, c); //turn every third pixel on
}
teil.show();

delay(wait);

for (uint16_t i=0; i < teil.numPixels(); i=i+3) {
teil.setPixelColor(i+q, 0); //turn every third pixel off
}
}
}
}

//Theatre-style crawling lights with rainbow effect
void theaterChaseRainbow1(uint8_t wait) {
for (int j=0; j < 256; j++) { // cycle all 256 colors in the wheel
for (int q=0; q < 3; q++) {
for (uint16_t i=0; i < teil.numPixels(); i=i+3) {
teil.setPixelColor(i+q, Wheel( (i+j) % 255)); //turn every third pixel on
}
teil.show();

delay(wait);

for (uint16_t i=0; i < teil.numPixels(); i=i+3) {
teil.setPixelColor(i+q, 0); //turn every third pixel off
}
}
}
}

dans l’attente de votre aide

sketch_nov04a (1).ino (6.81 KB)

Bonjour,

Mets ton code entre balises.

Tel que ton code est fait (avec les delay()) tu ne peux pas piloter test deux anneaux en même temps. Les deux fonctions program1() et program2() s’exécutent l'une après l'autre.

Pour gérer les deux anneaux en même temps, il faudrait revoir complètement ton programme sans utiliser delay().