2024-02-16 18:16:03 +01:00
|
|
|
# Raspberry Pi Pico Stopmo pad
|
|
|
|
#
|
|
|
|
# Using CircuitPython : https://circuitpython.org/board/raspberry_pi_pico/
|
|
|
|
# Using Adafruit USB_HID Library : https://github.com/adafruit/Adafruit_CircuitPython_HID/releases
|
|
|
|
#
|
|
|
|
# Buttons default mapping
|
|
|
|
# Red = F
|
|
|
|
# Green = G
|
|
|
|
# Blue = H
|
|
|
|
# Black = I
|
|
|
|
#
|
|
|
|
# Yellow on : multimedia mode
|
|
|
|
#
|
|
|
|
# Forked from
|
|
|
|
# DroneBot Workshop 2021
|
|
|
|
# https://dronebotworkshop.com
|
|
|
|
|
|
|
|
import time
|
|
|
|
import board
|
|
|
|
import digitalio
|
|
|
|
import usb_hid
|
|
|
|
|
|
|
|
# Regulare keys
|
|
|
|
from adafruit_hid.keyboard import Keyboard
|
|
|
|
from keyboard_layout_win_fr import KeyboardLayout
|
|
|
|
from keycode_win_fr import Keycode
|
|
|
|
|
|
|
|
# multimedia keys
|
|
|
|
# ~ from adafruit_hid.consumer_control import ConsumerControl
|
|
|
|
# ~ from adafruit_hid.consumer_control_code import ConsumerControlCode
|
|
|
|
# ~ cc = ConsumerControl(usb_hid.devices)
|
|
|
|
|
|
|
|
# KB setup
|
|
|
|
keyboard = Keyboard(usb_hid.devices)
|
|
|
|
keyboard_layout = KeyboardLayout(keyboard)
|
|
|
|
|
|
|
|
# Buttons setup
|
|
|
|
# Change GPIOs according to HW
|
|
|
|
buttons_gpio = {
|
|
|
|
# name GPIO Keycode State DigitalIO (switch)
|
2024-03-02 10:03:00 +01:00
|
|
|
"red" : dict(gpio=board.GP18, keycode=Keycode.D, state=False, DIO=None),
|
|
|
|
"green" : dict(gpio=board.GP19, keycode=Keycode.N, state=False, DIO=None),
|
|
|
|
"blue" : dict(gpio=board.GP16, keycode=Keycode.J, state=False, DIO=None),
|
|
|
|
"black" : dict(gpio=board.GP20, keycode=Keycode.E, state=False, DIO=None),
|
|
|
|
"yellow": dict(gpio=board.GP17, keycode=Keycode.B, state=False, DIO=None),
|
2024-02-16 18:16:03 +01:00
|
|
|
"switch": dict(gpio=board.GP21, keycode=Keycode.LEFT_SHIFT, state=False, DIO=None, switch_setup=dict(gpio=board.GP7, DIO=None))
|
|
|
|
}
|
|
|
|
|
|
|
|
# GPIO setup
|
|
|
|
for btn in buttons_gpio:
|
|
|
|
buttons_gpio[btn]['DIO'] = digitalio.DigitalInOut(buttons_gpio[btn]['gpio'])
|
|
|
|
buttons_gpio[btn]['DIO'].direction = digitalio.Direction.INPUT
|
|
|
|
buttons_gpio[btn]['DIO'].pull = digitalio.Pull.DOWN
|
|
|
|
# Switch setup
|
|
|
|
if 'switch_setup' in buttons_gpio[btn]:
|
|
|
|
buttons_gpio[btn]['switch_setup']['DIO'] = digitalio.DigitalInOut(buttons_gpio[btn]['switch_setup']['gpio'])
|
|
|
|
buttons_gpio[btn]['switch_setup']['DIO'].direction = digitalio.Direction.OUTPUT
|
|
|
|
|
|
|
|
btn_scan_delay = 1/200
|
|
|
|
|
|
|
|
while True:
|
|
|
|
for btn in buttons_gpio:
|
|
|
|
if buttons_gpio[btn]['DIO'].value and not buttons_gpio[btn]['state']:
|
|
|
|
keyboard.press(buttons_gpio[btn]['keycode'])
|
|
|
|
buttons_gpio[btn]['state'] = not buttons_gpio[btn]['state']
|
|
|
|
if 'switch_setup' in buttons_gpio[btn]:
|
|
|
|
buttons_gpio[btn]['switch_setup']['DIO'].value = True
|
|
|
|
if not buttons_gpio[btn]['DIO'].value and buttons_gpio[btn]['state']:
|
|
|
|
keyboard.release(buttons_gpio[btn]['keycode'])
|
|
|
|
buttons_gpio[btn]['state'] = not buttons_gpio[btn]['state']
|
|
|
|
if 'switch_setup' in buttons_gpio[btn]:
|
|
|
|
buttons_gpio[btn]['switch_setup']['DIO'].value = False
|
|
|
|
time.sleep(btn_scan_delay)
|