// Mux control pins
int s0 = 8;
int s1 = 9;
int s2 = 10;
int s3 = 11;

int button;
int DEBOUNCE_DELAY = 100;

// Mux in "SIG" pin
int SIG_pin = 0;

void setup() {
  pinMode(s0, OUTPUT); 
  pinMode(s1, OUTPUT); 
  pinMode(s2, OUTPUT); 
  pinMode(s3, OUTPUT); 

  digitalWrite(s0, LOW);
  digitalWrite(s1, LOW);
  digitalWrite(s2, LOW);
  digitalWrite(s3, LOW);

  Serial.begin(9600);
}

// Global variable to store the last button press
int lastButton = -1;

void loop() {
  // Check for button press
  checkButtonPress();
  delay(100);
}

void checkButtonPress() {
  // Loop through and check all 16 channels for button press
  for(int i = 0; i < 16; i++) {
    int button = readMux(i);
    if(button != -1 && button != lastButton) {
      Serial.print("Button ");
      Serial.print(button);
      Serial.println(" was pressed.");
      lastButton = button;
    }
  }
}



float readMux(int channel) {
  int controlPin[] = {s0, s1, s2, s3};

  const int muxChannel[16][4] = {
    {0,0,0,0}, //channel 0
    {1,0,0,0}, //channel 1
    {0,1,0,0}, //channel 2
    {1,1,0,0}, //channel 3
    {0,0,1,0}, //channel 4
    {1,0,1,0}, //channel 5
    {0,1,1,0}, //channel 6
    {1,1,1,0}, //channel 7
    {0,0,0,1}, //channel 8
    {1,0,0,1}, //channel 9
    {0,1,0,1}, //channel 10
    {1,1,0,1}, //channel 11
    {0,0,1,1}, //channel 12
    {1,0,1,1}, //channel 13
    {0,1,1,1}, //channel 14
    {1,1,1,1}  //channel 15
  };

  // Loop through the 4 sig
  for(int i = 0; i < 4; i ++) {
    digitalWrite(controlPin[i], muxChannel[channel][i]);
  }

  // Read the value at the SIG pin
  int val = analogRead(SIG_pin);

  if(val > 0) {
    // If the button was pressed, return the channel number
    delay(DEBOUNCE_DELAY);
    return channel;
  }else{
    return 0;
  }
  
}
$abcdeabcde151015202530354045505560fghijfghij
$abcdeabcde151015202530354045505560fghijfghij