#define DATA_PIN  11
#define LATCH_PIN 12
#define CLOCK_PIN 13
#define fmuxd0 6
#define fmuxd1 7
#define fmuxd2 8
#define fmuxOut 9
#define smuxd0 3
#define smuxd1 5
#define smuxd2 4
#define smuxOut 10

#define NUM_SHIFT_REGS 6
const uint8_t numOfRegisterPins = NUM_SHIFT_REGS * 8;
int data[48] = {1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1};

void setup() {
  Serial.begin(115200);
  pinMode(fmuxd0, OUTPUT);
  pinMode(fmuxd1, OUTPUT);
  pinMode(fmuxd2, OUTPUT);
  pinMode(smuxd0, OUTPUT);
  pinMode(smuxd1, OUTPUT);
  pinMode(smuxd2, OUTPUT);
  pinMode(fmuxOut, INPUT);
  pinMode(smuxOut, INPUT);
  pinMode(DATA_PIN, OUTPUT);
  pinMode(CLOCK_PIN, OUTPUT);
  pinMode(LATCH_PIN, OUTPUT);
  digitalWrite(LATCH_PIN, LOW);
  for (int i = numOfRegisterPins - 1; i >= 0; i--) {
    digitalWrite(CLOCK_PIN, LOW);
    digitalWrite(DATA_PIN, data[i]);
    digitalWrite(CLOCK_PIN, HIGH);
  }
  digitalWrite(LATCH_PIN, HIGH);
}

void loop() {

  Serial.println("select   d1   d0   out   out2");
  for(int inx=0;inx<2;inx++){
    for(int index=0;index<4;index++){
      if (inx == 0){
        digitalWrite(fmuxd0, LOW);
        digitalWrite(smuxd0, LOW);
        Serial.print("  ");
        Serial.print("0");
      } else {
        digitalWrite(fmuxd0, HIGH);
        digitalWrite(smuxd0, HIGH);
        Serial.print("  ");
        Serial.print("1");
      }
      Serial.print("      ");
      if (index > 1) {
        digitalWrite(fmuxd1, HIGH);
        digitalWrite(smuxd1, HIGH);
        Serial.print("1");
      } else {
        digitalWrite(fmuxd1, LOW);
        digitalWrite(smuxd1, LOW);
        Serial.print("0");
      }
      Serial.print("    ");
      if ((index+1) % 2) {
        digitalWrite(fmuxd2, LOW);
        digitalWrite(smuxd2, LOW);
        Serial.print("0");
      } else {
        digitalWrite(fmuxd2, HIGH);
        digitalWrite(smuxd2, HIGH);
        Serial.print("1");
      }
      Serial.print("     ");
      if (digitalRead(fmuxOut) == HIGH){
        Serial.print("1");
      } else {
        Serial.print("0");
      }
      Serial.print("      ");
      if (digitalRead(smuxOut) == HIGH){
        Serial.println("1");
      } else {
        Serial.println("0");
      }
      delay(1000);
    }
  }
}

74HC595
74HC595
74HC595
74HC595
74HC595
74HC595