Add NeXT standalone mouse code

This commit is contained in:
Jeff Epler 2023-01-02 13:28:29 -06:00
parent fb4c126238
commit 0955ff2b0a
No known key found for this signature in database
GPG key ID: D5BF15AB975AB4DE

View file

@ -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