One of your challenges is that cyclonR() is blocking whilst executing so you don’t check the buttons often for update,
You would need to rewrite the animation using non blocking code.
Each time you call the function, you look if it’s time to change some LEDs and you perform that step and go back to the loop
For extra information and examples look at
- Using millis() for timing. A beginners guide
- Several things at the same time
- Flashing multiple LEDs at the same time
If you don’t do that you’ll have a tough time dealing with multiple strips at the same time.
It seems you have APA102 types of LEDs. If you don’t use the giga, use the fastled libray. It will use hardware SPI if it can. See SPI Hardware or Bit banging · FastLED/FastLED Wiki · GitHub