4x4キーマトリックスを作ってみる その2

 前回、4x4キーマトリックスの回路を描いて、ユニバーサル基板上に実装してみました。

moutakusan.hatenablog.com

 今回はプログラムを書いてキーマトリックスが動作することを確認していきたいと思います。

…の前に、前回作った回路の導通チェックをしているとおかしいところがあったんで、半田付けを修正しました。修正後が↓になります。

f:id:moutakusan:20201022222811p:plain
赤丸のとこが修正箇所
…まぁ、接続が間違ってたんでつなぎ変えたんですけど、Afterの写真だけ見てもわかりませんよね。

Arduinoにつないでみる。

 Arduino(ProMicro)に接続したキーマトリックスの回路図はこんなんです。

f:id:moutakusan:20201022214439p:plain
ProMicroにキーマトリックスを接続

単純にGPIOポートにキーマトリックスのKEYIN、KEYOUTを接続しただけです。

部品表はこちら。

緒言 部品 購入先リンク
U1 ProMicro Amazon
SW1~16 6x6x5mm タクトスイッチ Amazon
D1~4 1N4148 秋月電子
R1~4 15kohm 1/4W 1% 金属被膜抵抗 Aliexpress
- ユニバーサル基板 秋月電子
- ピンヘッダ 秋月電子

コードを書いてみる

 KEYOUT1~4を順番にHIGHにしていって、どのタイミングでKEYIN1~4のどれがHGIHになるかを見ればいいわけです。ですので、動作確認用のコードはこんな感じにしました。

const int KEYIN[] = {18,19,20,21};
const int KEYOUT[] = {10,14,15,16};

unsigned long previousMillis = 0;  
const long interval = 50;          
int columnNum=0;
int sw[4][4]={0};

void setup() {
  for(int i=0; i<=3; i++){
    pinMode(KEYIN[i],INPUT);
    pinMode(KEYOUT[i],OUTPUT);
    digitalWrite(KEYOUT[i], LOW);
  }
  Serial.begin(9600);
}

void loop() {
  unsigned long currentMillis = millis();
  
  if(currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    digitalWrite(KEYOUT[columnNum], HIGH);
    for(int rowNum=0; rowNum<=3; rowNum++){
      sw[columnNum][rowNum]=digitalRead(KEYIN[rowNum]);
      delay(10);
    }
    digitalWrite(KEYOUT[columnNum], LOW);
    columnNum++;
    columnNum &=3;
  }

  if(columnNum==3){
    for(int i=0; i<=3; i++){
      for(int j=0; j<=3; j++){
        Serial.print(sw[i][j]);
      }
      Serial.println();
    }
    Serial.println();
    Serial.println();
    delay(500);
  }
  
}

 一列ずつ順番にスイッチの状態を見ていって、4x4の配列sw[4][4]にスイッチの状態を書き込んでるって感じですね。で、結果をシリアル出力で見てます。

動かしてみた

 回路図に沿ってキーマトリックスとProMicroを接続し、書いたコードをProMicroに書き込みます。

f:id:moutakusan:20201022214906p:plain
ProMicroと接続してコードを書き込む

 走らせてみると、こんな感じで反応してくれました。

0100
0000
0000
0000


0000
0000
0010
0000


0000
0000
0000
0000

.
.
.

 ちゃんと動いてくれました。よしよし。

おわりに

 キーマトリックスは昔からあるものなので、技術情報も多く、あまり苦労せずに回路やコードを書くことができました。ユニバーサル基板のサイズを攻めすぎたせいか、配線が悩ましく、半田付けには少し苦労しました。
 キーマトリックスの製作はこれにて一旦完了です。お疲れ様でした。


おしまい。