I think the }s in void loop were a litte off, so the count up code was not separated from the count down code. Try it like this.
void loop() {
//clear display
//for(int group=0; group<totalGroups; group++){
//digitalWrite (SS,LOW);
//SPI.transfer (registerAddress[group]); // register to write to
//SPI.transfer (B00000000); // and value
//digitalWrite (SS,HIGH);
//}
//count up
for(int group=0; group<totalGroups; group++){
for(int led=0; led<8; led++){
digitalWrite (SS,LOW);
SPI.transfer (registerAddress[group]); // register to write to
SPI.transfer (ledIn[led]); // and value
digitalWrite (SS,HIGH);
delay(pause);
if ( (group == 7) && (led == 3) ){ led = 8;}
}
}
for(int group2=7; group2>=0; group2--){
Serial.print("GROUP 2: ");
Serial.println(group2);
if(group2 >= 7){
Serial.println(" -LAST GROUP- ");
for (int led=3; led>=0; led--){
digitalWrite (SS,LOW);
SPI.transfer (registerAddress[group2]); // register to write to
SPI.transfer (ledOut[led]); // and value
digitalWrite (SS,HIGH);
delay(pause);
ledCounter--;
}
}
else{
Serial.print(" -NOT LAST GROUP- ");
Serial.println(group2);
for (int led=7; led>=0; led--){
digitalWrite (SS,LOW);
SPI.transfer (registerAddress[group2]); // register to write to
SPI.transfer (ledOut[led]); // and value
digitalWrite (SS,HIGH);
delay(pause);
ledCounter--;
}
}
}
}