Or not. Looking at only the code you posted, it is a guess as to how much data sprawls all over the place and what needs to be 10 of something or 5 of another. And what would be sensibly packaged to travel around together.
In general, however, making new things by appending a digit, as it looks like and by comment can be inferred you are doing, viz:
int dmxuni_1CH[10] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
For instance, that holds the 10x possible (1-511) channels for Universe_1
is a sign that maybe rather than
int dmxuni_1CH[10] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int dmxuni_2CH[10] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int dmxuni_3CH[10] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int dmxuni_4CH[10] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int dmxuni_5CH[10] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
a 2D array would work:
const int N_UNIVERSES = 5;
const int NCHANNELS = 10;
int dmxuni[N_UNIVERSES][NCHANNELS];
Then a channel X from universe Y could be accessed
value = dmxuni[Y][X];
Yes, they would be indexed using 0 through 4 for the universe number. That's just C/C++, get accustomed to treating zero as a perfectly good place to start numbering things.
This would afford advantages to coding around the data - loops and functions can be generalized rather than copied/pasted/edited N - 1 times to make N things happen, as well as a maintenance nightmare.
a7