WS2811. Roller coaster fuse effect needs high travel speed of led pixels. 8ft/s

Hi first time poster here. Thanks in advance for the help!
I am doing a fuse effect with a group of 7 leds traveling down a 5 meter strand. Colors of leds range from white (tip) to amber(tail)
to imitate a sparking fuse. A tracking projected lit fuse video complete the effect. It looks great but as this is for a roller coaster
the effect have to match the speed of ride vehicle at 8ft/sec. I am jack of all trade but master of none. I patched together code for
effect but cannot get the speed I need. Speed slowed down as the length of strand increased. I think the code is fundamentally unsuitable
but don't know where to start.... Please help!! Here's the code... :cold_sweat:

#include <FastSPI_LED.h>
#define NUM_LEDS 85
// Sometimes chipsets wire in a backwards sort of way
struct CRGB { 
  unsigned char g; 
  unsigned char r; 
  unsigned char b; 
};
// struct CRGB { unsigned char r; unsigned char g; unsigned char b; };
struct CRGB *leds;

typedef struct
{
  double R;
  double G;
  double B;
} 
RgbFColor;

#define PIN 7
#define bri 50 


#define chase 5 //speed of chase = 50 millisec. x 165 leds = 8sec.
unsigned long startPhase = 0;
char jumpState = 0;



void setup()
{
  FastSPI_LED.setLeds(NUM_LEDS);
  //FastSPI_LED.setChipset(CFastSPI_LED::SPI_SM16716);
  FastSPI_LED.setChipset(CFastSPI_LED::SPI_TM1809);
  //FastSPI_LED.setChipset(CFastSPI_LED::SPI_LPD6803);
  //FastSPI_LED.setChipset(CFastSPI_LED::SPI_HL1606);
  //FastSPI_LED.setChipset(CFastSPI_LED::SPI_595);
  //FastSPI_LED.setChipset(CFastSPI_LED::SPI_WS2801);

  FastSPI_LED.setPin(PIN);

 FastSPI_LED.init();
  FastSPI_LED.start();

  leds = (struct CRGB*)FastSPI_LED.getRGBData();




 
}

void loop(){

     for(int i = 0 ; i < NUM_LEDS - 7;i++ ) { //- (X) x=number of leds in chase
          memset(leds, 0, NUM_LEDS * 3);
          int l = i;
           leds[l].r = 13; leds[l].g =2; leds[l].b = 0; l++;
           leds[l].r = 20; leds[l].g =3; leds[l].b = 0; l++;
           
           leds[l].r = 35; leds[l].g =5; leds[l].b = 0; l++;//gb combo, l++ = push next
           
           leds[l].r = 75; leds[l].g =10; leds[l].b = 0; l++;//gb combo, l++ = push next
         
            leds[l].r = 125; leds[l].g = 24;  leds[l].b = 0; l++;  // rgb combo, l++ = push next
            leds[l].r = 175; leds[l].g = 50;  leds[l].b = 0; l++;  
            leds[l].r = 255;  leds[l].g = 120;  leds[l].b = 17; l++; 
            leds[l].r = random(250,50); leds[l].g = 120;  leds[l].b = 17; l++;  
           
           
            
            // l+2; 2 space before next led, but NUM_LEDS - 5
            
           
          FastSPI_LED.show();  //push current data
          delay(chase);        //speed of chase
        }
       digitalWrite (PIN, LOW);
       delay(250);    // 3 min. delay (180000 mil sec. - 5leds x 25 mil sec = 59975
    }

The ws2811 takes 1.25µs per bit (800Khz data transmission rate) - so each rgb pixel is 30µs. If you have a 5 meter strand with 60 leds per meter - that's 300 leds, or 9ms per frame write.

To go at 8ft/sec (let's make it 3 meters per second), and if you want each led to lite up once, then that's 180 frames that need to be written out. 180 frames * 9ms/frame is 1.6s. Not enough time.

The ws2811 is probably not your best chipset for this, as its data rate is so slow. Something like the LPD8806 can push closer to 6-8Mbps out of the hardware SPI port on AVR based arduinos (and closer to 20Mbit on the ARM based teensy 3 (I don't have due support, yet)).

Also - at the rate that you want to update, you need to take into account the time that you're spending wiping/re-writing your leds, as well as transmitting the frame data to the leds.

dgarcia42:
If you have a 5 meter strand with 60 leds per meter - that's 300 leds, or 9ms per frame write.

He doesn't actually say how many LEDs/meter he's using but the source code says "#define NUM_LEDS 85"

dgarcia42:
To go at 8ft/sec (let's make it 3 meters per second), and if you want each led to lite up once, then that's 180 frames that need to be written out. 180 frames * 9ms/frame is 1.6s. Not enough time.

You can skip frames if necessary (although I don't think it is).

dgarcia42:
The ws2811 is probably not your best chipset for this, as its data rate is so slow.

It can be done.

You need to work out the speed in LEDs per second, not feet per second.

Thanks for the responds!
fungus,
I am using ws2811 strips with 60 Leds per meter. 8ft/s is about 3M/s = 180 Leds per second.
At 1 meter I was able to get close to the desired speed. But as I increase the number of leds the speed slowed.
If I change code: #define NUM_LEDS 85 to define NUM_LEDS 180 . The speed slowed proportionally. What would you suggest?

dgarcia42,
If "To go at 8ft/sec (let's make it 3 meters per second), and if you want each led to lite up once, then that's 180 frames that need to be written out. 180 frames * 9ms/frame is 1.6s."
Then a packet of 7 leds would take 180 frames * 9ms/frame * 7 = 11.2s (?) I'm no where near the speed I need!!

I like the ws2811 for the number of leds per meter as it gives me higher resolution for the fuse. Would changing the code help with the speed?
How much faster can I go with teensy if i stick with ws2811?