Ciao
Sicuramente la struttura del programma è da rivedere, perché i for bloccano lo scorrimento del programma, che invece deve andare alla massima velocità (salvo casi particolari in cui si sia perfettamente coscienti di ciò che si sta facendo...).
Devi scrivere una funzione che piloti ciascun LED ricevendo in ingresso il numero del LED e la luminosità desiderata, contenente più o meno questo blocco:
analogWrite (oepin, 255);
digitalWrite (latchpin, LOW);
shiftOut (datapin, clockpin, LSBFIRST, dato);
digitalWrite (latchpin, HIGH);
delay (10);
analogWrite (oepin, 255);
A quel punto, devi solo inviare volta per volta le informazioni corrette.
In particolare, per quanto riguarda la dissolvenza, puoi inviare dei byte 0b11000000 | 0bxxxxxx, in modo da mantenere i 2 byte più a sinistra sempre a 1.