MacroPad改造(その1)

以前マクロパッドを購入してようやくいじる余裕ができたので、
プログラム書いてみた。

経緯

以前からの腱鞘炎でライブコーディングツール作ったりしていたが、
その前にまともにノートの入力ができないのはいずれにしても困る。

このため、キーボードの形をしてノートを自由に入力できるツールを作る予定。

用意

  • RP2040 Macropad(本来なら自分で設計してもいいんだけど、まずはお試し)
  • CircuitPython
  • 各種ライブラリ

コード

割と適当に書いても動くので便利。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import board
import time
import random
import usb_midi
import adafruit_midi
import simpleio
 
from adafruit_midi.control_change import ControlChange
from adafruit_midi.note_off import NoteOff
from adafruit_midi.note_on import NoteOn
from adafruit_midi.pitch_bend import PitchBend
from digitalio import DigitalInOut, Pull
from adafruit_macropad import MacroPad
from adafruit_display_text import label
 
button = [DigitalInOut(board.KEY1),
    DigitalInOut(board.KEY2),
    DigitalInOut(board.KEY3),
    DigitalInOut(board.KEY4),
    DigitalInOut(board.KEY5),
    DigitalInOut(board.KEY6),
    DigitalInOut(board.KEY7),
    DigitalInOut(board.KEY8),
    DigitalInOut(board.KEY9),
    DigitalInOut(board.KEY10),
    DigitalInOut(board.KEY11),
    DigitalInOut(board.KEY12),
]
 
# ノート管理
note=[0,0,0,0,0,0, 0,0,0,0,0,0]
note_vel=[0,0,0,0,0,0, 0,0,0,0,0,0]
note_state=[False,False,False,False,False,False,
False,False,False,False,False,False]
 
for i in range(12):
    button[i].pull = Pull.UP # 内部のプルアップ抵抗を有効化する
    note[i]=0
    note_vel[i]=0
    print(button[i].value)
 
led = simpleio.DigitalOut(board.LED)
 
# MIDIポートの入出力についてデバイス取得
midi = adafruit_midi.MIDI(
    midi_out=usb_midi.ports[1], out_channel=0
)
 
while True:
    nt=0
    for i in range(12):
        if button[i].value==False:
            if note_state[i]==False:
                nt=i+45
                midi.send(NoteOn( nt, 120))
                note_state[i]=True
        else:
            if note_state[i]==True:
                nt=i+45
                midi.send(NoteOff(nt, 120))
                note_state[i]=False