import board import digitalio import analogio import usb_hid import time from adafruit_hid.mouse import Mouse # --- Initialisierung --- # LED an GP8 dauerhaft an led = digitalio.DigitalInOut(board.GP8) led.direction = digitalio.Direction.OUTPUT led.value = True mouse = Mouse(usb_hid.devices) # Joystick Pins (Invertiert: * -1) adc_lx = analogio.AnalogIn(board.A3) # Links/Rechts adc_ly = analogio.AnalogIn(board.GP28) # Oben/Unten adc_rx = analogio.AnalogIn(board.GP26) adc_ry = analogio.AnalogIn(board.GP27) # Matrix Pins line_pins = [digitalio.DigitalInOut(getattr(board, f"GP{i}")) for i in range(2, 8)] def scan_matrix(): # Matrix-Scan mit kleiner Pause für Stabilität for i in range(len(line_pins)): line_pins[i].switch_to_output(value=False) for j in range(len(line_pins)): if i != j: line_pins[j].switch_to_input(pull=digitalio.Pull.UP) if not line_pins[j].value: pair = tuple(sorted((i + 2, j + 2))) # Kurzes Debouncing time.sleep(0.01) if not line_pins[j].value: line_pins[i].switch_to_input(pull=digitalio.Pull.UP) return pair line_pins[i].switch_to_input(pull=digitalio.Pull.UP) return None def handle_input(pair): if pair == (2, 5): mouse.click(Mouse.LEFT_BUTTON) elif pair == (2, 3): mouse.click(Mouse.RIGHT_BUTTON) # Hauptschleife is_locked = False while True: # 1. Matrix scannen current_pair = scan_matrix() if current_pair: if not is_locked: handle_input(current_pair) is_locked = True else: is_locked = False # 2. Joystick Mausbewegung # Durch Umkehr der Vorzeichen (-1) werden die Richtungen getauscht x_val = (adc_lx.value / 65535 * 254) - 127 y_val = (adc_ly.value / 65535 * 254) - 127 x_move = int(x_val * -1) y_move = int(y_val * -1) # Deadzone if abs(x_move) > 15 or abs(y_move) > 15: mouse.move(x=x_move // 10, y=y_move // 10) time.sleep(0.01) # Stabilitäts-Pause für USB-Polling