Concatenating Serial.print output

Those aren't good tests.
You can read the entire PORT (all 8 pins at once) and make decisions from there, vs reading the pins multiple times.

portRead = PORTD; // capture state of D7 to D0
portRead = (portRead && 0b11000000); // mask off the lower bits that are not used
switch (portRead){
case 0b00000000:
// value 0 actions
break;
case 0b01000000:
// value 1 actions
break;
case 0b10000000;
// value 2 actions
break;
case 0b11000000:
// value 3 actions
break;
}