FingerDrum をつくる(su120編)
FingerDrumかっこいい!
ちょっと興味があってAmazon Unlimitedで以下の本を読んでみた。
スカペンさんの動画もステキ。
https://www.youtube.com/channel/UC5_rrkJ5o2Ytix1zQNQFGTQ
なんか楽しそうと思って、実際にどんな楽器があるか調べて見る。
iRig Padsは、2万円。MPD218は、1万円強。
素人がGarageBand につないで、お試しするにはちょっとお高いかも。
とはいえ、楽器としてはお手軽な価格でもあるし、演奏も楽しそう。
あと、キーパッドの打ち込みって、反応や押し具合はどうなんだろう。。。
なら、自分でつくろう。キー2個のはできたんだから、自分でも作れるはず。
ということで、 RPi pico と su120 でFingerDrumをつくる。
su120 4x4 keypad
いつも自作キーボードでお世話になるsu120を4x4 keypadにする。
4x4 の形に成形
- そのままだと5x4の基板のうち、不要部分をべきべきと削除。
-
4列目には他の基板からべきべきともってきた4x1の基板を取り付ける。(ネジ固定)
-
4列目のCOLをそれぞれ繋ぐ。
-
除去した
4列目のROW
を PING3
に接続 -
ロータリーエンコード共に除去したしまった
D 列のCOL
をC6
に接続
これで、以下のPIN配線が利用可能となる。
ジャンパー設定をしないので、キースイッチ配置側からみると、こんな感じ。
keymatrix を検知する
su120 というか、QMKが動くようなkeymatrixは、以下のような仕組みになっている。
列(COL)
青い線は、COLに接続されていて、circuitpythonではこんな感じで、INPUT(PULL UP)で初期化する。
col = digitalio.DigitalInOut(board.GP2)
col.switch_to_input(pull=digitalio.Pull.UP)
PULL UP
のおかげで、PINがどこにも接続されていないと key.value == True
つまり、 PINの値がON
となる
赤い配線をGND(OFF)にしておけば、スイッチをpressしてピンクの線がつながり、 key.value == False
つまり、PINの値が False
となる。
行(ROW)
前述の、 赤い配線をGND(OFF)
というが大事。
つまり、4行のキーを全部調べるためには、1行づつ、GND(他は+)にして調べる。
プログラムでON/OFFを切り換えるため、PINの設定は、OUTPUTで初期化する
row1 = digitalio.DigitalInOut(borad.GP6)
row1.direction = digitalio.Direction.OUTPUT
row2 = digitalio.DigitalInOut(borad.GP7)
row2.direction = digitalio.Direction.OUTPUT
1x2 の keymatrix の検知はこんな感じ。
row1.value = 0 # GND設定
row2.value = 1
# True: release, False:press
is_row1_not_press = col.value
row1.value = 1
row2.value = 0 # GND設定
# True: release, False:press
is_row2_not_press = col.value
print("row1 not press {}, row2 not press {}".format(is_row1_not_press, is_row2_not_press))
続き。