Micro:bit、Micropython、キーパッドでキー入力して、LDEディスプレイに数値、記号を表示する
キーパッド
キーパッドは、数値(0~9)または記号(#、、.、,など)を入力する入力機器です。このキーパッドは、複数のキースイッチの端子を格子状に配線しています(キーマトリックス方式)。キースキャンでボタンの状態を読み取ります。キースキャンとは、Row1~Row4の行ごとにHighまたはLowを出力して、Col1~Col4の入力でキーの状態を検出する方法です。例えば、Row1~Row4を出力、Col1~Col4を入力として、Row1がLow、Row2~Row4がHighの場合、Col1~Col4の入力で、1、4、7、キーが押された状態がわかります。
用意するキーパッド
ここでは、とても薄いキーパッドを使用します。
他メーカーのキーパッドを購入するときは、 周辺回路にご留意してください。
インターフェース
キーパッドとMicro:bitは、デジタル信号で入力/出力します。ここでは、Micro:bitの入力端子にプルアップ設定をしています。
MicropythonとMicro:bit
サンプルソフトを以下に説明します。
フロー
サンプルプログラムのフローを以下に示します。
- キーパットのボタン配置の定義
- 検出したキーデータを格納するバッファを設定
- キーパッドの接続ピンの初期化
- キースキャンの実行
- キースキャン結果の検証(チャタリング防止)
- キースキャン結果をLEDディスプレイに表示
接続
接続表と接続図(写真)を示します。
Micro:bit | キーパッド |
P0 | Row1 |
P1 | Row2 |
P2 | Row3 |
P8 | Row4 |
P12 | Col1 |
P13 | Col2 |
P14 | Col3 |
P15 | Col4 |
コード
from microbit import * # LEDディスプレイを初期化 display.clear() rowNum = 4 colNum = 4 # キーパッドのボタン配置 keymap = [["1", "2", "3", "A"], ["4", "5", "6", "B"], ["7", "8", "9", "C"], ["*", "0", "#", "D"]] # 検出したキーデータを格納するバッファ、2つ用意しチャタリングを防止 beforeKey = [[True for col_loop in range(4)] for row_loop in range(4)] currentKey = [[True for col_loop in range(4)] for row_loop in range(4)] # キーパッドに接続するピン rowPin = (pin0, pin1, pin2, pin8) colPin = (pin12, pin13, pin14, pin15) # キーパッドの接続ピンの初期化 for pin_loop in range(0, 4, 1): rowPin[pin_loop].write_digital(1) colPin[pin_loop].set_pull(colPin[pin_loop].PULL_UP) key_active = False while True: for row_loop in range(0, 4, 1): rowPin[row_loop].write_digital(0) for col_loop in range(0, 4, 1): beforeKey[row_loop][col_loop] = currentKey[row_loop][col_loop] currentKey[row_loop][col_loop] = colPin[col_loop].read_digital() rowPin[row_loop].write_digital(1) for row_loop in range(0, 4, 1): for col_loop in range(0, 4, 1): if currentKey[row_loop][col_loop] != beforeKey[row_loop][col_loop]: if currentKey[row_loop][col_loop] == 0: key_data = keymap[row_loop][col_loop] key_active = True break if key_active: break if key_active: print("get_key:%s" % key_data) display.show(key_data) key_active = False sleep(100)
結果
押したキーの数値または記号がLEDディスプレイに表示できました。以下は、5キーを押したときLEDディスプレイは5を表示しています。
他メーカーのキーパッドを購入するときは、 周辺回路にご留意してください。