ド初心者が自作キーボードに挑む[キーマトリクス・コーディング編]
腹筋ローラーで腹筋がズタズタに破壊されたみそです。
前回はこちら!↓
とうとうキーパッドを使用するぞおおおい!!
実践② 自分で作ったキーパッドの動作確認
え~…まずね…
ピンヘッダってなぁにこれ~どうすんの~~??と思ってたんです作った時…
これでブレッドボードに直接差す感じ?????って…
ハンダ付けるんですねこれ…そりゃそうだよ…
よ、よし下準備完了…接続!!!!!
とりあえず自分で作ったキーパッド自体が正常に動くかが知りたかったので
サンプルプログラムで動かしてみることにしました。
秋月電子さんの通販ページにサンプルプログラムzipがあります。
出力文字をちょっといじって…どきどき!!
てぇい!!
出力できてるううううううう!!!!うおおおおおお!!
キーパッド自体はちゃんと作れてたみたいだ!!一安心。
次のステップへ!
実践③-1 自分でコーディングの前に「キーマトリクス」とは
サンプルプログラムで動いたらそりゃこちら側も自作したくなるよね!!
どうやらキーマトリクスについては必修事項の模様。
【キーマトリクス】
・1つのキーに一つのピンを当てはめてたらピンがどんだけあっても足りん
・何とか節約できんか
・縦と横の表みたいにキーを配置して、どこのスイッチが押されているか調べれば
縦一列に1ピン、横一列に1ピンだけで済むから節約できるのでは?
←赤のところが押されているキー
例えばこの方式なら、キーは12個だけどつなぐのは7つでよいのでハチャメチャに節約できる。
X列の1行目から順番に探してもらって、Y列の3行目で押されている状態!
って発見してもらう、そんな流れだと理解!
もし2つ以上のボタンが押されていたとしたら、ダイオードがない場合
押してないキーにも電気が流れることになり誤作動を起こす。
ダイオードちゃんさまさま!!!
実践③-2 自分でコーディング!
設計としては①~③の流れにする!
今回のキットはプルアップ抵抗を備えていると記載があったので
①X・Y・Zを順番にLOW(8,7,6ピン)
例:XをLOWにしてみる
②A・B・C・Dの列が押されているか判別(5,4,3,2ピン)
5~2ピンにLOW無し→①に戻る
5~2ピンにLOW有り→列番号、行番号を変数に保存
例:2ピンがHIGHでした→列番号0、行番号4
③押されているキーが一つに絞られるので、そのキーで出力したい値を設定して出す!
例:key[3][4] = {{*,7,4,1},{0,8,5,2},{#,9,6,3}}的な感じ
key[列番号0][行番号4]は「1」!!!!!!!
これでできるはずだ…?ほんとか~~~?!
プルアップ抵抗わかりにくくない…??
押したら電気が流れるからHIGHになるんじゃない!?って思った…
実際のコード
結果がこう!!!!!!!!!!!
うごいた~~~!!!!あああああああ
「みそしる」だって出力可能だぜ!!!!!
しかしながら…ちょっと油断すると一押しで2つ出力される…
おまけ チャタリングについて
一回しか押してないのに連続で出力されるのは、チャタリングというらしい。
ボタンを一回しか押してないつもりでも、実は中で接点がビヨヨーンして
電気がハチャメチャに何度も流れてるので連続で押した!と判定されちゃう。
例えば『ビヨヨンしてるのが落ち着くまで、押してるかどうかの判定をしないよ!』
とすればチャタリングは起こらないはずだけど
コンピューターさんは秒より短い時間で動いてるから調整がうまくできない~~!
待つ時間を長くしすぎれば判定漏れが発生して、出力されない文字が出てくる。
短くしすぎれば過剰に判定されて、多く出力されてしまう。
対策として
・Delayで判定のタイミングを遅らせる
・連続で〇回押されたら一回押されたことにする
…などなどたくさんあるみたいだけど
キーボード関連の中ではきっとなんか確立された回避方法が(曖昧)あるんだろうなあ
まだまだ勉強あるのみ。
お勉強とりあえずおわり
今回はちゃんと動きも確認できたし、コードもかけたのでここまで!
表面実装ダイオードがあるよ…とのことなので、なにかで練習を挟んでから
やっとゆかり屋さんのBlockeyをつくることになるかもしれない!!
楽しかったので早く作りたいなー