Trying to send serial data wirelessly from Vixen to multiple arduinos

Hello everyone,
I’m trying to modify this sketch that allows Vixen to control LED strips using an
Arduino. My intention was to control LPD6803 addressable LEDs on multiple Arduinos via wireless using just one serial port. In the code below, I have a total of 40 pixels, and I have two Arduinos controlling 20 pixels each. By setting PIXEL_START = 1, the first Arduino will control the first 20 pixels. By setting PIXEL_START = 21, the second Arduino will control the next twenty pixels. The problem is, the LEDs on the second Arduino seem to be dropping whole frames of data. The colors are correct for each pixel, and the right pixels are receiving data from Vixen, but the dimming is very jittery and some pixels get skipped when doing fast chases. Here’s the code:

/*

Vixen Lights 3.x - Arduino Generic Serial for Addressable Pixels

Using this code is pretty straight forward, simply hookup your one wire (WS2811 or WS2812) data line to pin 6 of your Arduino
and upload this code.  Make sure you have properly installed the FastLED library from http://fastled.io Once you are done, simply
power your Pixel strips from an external power supply.  Next configure a Generic Serial Controller inside of Vixen Lights 3.x and 
add 3 x pixels for the number of channels.  Configure the Generic Serial Controller to use 115200, 8, none, and 1.  Then create
your element and add "Multiple Items (1 x number of pixels).  Finally select your pixel elements and set them as RGB pixels before
patching them to the controler outputs.  You should now be ready to begin testing.

For a complete tutorial check out blog.huntgang.com

Created   November 8th, 2014
By        Richard Sloan - www.themindfactory.com
And       David Hunt - blog.huntgang.com
Version   1.4

*/


// You must download and install the library from http://fastled.io/ 
//#include <FastLED.h>
#include <BLIP_LEDS_SPI_LPD6803.h>

// Sets the maximum number of LEDs that this code will handle to avoid running out of memory
#define NUM_LEDS 40
#define PIXEL_START 21

// Sets the pin which is used to connect to the LED pixel strip
//#define DATA_PIN 6

//CRGB leds[NUM_LEDS];


void setup() {
  BL.setLeds(NUM_LEDS);                   // Initialisation functions
  BL.init();                              // SPI interrupt will now send out data to LEDs. This happens in the background, pretty fast.


  BL.gridHeight = 7;                      // Grid dimensions for LINE and BOX effect functions are defined here. Also used for Spectrum Analyzer function.
  BL.gridWidth = 6;

// Set all the LEDs to black (off)
  BL.setRange(0, NUM_LEDS, BL.color(0, 0, 0));
  BL.show();

  // Define the speed of the serial port
  Serial.begin(115200);
}

void loop() {
  // Set some counter / temporary storage variables
  int cnt;
  int data_cnt;
  int skip_data;
  unsigned int num_leds;
  unsigned int d1, d2, d3;
  unsigned int a;
  unsigned int b;
  unsigned int c;


  // Begin an endless loop to receive and process serial data
  for(;;) {
    // Set a counter to 0.  This couter keeps track of the pixel colors received.
    cnt = 0;
    // Set a counter to count the serial data being transmitted.
    data_cnt = 0;
    //Set how many pixels at the beginning to skip.
    skip_data = (PIXEL_START - 1) * 3;
    //Begin waiting for the header to be received on the serial bus
    //1st character
    while(!Serial.available());
      if(Serial.read() != '>') {
        continue;
        }
    //second character
    while(!Serial.available());
      if(Serial.read() != '>') {
        continue;
        }
    //get the first digit from the serial bus for the number of pixels to be used
    while(!Serial.available());
      d1 = Serial.read();
    //get the second digit from the serial bus for the number of pixels to be used
    while(!Serial.available());
      d2 = Serial.read();
    //get the third digit from the serial bus for the number of pixels to be used
    while(!Serial.available());
      d3 = Serial.read();
    //get the end of the header
    while(!Serial.available());
      if(Serial.read() != '<') {
        continue;
        }
    while(!Serial.available());
      if(Serial.read() != '<') {
        continue;
        }
    // calculate the number of pixels based on the characters provided in the header digits
    num_leds = (d1-'0')*100+(d2-'0')*10+(d3-'0');
    // ensure the number of pixels does not exceed the number allowed
    if(num_leds > NUM_LEDS) {
      continue;
      }
    //subtract the number of leds controlled on this device from the total number of leds controlled by vixen
      //num_leds-=3;
    // Let the FastLED library know how many pixels we will be addressing
    //FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, num_leds);
    // Do nothing with the serial data sent before the pixel you want to start with.
    //****************WORKING ON THIS SECTION******************
    if(skip_data > 0) {
    do {
      while(!Serial.available());
      Serial.read();
    }
    while(--skip_data);
    }
   /* do {
      data_cnt++;
      while(!Serial.available());
      Serial.read();
      
    }
    while(data_cnt < skip_data);*/
    // Loop through each of the pixels and read the values for each color
    do {
     /* while(!Serial.available());
        leds[cnt].r = Serial.read();
      while(!Serial.available());
        leds[cnt].g = Serial.read();
      while(!Serial.available());
        leds[cnt++].b = Serial.read();
        */
      while(!Serial.available());
         a= Serial.read() / 8;
      while(!Serial.available());
        b = Serial.read() / 8;
      while(!Serial.available());
        c = Serial.read() / 8;
      BL.setPixel(cnt++, c, a, b);
      } 
    while(--num_leds);
    // Tell the FastLED Library it is time to update the strip of pixels
    //FastLED.show();
    BL.show();
    // WOO HOO... We are all done and are ready to start over again!
    }
}

I think the problem lies here:

 //****************WORKING ON THIS SECTION******************
    if(skip_data > 0) {
    do {
      while(!Serial.available());
      Serial.read();
    }
    while(--skip_data);
    }

When I comment this section out, the Arduino acts as if it is controlling the first 20 pixels in Vixen. The pixels look great, though. No jittery dimming or skipped pixels on fast chases.

When I uncomment it, the Arduino controls the second set of pixels (pixels 21 through 40 in the Vixen program), but the dimming is jittery.

Any thoughts?