Created
March 2, 2024 22:40
-
-
Save danthedaniel/5d22f7662c2e2783da42d3a79af29d56 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import time | |
import board | |
import digitalio | |
import usb_hid | |
from adafruit_hid.consumer_control import ConsumerControl | |
from adafruit_hid.consumer_control_code import ConsumerControlCode | |
def init_pin(pin_id): | |
pin = digitalio.DigitalInOut(pin_id) | |
pin.direction = digitalio.Direction.INPUT | |
pin.pull = digitalio.Pull.UP | |
return pin | |
def key_pressed(pin): | |
return not pin.value | |
def handle_volume(playpause_pin): | |
global pins, key_codes, cc | |
volume_changed = False | |
while key_pressed(playpause_pin): | |
for pin_id, pin in pins.items(): | |
if pin == playpause_pin: | |
continue | |
if not key_pressed(pin): | |
continue | |
inner_key_code = key_codes[pin_id] | |
volume_changed = True | |
if inner_key_code == ConsumerControlCode.SCAN_PREVIOUS_TRACK: | |
cc.send(ConsumerControlCode.VOLUME_DECREMENT) | |
elif inner_key_code == ConsumerControlCode.SCAN_NEXT_TRACK: | |
cc.send(ConsumerControlCode.VOLUME_INCREMENT) | |
cc.release() | |
time.sleep(0.05) | |
return volume_changed | |
key_codes = { | |
board.D6: ConsumerControlCode.SCAN_PREVIOUS_TRACK, | |
board.D7: ConsumerControlCode.PLAY_PAUSE, | |
board.D5: ConsumerControlCode.SCAN_NEXT_TRACK, | |
} | |
pins = { | |
pin_id: init_pin(pin_id) | |
for pin_id in key_codes.keys() | |
} | |
cc = ConsumerControl(usb_hid.devices) | |
while True: | |
for pin_id, pin in pins.items(): | |
if not key_pressed(pin): | |
continue | |
key_code = key_codes[pin_id] | |
if key_code == ConsumerControlCode.PLAY_PAUSE: | |
volume_changed = handle_volume(pin) | |
if not volume_changed: | |
cc.send(key_code) | |
cc.release() | |
time.sleep(0.01) | |
else: | |
# Handle next/previous track | |
cc.send(key_code) | |
while key_pressed(pin): | |
# wait for button release | |
pass | |
cc.release() | |
time.sleep(0.01) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment