57 lines
1.3 KiB
Python
57 lines
1.3 KiB
Python
|
import time
|
||
|
import board
|
||
|
from digitalio import DigitalInOut, Direction, Pull
|
||
|
import usb_midi
|
||
|
import adafruit_midi
|
||
|
from adafruit_midi.control_change import ControlChange
|
||
|
|
||
|
# MIDI setup as MIDI out device
|
||
|
midi = adafruit_midi.MIDI(midi_out=usb_midi.ports[1], out_channel=0)
|
||
|
|
||
|
|
||
|
# button pins, all pins in order skipping GP15
|
||
|
button_pins = [
|
||
|
board.GP18,
|
||
|
board.GP19,
|
||
|
board.GP20,
|
||
|
board.GP21,
|
||
|
board.GP22,
|
||
|
]
|
||
|
|
||
|
buttons = []
|
||
|
for pin in button_pins:
|
||
|
button = DigitalInOut(pin)
|
||
|
button.direction = Direction.INPUT
|
||
|
button.pull = Pull.UP
|
||
|
buttons.append(button)
|
||
|
|
||
|
cc_numbers = [
|
||
|
20,
|
||
|
21,
|
||
|
22,
|
||
|
23,
|
||
|
24,
|
||
|
]
|
||
|
|
||
|
|
||
|
|
||
|
# button states
|
||
|
button_states = [True] * len(buttons)
|
||
|
|
||
|
|
||
|
while True:
|
||
|
for i, button in enumerate(buttons):
|
||
|
current_state = button.value
|
||
|
if current_state != button_states[i]:
|
||
|
if not current_state:
|
||
|
# Button pressed
|
||
|
midi.send(ControlChange(cc_numbers[i], 127))
|
||
|
print(f"Button {i+1} pressed -> CC{cc_numbers[i]}:127")
|
||
|
else:
|
||
|
# Button released
|
||
|
midi.send(ControlChange(cc_numbers[i], 0))
|
||
|
print(f"Button {i+1} released -> CC{cc_numbers[i]}:0")
|
||
|
button_states[i] = current_state
|
||
|
|
||
|
time.sleep(0.01)
|