ESP32-DevKitCと74HC138(デコーダ、デマルチプレクサ)と8個のボタンを使い、
次のような回路を組みました。
Arduinoで同様の回路を組んだ時は、正常にボタンの同時押しが検知できたと思うのですが、
ESP32ではうまく検知できていません。
8本の信号線がバッティングしないようダイオードを噛ませております。
任意のボタンAを押したままにしておいて、別のボタンBを押すと、
ボタンAが離された時の処理が走ってしまい、Bの押下も検知されません。

ESP32でキーマトリクス回路を組む

コードも念のため載せておきます。

//Mux control pins
int s0 = 12;
int s1 = 13;
int s2 = 14;
int controlPin[] = {s0, s1, s2};

int muxChannel[8][3] = {
  {0, 0, 0}, //channel 0
  {1, 0, 0}, //channel 1
  {0, 1, 0}, //channel 2
  {1, 1, 0}, //channel 3
  {0, 0, 1}, //channel 4
  {1, 0, 1}, //channel 5
  {0, 1, 1}, //channel 6
  {1, 1, 1}, //channel 7
};

int loop_0_7 = 0;

void setup() {

  pinMode(s0, OUTPUT);
  pinMode(s1, OUTPUT);
  pinMode(s2, OUTPUT);

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

  pinMode(27, INPUT_PULLUP);

  Serial.begin(115200);

}

void loop() {
  //74HC138の0ピン~7ピンに順次Lowを出力していきます。
  for (int i = 0; i < 3; i ++) {
    if(muxChannel[loop_0_7][i]) {
      if(i==0) GPIO.out_w1ts = ((uint32_t)1 << 12);
      else if(i==1) GPIO.out_w1ts = ((uint32_t)1 << 13);
      else if(i==2) GPIO.out_w1ts = ((uint32_t)1 << 14);
    }else{
      if(i==0) GPIO.out_w1tc = ((uint32_t)1 << 12);
      else if(i==1) GPIO.out_w1tc = ((uint32_t)1 << 13);
      else if(i==2) GPIO.out_w1tc = ((uint32_t)1 << 14);
    }
  }
  //ボタンが押されたかどうかをESP32の27ピンで検知しています。
 //内部抵抗でプルアップしているため、ボタンが押されていないときはHIGH(1)、
 //押されていないときはLOW(0)となります。
 byte res1 = (GPIO.in >> 27) & 0x1;
  //ボタンが押された時は、その時のloop_0_7の値を読み取ります。
 //これがボタン番号となります。
  if(!res1){Serial.println(loop_0_7);delay(100);}

  if(loop_0_7==7) loop_0_7=0;
  else loop_0_7++;

}

この原因がお分かりになる方いらっしゃいますでしょうか。