Use loops
This commit is contained in:
commit
1bf89da3e8
73
code.py
Normal file
73
code.py
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
# 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)
|
||||||
|
"red" : dict(gpio=board.GP18, keycode=Keycode.G, state=False, DIO=None),
|
||||||
|
"green" : dict(gpio=board.GP19, keycode=Keycode.H, state=False, DIO=None),
|
||||||
|
"blue" : dict(gpio=board.GP16, keycode=Keycode.I, state=False, DIO=None),
|
||||||
|
"black" : dict(gpio=board.GP20, keycode=Keycode.J, state=False, DIO=None),
|
||||||
|
"yellow": dict(gpio=board.GP17, keycode=Keycode.K, state=False, DIO=None),
|
||||||
|
"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)
|
BIN
lib/adafruit_hid/__init__.mpy
Normal file
BIN
lib/adafruit_hid/__init__.mpy
Normal file
Binary file not shown.
BIN
lib/adafruit_hid/consumer_control.mpy
Normal file
BIN
lib/adafruit_hid/consumer_control.mpy
Normal file
Binary file not shown.
BIN
lib/adafruit_hid/consumer_control_code.mpy
Normal file
BIN
lib/adafruit_hid/consumer_control_code.mpy
Normal file
Binary file not shown.
BIN
lib/adafruit_hid/keyboard.mpy
Normal file
BIN
lib/adafruit_hid/keyboard.mpy
Normal file
Binary file not shown.
BIN
lib/adafruit_hid/keyboard_layout_base.mpy
Normal file
BIN
lib/adafruit_hid/keyboard_layout_base.mpy
Normal file
Binary file not shown.
BIN
lib/adafruit_hid/keyboard_layout_us.mpy
Normal file
BIN
lib/adafruit_hid/keyboard_layout_us.mpy
Normal file
Binary file not shown.
BIN
lib/adafruit_hid/keycode.mpy
Normal file
BIN
lib/adafruit_hid/keycode.mpy
Normal file
Binary file not shown.
BIN
lib/adafruit_hid/mouse.mpy
Normal file
BIN
lib/adafruit_hid/mouse.mpy
Normal file
Binary file not shown.
202
lib/keyboard_layout_win_fr.py
Normal file
202
lib/keyboard_layout_win_fr.py
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
# SPDX-FileCopyrightText: 2021 Neradoc NeraOnGit@ri1.fr
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
"""
|
||||||
|
This file was automatically generated using Circuitpython_Keyboard_Layouts
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
__version__ = "0.0.0-auto.0"
|
||||||
|
__repo__ = "https://github.com/Neradoc/Circuitpython_Keyboard_Layouts.git"
|
||||||
|
|
||||||
|
|
||||||
|
from adafruit_hid.keyboard_layout_base import KeyboardLayoutBase
|
||||||
|
class KeyboardLayout(KeyboardLayoutBase):
|
||||||
|
ASCII_TO_KEYCODE = (
|
||||||
|
b'\x00'
|
||||||
|
b'\x00'
|
||||||
|
b'\x00'
|
||||||
|
b'\x00'
|
||||||
|
b'\x00'
|
||||||
|
b'\x00'
|
||||||
|
b'\x00'
|
||||||
|
b'\x00'
|
||||||
|
b'\x2a' # BACKSPACE
|
||||||
|
b'\x2b' # '\t'
|
||||||
|
b'\x28' # '\n'
|
||||||
|
b'\x00'
|
||||||
|
b'\x00'
|
||||||
|
b'\x00'
|
||||||
|
b'\x00'
|
||||||
|
b'\x00'
|
||||||
|
b'\x00'
|
||||||
|
b'\x00'
|
||||||
|
b'\x00'
|
||||||
|
b'\x00'
|
||||||
|
b'\x00'
|
||||||
|
b'\x00'
|
||||||
|
b'\x00'
|
||||||
|
b'\x00'
|
||||||
|
b'\x00'
|
||||||
|
b'\x00'
|
||||||
|
b'\x00'
|
||||||
|
b'\x29' # ESC
|
||||||
|
b'\x00'
|
||||||
|
b'\x00'
|
||||||
|
b'\x00'
|
||||||
|
b'\x00'
|
||||||
|
b'\x2c' # ' '
|
||||||
|
b'\x38' # '!'
|
||||||
|
b'\x20' # '"'
|
||||||
|
b'\x20' # '#'
|
||||||
|
b'\x30' # '$'
|
||||||
|
b'\xb4' # '%'
|
||||||
|
b'\x1e' # '&'
|
||||||
|
b'\x21' # "'"
|
||||||
|
b'\x22' # '('
|
||||||
|
b'\x2d' # ')'
|
||||||
|
b'\x31' # '*'
|
||||||
|
b'\xae' # '+'
|
||||||
|
b'\x10' # ','
|
||||||
|
b'\x23' # '-'
|
||||||
|
b'\xb6' # '.'
|
||||||
|
b'\xb7' # '/'
|
||||||
|
b'\xa7' # '0'
|
||||||
|
b'\x9e' # '1'
|
||||||
|
b'\x9f' # '2'
|
||||||
|
b'\xa0' # '3'
|
||||||
|
b'\xa1' # '4'
|
||||||
|
b'\xa2' # '5'
|
||||||
|
b'\xa3' # '6'
|
||||||
|
b'\xa4' # '7'
|
||||||
|
b'\xa5' # '8'
|
||||||
|
b'\xa6' # '9'
|
||||||
|
b'\x37' # ':'
|
||||||
|
b'\x36' # ';'
|
||||||
|
b'\x64' # '<'
|
||||||
|
b'\x2e' # '='
|
||||||
|
b'\xe4' # '>'
|
||||||
|
b'\x90' # '?'
|
||||||
|
b'\x27' # '@'
|
||||||
|
b'\x94' # 'A'
|
||||||
|
b'\x85' # 'B'
|
||||||
|
b'\x86' # 'C'
|
||||||
|
b'\x87' # 'D'
|
||||||
|
b'\x88' # 'E'
|
||||||
|
b'\x89' # 'F'
|
||||||
|
b'\x8a' # 'G'
|
||||||
|
b'\x8b' # 'H'
|
||||||
|
b'\x8c' # 'I'
|
||||||
|
b'\x8d' # 'J'
|
||||||
|
b'\x8e' # 'K'
|
||||||
|
b'\x8f' # 'L'
|
||||||
|
b'\xb3' # 'M'
|
||||||
|
b'\x91' # 'N'
|
||||||
|
b'\x92' # 'O'
|
||||||
|
b'\x93' # 'P'
|
||||||
|
b'\x84' # 'Q'
|
||||||
|
b'\x95' # 'R'
|
||||||
|
b'\x96' # 'S'
|
||||||
|
b'\x97' # 'T'
|
||||||
|
b'\x98' # 'U'
|
||||||
|
b'\x99' # 'V'
|
||||||
|
b'\x9d' # 'W'
|
||||||
|
b'\x9b' # 'X'
|
||||||
|
b'\x9c' # 'Y'
|
||||||
|
b'\x9a' # 'Z'
|
||||||
|
b'\x22' # '['
|
||||||
|
b'\x25' # '\\'
|
||||||
|
b'\x2d' # ']'
|
||||||
|
b'\x26' # '^'
|
||||||
|
b'\x25' # '_'
|
||||||
|
b'\x00' # '`' (Dead key)
|
||||||
|
b'\x14' # 'a'
|
||||||
|
b'\x05' # 'b'
|
||||||
|
b'\x06' # 'c'
|
||||||
|
b'\x07' # 'd'
|
||||||
|
b'\x08' # 'e'
|
||||||
|
b'\x09' # 'f'
|
||||||
|
b'\x0a' # 'g'
|
||||||
|
b'\x0b' # 'h'
|
||||||
|
b'\x0c' # 'i'
|
||||||
|
b'\x0d' # 'j'
|
||||||
|
b'\x0e' # 'k'
|
||||||
|
b'\x0f' # 'l'
|
||||||
|
b'\x33' # 'm'
|
||||||
|
b'\x11' # 'n'
|
||||||
|
b'\x12' # 'o'
|
||||||
|
b'\x13' # 'p'
|
||||||
|
b'\x04' # 'q'
|
||||||
|
b'\x15' # 'r'
|
||||||
|
b'\x16' # 's'
|
||||||
|
b'\x17' # 't'
|
||||||
|
b'\x18' # 'u'
|
||||||
|
b'\x19' # 'v'
|
||||||
|
b'\x1d' # 'w'
|
||||||
|
b'\x1b' # 'x'
|
||||||
|
b'\x1c' # 'y'
|
||||||
|
b'\x1a' # 'z'
|
||||||
|
b'\x21' # '{'
|
||||||
|
b'\x23' # '|'
|
||||||
|
b'\x2e' # '}'
|
||||||
|
b'\x00' # '~' (Dead key)
|
||||||
|
b'\x00'
|
||||||
|
)
|
||||||
|
NEED_ALTGR = '#@[\\]^{|}¤€'
|
||||||
|
HIGHER_ASCII = {
|
||||||
|
0xe9: 0x1f, # 'é'
|
||||||
|
0xe8: 0x24, # 'è'
|
||||||
|
0xe7: 0x26, # 'ç'
|
||||||
|
0xe0: 0x27, # 'à'
|
||||||
|
0xb0: 0xad, # '°'
|
||||||
|
0x20ac: 0x08, # '€'
|
||||||
|
0xa3: 0xb0, # '£'
|
||||||
|
0xa4: 0x30, # '¤'
|
||||||
|
0xf9: 0x34, # 'ù'
|
||||||
|
0xb2: 0x35, # '²'
|
||||||
|
0xb5: 0xb1, # 'µ'
|
||||||
|
0xa7: 0xb8, # '§'
|
||||||
|
}
|
||||||
|
COMBINED_KEYS = {
|
||||||
|
0xe3: 0x1fe1, # 'ã'
|
||||||
|
0xc3: 0x1fc1, # 'Ã'
|
||||||
|
0xf1: 0x1fee, # 'ñ'
|
||||||
|
0xd1: 0x1fce, # 'Ñ'
|
||||||
|
0xf5: 0x1fef, # 'õ'
|
||||||
|
0xd5: 0x1fcf, # 'Õ'
|
||||||
|
0x7e: 0x1fa0, # '~'
|
||||||
|
0xe0: 0x24e1, # 'à'
|
||||||
|
0xe8: 0x24e5, # 'è'
|
||||||
|
0xec: 0x24e9, # 'ì'
|
||||||
|
0xf2: 0x24ef, # 'ò'
|
||||||
|
0xf9: 0x24f5, # 'ù'
|
||||||
|
0xc0: 0x24c1, # 'À'
|
||||||
|
0xc8: 0x24c5, # 'È'
|
||||||
|
0xcc: 0x24c9, # 'Ì'
|
||||||
|
0xd2: 0x24cf, # 'Ò'
|
||||||
|
0xd9: 0x24d5, # 'Ù'
|
||||||
|
0x60: 0x24a0, # '`'
|
||||||
|
0xe2: 0x2f61, # 'â'
|
||||||
|
0xea: 0x2f65, # 'ê'
|
||||||
|
0xee: 0x2f69, # 'î'
|
||||||
|
0xf4: 0x2f6f, # 'ô'
|
||||||
|
0xfb: 0x2f75, # 'û'
|
||||||
|
0xc2: 0x2f41, # 'Â'
|
||||||
|
0xca: 0x2f45, # 'Ê'
|
||||||
|
0xce: 0x2f49, # 'Î'
|
||||||
|
0xd4: 0x2f4f, # 'Ô'
|
||||||
|
0xdb: 0x2f55, # 'Û'
|
||||||
|
0x5e: 0x2f20, # '^'
|
||||||
|
0xe4: 0xaf61, # 'ä'
|
||||||
|
0xeb: 0xaf65, # 'ë'
|
||||||
|
0xef: 0xaf69, # 'ï'
|
||||||
|
0xf6: 0xaf6f, # 'ö'
|
||||||
|
0xfc: 0xaf75, # 'ü'
|
||||||
|
0xff: 0xaf79, # 'ÿ'
|
||||||
|
0xc4: 0xaf41, # 'Ä'
|
||||||
|
0xcb: 0xaf45, # 'Ë'
|
||||||
|
0xcf: 0xaf49, # 'Ï'
|
||||||
|
0xd6: 0xaf4f, # 'Ö'
|
||||||
|
0xdc: 0xaf55, # 'Ü'
|
||||||
|
0xa8: 0xaf20, # '¨'
|
||||||
|
}
|
152
lib/keycode_win_fr.py
Normal file
152
lib/keycode_win_fr.py
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
# SPDX-FileCopyrightText: 2021 Neradoc NeraOnGit@ri1.fr
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
"""
|
||||||
|
This file was automatically generated using Circuitpython_Keyboard_Layouts
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
__version__ = "0.0.0-auto.0"
|
||||||
|
__repo__ = "https://github.com/Neradoc/Circuitpython_Keyboard_Layouts.git"
|
||||||
|
|
||||||
|
|
||||||
|
class Keycode:
|
||||||
|
A = 0x14
|
||||||
|
B = 0x05
|
||||||
|
C = 0x06
|
||||||
|
D = 0x07
|
||||||
|
E = 0x08
|
||||||
|
F = 0x09
|
||||||
|
G = 0x0a
|
||||||
|
H = 0x0b
|
||||||
|
I = 0x0c
|
||||||
|
J = 0x0d
|
||||||
|
K = 0x0e
|
||||||
|
L = 0x0f
|
||||||
|
M = 0x33
|
||||||
|
N = 0x11
|
||||||
|
O = 0x12
|
||||||
|
P = 0x13
|
||||||
|
Q = 0x04
|
||||||
|
R = 0x15
|
||||||
|
S = 0x16
|
||||||
|
T = 0x17
|
||||||
|
U = 0x18
|
||||||
|
V = 0x19
|
||||||
|
W = 0x1d
|
||||||
|
X = 0x1b
|
||||||
|
Y = 0x1c
|
||||||
|
Z = 0x1a
|
||||||
|
ALT = 0xe2
|
||||||
|
END = 0x4d
|
||||||
|
F1 = 0x3a
|
||||||
|
F2 = 0x3b
|
||||||
|
F3 = 0x3c
|
||||||
|
F4 = 0x3d
|
||||||
|
F5 = 0x3e
|
||||||
|
F6 = 0x3f
|
||||||
|
F7 = 0x40
|
||||||
|
F8 = 0x41
|
||||||
|
F9 = 0x42
|
||||||
|
F10 = 0x43
|
||||||
|
F11 = 0x44
|
||||||
|
F12 = 0x45
|
||||||
|
F13 = 0x68
|
||||||
|
F14 = 0x69
|
||||||
|
F15 = 0x6a
|
||||||
|
F16 = 0x6b
|
||||||
|
F17 = 0x6c
|
||||||
|
F18 = 0x6d
|
||||||
|
F19 = 0x6e
|
||||||
|
F20 = 0x6f
|
||||||
|
F21 = 0x70
|
||||||
|
F22 = 0x71
|
||||||
|
F23 = 0x72
|
||||||
|
F24 = 0x73
|
||||||
|
GUI = 0xe3
|
||||||
|
ONE = 0x1e
|
||||||
|
SIX = 0x23
|
||||||
|
TAB = 0x2b
|
||||||
|
TWO = 0x1f
|
||||||
|
FIVE = 0x22
|
||||||
|
FOUR = 0x21
|
||||||
|
HOME = 0x4a
|
||||||
|
NINE = 0x26
|
||||||
|
ZERO = 0x27
|
||||||
|
ALTGR = 0xe6
|
||||||
|
COMMA = 0x10
|
||||||
|
EIGHT = 0x25
|
||||||
|
ENTER = 0x28
|
||||||
|
GRAVE = 0x24
|
||||||
|
OEM_8 = 0x38
|
||||||
|
PAUSE = 0x48
|
||||||
|
QUOTE = 0x35
|
||||||
|
SEVEN = 0x24
|
||||||
|
SHIFT = 0xe1
|
||||||
|
SPACE = 0x2c
|
||||||
|
THREE = 0x20
|
||||||
|
TILDE = 0x1f
|
||||||
|
TREMA = 0x2f
|
||||||
|
ACCENT_CIRCONFLEXE = 0x2f
|
||||||
|
APPLICATION = 0x65
|
||||||
|
BACKSLASH = 0x31
|
||||||
|
BACKSPACE = 0x2a
|
||||||
|
CAPS_LOCK = 0x39
|
||||||
|
COMMAND = 0xe3
|
||||||
|
CONTROL = 0xe0
|
||||||
|
DELETE = 0x4c
|
||||||
|
DOWN_ARROW = 0x51
|
||||||
|
EQUALS = 0x2e
|
||||||
|
ESCAPE = 0x29
|
||||||
|
FORWARD_SLASH = 0x37
|
||||||
|
GRAVE_ACCENT = 0x34
|
||||||
|
INSERT = 0x49
|
||||||
|
KEYPAD_ASTERISK = 0x55
|
||||||
|
KEYPAD_EIGHT = 0x60
|
||||||
|
KEYPAD_FIVE = 0x5d
|
||||||
|
KEYPAD_FORWARD_SLASH = 0x54
|
||||||
|
KEYPAD_FOUR = 0x5c
|
||||||
|
KEYPAD_MINUS = 0x56
|
||||||
|
KEYPAD_NINE = 0x61
|
||||||
|
KEYPAD_NUMLOCK = 0x53
|
||||||
|
KEYPAD_ONE = 0x59
|
||||||
|
KEYPAD_PERIOD = 0x63
|
||||||
|
KEYPAD_PLUS = 0x57
|
||||||
|
KEYPAD_SEVEN = 0x5f
|
||||||
|
KEYPAD_SIX = 0x5e
|
||||||
|
KEYPAD_THREE = 0x5b
|
||||||
|
KEYPAD_TWO = 0x5a
|
||||||
|
KEYPAD_ZERO = 0x62
|
||||||
|
LEFT_ALT = 0xe2
|
||||||
|
LEFT_ARROW = 0x50
|
||||||
|
LEFT_BRACKET = 0x2d
|
||||||
|
LEFT_CONTROL = 0xe0
|
||||||
|
LEFT_GUI = 0xe3
|
||||||
|
LEFT_SHIFT = 0xe1
|
||||||
|
OEM_102 = 0x64
|
||||||
|
OPTION = 0xe2
|
||||||
|
PAGE_DOWN = 0x4e
|
||||||
|
PAGE_UP = 0x4b
|
||||||
|
PERIOD = 0x36
|
||||||
|
PRINT_SCREEN = 0x46
|
||||||
|
RETURN = 0x28
|
||||||
|
RIGHT_ALT = 0xe6
|
||||||
|
RIGHT_ARROW = 0x4f
|
||||||
|
RIGHT_BRACKET = 0x2f
|
||||||
|
RIGHT_CONTROL = 0xe4
|
||||||
|
RIGHT_GUI = 0xe7
|
||||||
|
RIGHT_SHIFT = 0xe5
|
||||||
|
SCROLL_LOCK = 0x47
|
||||||
|
SEMICOLON = 0x30
|
||||||
|
SPACEBAR = 0x2c
|
||||||
|
UP_ARROW = 0x52
|
||||||
|
WINDOWS = 0xe3
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def modifier_bit(cls, keycode):
|
||||||
|
"""Return the modifer bit to be set in an HID keycode report if this is a
|
||||||
|
modifier key; otherwise return 0."""
|
||||||
|
return (
|
||||||
|
1 << (keycode - 0xE0) if cls.LEFT_CONTROL <= keycode <= cls.RIGHT_GUI else 0
|
||||||
|
)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user