RGB LED STRIP programming question

Are you saying you want it to act like the button is pressed once for each character that is received? Like this:

#include <FastSPI_LED.h>

#define NUM_LEDS 288

struct CRGB { 
  unsigned char r; 
  unsigned char g; 
  unsigned char b; 
};

struct CRGB *leds;

const int SS_PIN = 4;

void setup() {
  Serial.begin(115200);
  FastSPI_LED.setLeds(NUM_LEDS);
  FastSPI_LED.setChipset(CFastSPI_LED::SPI_WS2801);
  FastSPI_LED.setDataRate(3);
  //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(SS_PIN);

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

  leds = (struct CRGB*)FastSPI_LED.getRGBData(); 
  memset(leds, 0, NUM_LEDS * 3);
}

void loop() {
  if (Serial.available()>=1) {
      unsigned char value=Serial.read(); // Read a brightness value
     
      leds[0].r = value;
      leds[0].g = value;
      leds[0].b = value;
      }
  
  // Move all the lights down one step
  for(int i = NUM_LEDS-1; i > 0; i-- ) {
      leds[i].r = leds[i-1].r;
      leds[i].g = leds[i-1].g;
      leds[i].b = leds[i-1].b;
      }

  leds[0].r /= 2;
  leds[0].g /= 2;
  leds[0].b /= 2;

  FastSPI_LED.show();
  delay(30);
}