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

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

4×4キーマトリックススイッチを作ってみる

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

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

赤丸のとこが修正箇所

…まぁ、接続が間違ってたんでつなぎ変えたんですけど、Afterの写真だけ見てもわかりませんよね。

目次

Arduinoにつないでみる。

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

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);
}
}

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

動かしてみた

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

ProMicroと接続してコードを書き込む

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

0100
0000
0000
0000
0000
0000
0010
0000
0000
0000
0000
0000
.
.
.

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

おわりに

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

シェアして応援お願いします
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次