From 0955ff2b0af5b324ca3ab7b1205ccc342fce17e4 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Mon, 2 Jan 2023 13:28:29 -0600 Subject: [PATCH] Add NeXT standalone mouse code --- CircuitPython_NeXT_Mouse_RP2040/code.py | 45 +++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 CircuitPython_NeXT_Mouse_RP2040/code.py diff --git a/CircuitPython_NeXT_Mouse_RP2040/code.py b/CircuitPython_NeXT_Mouse_RP2040/code.py new file mode 100644 index 000000000..66dd0e0da --- /dev/null +++ b/CircuitPython_NeXT_Mouse_RP2040/code.py @@ -0,0 +1,45 @@ +# SPDX-FileCopyrightText: 2023 Jeff Epler for Adafruit Industries +# SPDX-License-Identifier: MIT +import board +import digitalio +import rotaryio +from adafruit_hid.mouse import Mouse +from usb_hid import devices + +SCALE = 4 + +class RelativeEncoder: + def __init__(self, pin_a, pin_b, divisor=1): + self._encoder = rotaryio.IncrementalEncoder(pin_a, pin_b, divisor) + self._old = self._encoder.position + + @property + def delta(self): + old = self._old + new = self._old = self._encoder.position + return new - old + +xpos = RelativeEncoder(board.A0, board.A1) +ypos = RelativeEncoder(board.A2, board.A3) +lmb = digitalio.DigitalInOut(board.SCL) +lmb.pull = digitalio.Pull.UP +rmb = digitalio.DigitalInOut(board.SDA) +rmb.pull = digitalio.Pull.UP + +mouse = Mouse(devices) + +while True: + dx = xpos.delta * SCALE + dy = ypos.delta * SCALE + l = not lmb.value + r = not rmb.value + mouse.report[0] = ( + mouse.MIDDLE_BUTTON if (l and r) else + mouse.LEFT_BUTTON if l else + mouse.RIGHT_BUTTON if r else + 0) + + if dx or dy: + mouse.move(dx, dy) + else: + mouse._send_no_move() # pylint: disable=protected-access