I really need to get better at writing out my helpful ideas/statements
I hope all you should have to change is SendCMD() to SendCMD(4). I looked at the new master code I posted and that’s essentially what the ShowMono, etc, etc commands do anyways. They just take the color variables, the frame bytes and address as inputs rather than doing explicitly like the example code I posted.
Ideally, don’t use the Show commands since they require byte arrays that chew up your SRAM in a hurry. They were just put in to show how to format your own commands that don’t require so much memory. I NEVER use them since my RainbowCMD buffer is always directly populated by image/animation functions or data the functions retrieve from PROGMEM. There’s about enough room in the SRAM for the RainbowCMD[4][32] a few times and then that’s it. If you have a few screens worth of stuff stored without PROGMEM, you’ve filled up your SRAM. Try and populate the command buffer (RainbowCMD) directly from PROGMEM or possibly one other buffer you use the generate animations. For instance, I had a small array for both of my rainbow hallways that held a number from 0 to 45 for 45 unique, equal brightness colors. this was then used to populate the the RainbowCMD six times (one for each of my individual screens) and after each population of RainbowCMD I would send to one of the rainbowduinos before rewriting RainbowCMD and sending to the next rainbowduino.