Raspberry Piによくあるテンキー+2ボタンを接続するためのモジュールです。直結するとI/Oが足りない or 足りても勿体ないことになるので、12ボタンを時間差でスキャンすることで信号線を6本に減らしています。
本家ラズパイでも良いですが、高いのでOrangePi Zeroをおすすめします。このコード(C91版)もOrangePi Zero用にGPIO周りを実装しています。他のボードを利用する場合はGPIO周りを修正してください。ちなみにOrangePiはAliExpressで買うと大体1週間で届きます。
ユニバーサル基板でもできなくはないです(やりました)。ただ、とてもとても疲れます。C92にはPCBを出したいなぁ・・・
6本の信号線(Vcc/GNDを入れると8本)を繋ぐ必要があります。逆接の保護回路は入っていないので、Vcc/GNDの繋ぎ間違いに注意してください。
このモジュールは、直近のリセット(D_CLR=L)以降にボタンが押されたかどうかを保持するように設計されています。そのためスキャン速度より短い間隔での連打は検出できません。基本的な使用手順は以下になります。
- D_CLRをLに落とす
- D_CLRをHにする
- SEL[3..0]を"0000"にセットする
- Q(コネクタ3番ピン)の値を読む
- SEL[3..0]を"0001"にセットする
- Qの値を読む
- 以下、"1111"まで繰り返し、最初に戻る
本来はSEL[3..0]の変更後、tpd待機する必要がありますが、RaspberryPiのGPIOの速度的に問題になることはないと思います。もし引っかかった場合は、nop等で待機を入れてください。