Если не перелопачивать весь код, то теоретически сигнал данных можно продублировать используя мосфет ( что бы не спалить порт). Будут синхронно работать. Если последовательно обрабатывать несколько портов  в разных режимах, то при простейшем изменении кода в разы увеличится размер программы , это если под каждую модель тупо скопировать нужные функции и изменением пина и ленты, если переписать  функции с выбором нужной ленты от скажем просто номера, то увеличится используемая память под массив светодиодов и все. Программа увеличится незначительно, НО!  Управление снежинкой использует функции задержки, пусть и самописные, не тормозящие внешние  процессы, но на время одного эффекта остальные снежинки будут  замирать.
Для работы нескольких звезд в параллеле от разных пинов достаточно сделать так
описать нужное кол-во пинов 
#define PIN 3
#define PIN1 4
#define PIN2 5
и т.д.
объявить несколько лент
Adafruit_NeoPixel strip = Adafruit_NeoPixel(total_pixels, PIN, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip1= Adafruit_NeoPixel(total_pixels, PIN1, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(total_pixels, PIN2, NEO_GRB + NEO_KHZ800);
 
а далее прошерстить весь код по поиску strip  и везде где найдено ниже добавить точно такую же строку, но с strip1 и strip2 (и сколько их там). т.е. понадобиться инициация в setup (по 3 строки на ленту), в loop после strip.show();  добавить нужное. Ну и далее дополнить все функции. покажу пример
Было:
	
	
	
	
	
	
	
	
		void buffer_to_ray(uint8_t ray_num, uint8_t inverse) {
  if (ray_num >= ray_number) return;
  for (uint8_t i = 0; i < ray_pixel; i++) {
    if (inverse) {
      strip.setPixelColor(i + ray_num * ray_pixel, one_ray[ray_pixel - 1 - i]);
    } else {
      strip.setPixelColor(i + ray_num * ray_pixel, one_ray[i]);
    }
  }
}
	 
	
	
		
	
 СТАЛО
	
	
	
	
	
	
	
	
		void buffer_to_ray(uint8_t ray_num, uint8_t inverse) {
  if (ray_num >= ray_number) return;
  for (uint8_t i = 0; i < ray_pixel; i++) {
    if (inverse) {
      strip.setPixelColor(i + ray_num * ray_pixel, one_ray[ray_pixel - 1 - i]);
      strip1.setPixelColor(i + ray_num * ray_pixel, one_ray[ray_pixel - 1 - i]);
      strip1.setPixelColor(i + ray_num * ray_pixel, one_ray[ray_pixel - 1 - i]);
    } else {
      strip.setPixelColor(i + ray_num * ray_pixel, one_ray[i]);
      strip1.setPixelColor(i + ray_num * ray_pixel, one_ray[i]);
      strip2.setPixelColor(i + ray_num * ray_pixel, one_ray[i]);
    }
  }
}