lx, ly, rx, ry = joy.get_axis_values() print(f"Left Stick: (lx, ly)") # Map PS2 controller to keyboard/mouse actions import keyboard def map_to_keyboard(joy): button_map = PS2Button.CROSS: 'space', PS2Button.CIRCLE: 'esc', PS2Button.TRIANGLE: 'e', PS2Button.SQUARE: 'r',

def disconnect(self): """Close connection and cleanup""" self.running = False if self.read_thread: self.read_thread.join(timeout=1.0) if self.serial_connection: self.serial_connection.close() print("PS2 Controller disconnected") class VJoyWrapper: """Wrapper for vJoy virtual joystick driver"""

def __init__(self): self.joystick = None self.vjoy = None self.use_virtual_joystick = True self.running = False def start(self, port: Optional[str] = None): """Start the PS2 controller driver""" self.joystick = PS2Joystick(port=port) if not self.joystick.connect(): print("Failed to connect to PS2 controller") return False # Initialize virtual joystick if self.use_virtual_joystick: self.vjoy = VJoyWrapper() if not self.vjoy.load_vjoy(): print("Virtual joystick not available, using direct input mode") self.use_virtual_joystick = False # Register callbacks self.joystick.register_axis_callback(self._on_axis_update) # Register button callbacks for debugging for button in PS2Button: self.joystick.register_button_callback(button, lambda pressed, b=button: self._on_button_press(b, pressed)) self.running = True # Main loop try: while self.running: if not self.use_virtual_joystick: # Print debug info self._print_debug_info() time.sleep(0.016) # ~60Hz update except KeyboardInterrupt: print("\nShutting down...") finally: self.stop() return True

if args.debug: app.use_virtual_joystick = False

void setup() Serial.begin(115200);

def _print_debug_info(self): """Print current controller state for debugging""" lx, ly, rx, ry = self.joystick.get_axis_values() print(f"\rLX:lx:3d LY:ly:3d RX:rx:3d RY:ry:3d | ", end="") # Print active buttons active = [b.name for b in PS2Button if self.joystick.get_button_state(b)] print(f"Buttons: ', '.join(active) if active else 'None'", end="")