2 Strings of NeoPixels controlled via 2 Data Pins

Hello

I hope someone can help me, I am very new to Arduino / C++ so please excuse me if I am asking a silly question!

I have 2 strings of NeoPixels (I am using 8mm individual Pixels, 8 per string) - Connected to pins 10 and 11 onto a Arduino Uno.

I have code which runs though a set of different patterns which is ideal for one strip - but I would like the second strip to run though just a single pattern along side the first strip.

The code I have at the moment works - however it does the first strip, then second, then first, then second etc - but I want them both to work at the same time (with different patterns)

Here is the code I am currently using :

#include <Adafruit_NeoPixel.h>
 

Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(6, 11, NEO_RGB + NEO_KHZ800);
Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(6, 10, NEO_RGB + NEO_KHZ800);
 
#define Brightness 10 //Set brightness to 1/10th
#define Full (255/Brightness)


//Create scrolling red and white candy cane stripes.
//Try adjusting the width in pixels for various results.
//Value "sets" should evenly divide into strand length
void CandyCane  (int sets,int width,int wait) {
  int L;
  for(int j=0;j<(sets*width);j++) {
    for(int i=0;i< strip2.numPixels();i++) {
      L=strip2.numPixels()-i-1;
      if ( ((i+j) % (width*2) )<width)
        strip2.setPixelColor(L,Full,0,0);
      else
        strip2.setPixelColor(L,Full,Full, Full);
    };
    strip2.show();
    delay(wait);
  };
};
 
//Create sets of random white or gray pixels
void RandomWhite (int sets, int wait) {
  int V,i,j;
  for (i=0;i<sets;i++) {
    for(j=0;j<strip2.numPixels();j++) {
      V=random(Full);
      strip2.setPixelColor(j,V,V,V);
    }
    strip2.show();
    delay(wait);
  }
};
//Create sets of random colors
void RandomColor (int sets, int wait) {
  int i,j;
  for (i=0;i<sets;i++) {
    for(j=0;j<strip2.numPixels();j++) {
      strip2.setPixelColor(j,random(255)/Brightness,random(255)/Brightness,random(255)/Brightness);
    }
    strip2.show();
    delay(wait);
  }
};
void RainbowStripe (int sets,int width,int wait) {
  int L;
  for(int j=0;j<(sets*width*6);j++) {
    for(int i=0;i< strip2.numPixels();i++) {
      L=strip2.numPixels()-i-1;
      switch ( ( (i+j)/width) % 6 ) {
        case 0: strip2.setPixelColor(L,Full,0,0);break;//Red
        case 1: strip2.setPixelColor(L,Full,Full,0);break;//Yellow
        case 2: strip2.setPixelColor(L,0,Full,0);break;//Green
        case 3: strip2.setPixelColor(L,0,Full,Full);break;//Cyan
        case 4: strip2.setPixelColor(L,0,0,Full);break;//Blue
        case 5: strip2.setPixelColor(L,Full,0,Full);break;//Magenta
//        default: strip2.setPixelColor(L,0,0,0);//Use for debugging only
      }
    };
    strip2.show();
    delay(wait);
  };
};
//These routines were modified from Adafruit strand test sketch
// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip2.numPixels(); i++) {
      strip2.setPixelColor(i, c);
      strip2.show();
      delay(wait);
  }
}

 
void rainbowCycle(uint8_t sets, uint8_t wait) {
  uint16_t i, j;
  for(j=0; j<256*sets; j++) { //cycles of all colors on wheel
    for(i=0; i< strip2.numPixels(); i++) {
      strip2.setPixelColor(strip2.numPixels()-i-1, Wheel(((i * 256 / strip2.numPixels()) + j) & 255));
    }
    strip2.show();
    delay(wait);
  }
}

void rainbowCycle1(uint8_t sets, uint8_t wait) {
  uint16_t i, j;
  for(j=0; j<256*sets; j++) { //cycles of all colors on wheel
    for(i=0; i< strip1.numPixels(); i++) {
      strip1.setPixelColor(strip2.numPixels()-i-1, Wheel(((i * 256 / strip1.numPixels()) + j) & 255));
    }
    strip1.show();
    delay(wait);
  }
}
 
// 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) {
  if(WheelPos < 85) {
   return strip2.Color((WheelPos * 3)/Brightness, (255 - WheelPos * 3)/Brightness, 0);
  } else if(WheelPos < 170) {
   WheelPos -= 85;
   return strip2.Color((255 - WheelPos * 3)/Brightness, 0, (WheelPos * 3)/Brightness);
  } else {
   WheelPos -= 170;
   return strip2.Color(0,(WheelPos * 3)/Brightness, (255 - WheelPos * 3)/Brightness);
  }
}
 
void setup() {
  pinMode(10, INPUT_PULLUP); //initializes strip1  
  pinMode(11, INPUT_PULLUP); //initializes strip2 
  strip1.begin();
  strip1.show(); // Initialize all pixels to 'off'
  strip2.begin();
  strip2.show();
  randomSeed(1234);//Set up random number generator
}
 
void loop() {
  
  CandyCane(30,8,50);//30 sets, 8 pixels wide, 50us delay
  rainbowCycle1(10,2);//10 rainbow cycles
  
  
  RainbowStripe(5,4,75);//5 cycles, 4 pixels wide, 50 delay
  rainbowCycle1(10,2);//10 rainbow cycles
  
  
  RandomWhite(50,200);//50 sets of random grayscale
  rainbowCycle1(10,2);//10 rainbow cycles
  
  
  RandomColor(50,200);//50 sets of random colors
  rainbowCycle1(10,2);//10 rainbow cycles
  
  
  colorWipe(strip2.Color(Full, 0, 0), 50); // Red
  colorWipe(strip2.Color(Full, Full, 0), 50); // Yellow
  colorWipe(strip2.Color(0, Full, 0), 50); // Green
  colorWipe(strip2.Color(0, Full, Full), 50); // Cyan
  colorWipe(strip2.Color(0, 0, Full), 50); // Blue
  colorWipe(strip2.Color(Full, 0, Full), 50); // Magenta
  rainbowCycle1(10,2);//10 rainbow cycles
  
 
  rainbowCycle(10,2);//10 rainbow cycles
  rainbowCycle1(10,2);//10 rainbow cycles
  
  
  
  colorWipe(0,5);//Black
  
}

Any help would be much appreciated! Thanks in advanced :smiley:

Drop the Adafruit lib, use FastLED instead.

Read "Using Multiple Controllers" in the FastLED Wiki.

Enjoy your leds burning!

Modify your software in a way that the animation functions calculate just one frame per call.

Then render the first one, then the second, output both, restart.

Hint: millis() is a good common timebase, way better than just plain counters.