ゆかりメモスマートフォン用の表示で見るゆかりメモいろんなことのメモです。この広告は、90日以上更新していないブログに表示しています。自作キーボード前回は2キーキーボードまで出来上がったと思います。今回はキーマトリックスを使用して4キーキーボードまで展開しましょう。eucalyn.hatenadiary.jp前回の最後でプログラムはこうなってたと思います。}}このままではピンの数しかキーを増やせないですが、キーマトリックスを使用すればより多数のキーを認識させることができます。キーマトリックススイッチをマトリックス状に(2次元的に)配線することで、飛躍的に多数のキーを認識できるようになります。5×5状に配置すれば、10ピンで25キーを認識させることができます。理解しやすいように、2×2のキーマトリックスで説明しましょう。ここでは横の繋がりを行、縦の繋がりを列と表現し、スイッチはその組み合わせによって(行,列)と表現することにします。2×2キーマトリックスの場合、0行・1行と0列・1列の組み合わせにより、(0,0),(0,1),(1,0),(1,1)の4キーを認識させることができます。今まではスイッチを5Vと接続することでスイッチには常に電圧がかかっている状態でした。そのためスイッチを押せば対応するピンにHIGHが入力されるので、それを信号として拾っていました。キーマトリックスはスイッチの入力側にもマイコンの出力ピンを使います。Arduinoの出力ピンはdigitalWrite(Pin,HIGH);すると5Vに、digitalWrite(Pin,LOW);すると0Vに接続されるようになっています。0行ピンのみをHIGHにしているタイミングで入力ピンを読み取れば(0,0),(0,1)の状態を、1行ピンのみをHIGHにしているタイミングなら、(1,0),(1,1)の状態を読み取ることができる、という仕組みです。これを高速で繰り返して、1行ごとに読み込んでいくことでマトリックス上の全キーの情報を取得することができます。2×2キーマトリックスを組んでみるでは早速試しに組んでみましょう。ブレッドボード上にこんな風に回路を組みます。スイッチを行列の組み合わせで管理するために、2次元配列を使うように変更します。2次元配列だと、a[0][0]やa[1][1]のように行列の組み合わせで変数を管理することができます。シリアルモニターでもちゃんと監視できてるかと思います。行ごとにHIGHにして、INPUTピンを順番に読み取っていくイメージですね。回路の改良イメージ通り動いているように感じますね。実はこれだけでは問題があります。試しに(0,0),(0,1),(1,0)の3キーを同時に押しっぱなしにしてみてください。イメージ通りならa,b,cだけが入力されるはずですがなぜかdまで入力されると思います。これはなぜでしょう...?それは以下のように意図しないルートを通って電気が流れてしまっているためです。(1,1)は押していないのに、他のスイッチを通ることでRow1をHIGHにしてる時にCol1にHIGHが流れ込んでいます。これを避けるために、各スイッチに一つずつダイオードを繋ぎます。ダイオードは電流を片方向にしか通さない性質があるので、ちゃんと全てダイオードを繋いでいれば、意図しないルートは通れないようになるわけです。ダイオードは黒い筋の通った方に向かって電流が流れるのでその通りに接続します。全てにダイオードをつけるとこうなります。(0,0)のダイオードによって逆流が阻止されています。ブレッドボード上はこんな感じ。次回は6×2キーボードを作ります。eucalyn.hatenadiary.jpまとめ記事はこちら。(1)注目記事はてなブログをはじめよう!eucalynさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。