

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

[![ESP32でキーマトリクス回路を組む](https://i.stack.imgur.com/jnBBp.jpg)](https://i.stack.imgur.com/jnBBp.jpg)

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

[code]

    //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（１）、
    　//押されていないときは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++;
    
    }
    
[/code]

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


CC BY-SA 4.0
2018-10-15T06:25:17.083
49288
2018-10-15T06:26:45.483
2018-10-15T06:26:45.483
3060
28433
question
arduino
ESP32でボタンの同時押しが検知できない件