Если не перелопачивать весь код, то теоретически сигнал данных можно продублировать используя мосфет ( что бы не спалить порт). Будут синхронно работать. Если последовательно обрабатывать несколько портов в разных режимах, то при простейшем изменении кода в разы увеличится размер программы , это если под каждую модель тупо скопировать нужные функции и изменением пина и ленты, если переписать функции с выбором нужной ленты от скажем просто номера, то увеличится используемая память под массив светодиодов и все. Программа увеличится незначительно, НО! Управление снежинкой использует функции задержки, пусть и самописные, не тормозящие внешние процессы, но на время одного эффекта остальные снежинки будут замирать.
Для работы нескольких звезд в параллеле от разных пинов достаточно сделать так
описать нужное кол-во пинов
#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]);
}
}
}