first commit fisher price usb foot controller with keyboard macros
This commit is contained in:
parent
88fd01055e
commit
91716bf246
1 changed files with 71 additions and 0 deletions
71
FisherPrice_USB_Foot_Pedal/code.py
Executable file
71
FisherPrice_USB_Foot_Pedal/code.py
Executable file
|
|
@ -0,0 +1,71 @@
|
||||||
|
# SPDX-FileCopyrightText: 2023 Robert Dale Smith for Adafruit Industries
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
# The Fisher-Price Kick and Play Piano Gym has five buttons that are
|
||||||
|
# active high. Pressed = 1, Released = 0. This code turns that into
|
||||||
|
# keyboard key press, key combos, and/or key press/combo macros.
|
||||||
|
|
||||||
|
import time
|
||||||
|
import board
|
||||||
|
import usb_hid
|
||||||
|
from adafruit_hid.keyboard import Keyboard
|
||||||
|
from adafruit_hid.keycode import Keycode
|
||||||
|
from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS
|
||||||
|
from digitalio import DigitalInOut, Direction, Pull
|
||||||
|
|
||||||
|
# Set up a keyboard device.
|
||||||
|
kbd = Keyboard(usb_hid.devices)
|
||||||
|
layout = KeyboardLayoutUS(kbd)
|
||||||
|
|
||||||
|
# Setup the buttons with internal pull-down resistors
|
||||||
|
buttons = []
|
||||||
|
for pin in [board.A0, board.A2, board.CLK, board.D2, board.D3]: # kb2040 pins
|
||||||
|
button = DigitalInOut(pin)
|
||||||
|
button.direction = Direction.INPUT
|
||||||
|
button.pull = Pull.DOWN
|
||||||
|
buttons.append(button)
|
||||||
|
|
||||||
|
# Each button corresponds to a key or key combination or a sequence of keys
|
||||||
|
keys = [
|
||||||
|
Keycode.A,
|
||||||
|
(Keycode.COMMAND, Keycode.TAB),
|
||||||
|
[
|
||||||
|
Keycode.UP_ARROW,
|
||||||
|
Keycode.ENTER
|
||||||
|
],
|
||||||
|
[
|
||||||
|
Keycode.END,
|
||||||
|
(Keycode.SHIFT, Keycode.HOME),
|
||||||
|
(Keycode.COMMAND, Keycode.C),
|
||||||
|
],
|
||||||
|
[
|
||||||
|
(Keycode.CONTROL, Keycode.A),
|
||||||
|
'Hello World',
|
||||||
|
Keycode.PERIOD
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
while True:
|
||||||
|
# check each button
|
||||||
|
for button, key in zip(buttons, keys):
|
||||||
|
if button.value: # button is pressed
|
||||||
|
if isinstance(key, tuple):
|
||||||
|
kbd.press(*key)
|
||||||
|
kbd.release_all()
|
||||||
|
elif isinstance(key, list):
|
||||||
|
for macro_key in key:
|
||||||
|
if isinstance(macro_key, str): # print a string
|
||||||
|
layout.write(macro_key)
|
||||||
|
elif isinstance(macro_key, tuple): # press combo keys
|
||||||
|
kbd.press(*macro_key)
|
||||||
|
kbd.release_all()
|
||||||
|
else: # press a single key
|
||||||
|
kbd.press(macro_key)
|
||||||
|
kbd.release_all()
|
||||||
|
time.sleep(0.1) # delay between keys
|
||||||
|
else: # press a single key
|
||||||
|
kbd.press(key)
|
||||||
|
kbd.release_all()
|
||||||
|
time.sleep(0.1) # debounce delay
|
||||||
|
|
||||||
|
time.sleep(0.1)
|
||||||
Loading…
Reference in a new issue