Joystick: learn axis min/max (#23377)

* Joystick: learn axis min/max

* clean up updating max/min

Co-authored-by: Willem Melching <willem.melching@gmail.com>
old-commit-hash: 5a77157ea4
commatwo_master
Cameron Clough 3 years ago committed by GitHub
parent 1c61ba82b6
commit f9e8fb3145
  1. 8
      tools/joystick/joystickd.py

@ -34,7 +34,8 @@ class Keyboard:
class Joystick: class Joystick:
def __init__(self): def __init__(self):
self.max_axis_value = 255 # tune based on your joystick, 0 to this self.min_axis_value = 0
self.max_axis_value = 255
self.cancel_button = 'BTN_TRIGGER' self.cancel_button = 'BTN_TRIGGER'
self.axes_values = {'ABS_Y': 0., 'ABS_RZ': 0.} # gb, steer self.axes_values = {'ABS_Y': 0., 'ABS_RZ': 0.} # gb, steer
@ -45,7 +46,10 @@ class Joystick:
if event[0] == self.cancel_button and event[1] == 0: # state 0 is falling edge if event[0] == self.cancel_button and event[1] == 0: # state 0 is falling edge
self.cancel = True self.cancel = True
elif event[0] in self.axes_values: elif event[0] in self.axes_values:
norm = -interp(event[1], [0, self.max_axis_value], [-1., 1.]) self.max_axis_value = max(event[1], self.max_axis_value)
self.min_axis_value = min(event[1], self.min_axis_value)
norm = -interp(event[1], [self.min_axis_value, self.max_axis_value], [-1., 1.])
self.axes_values[event[0]] = norm if abs(norm) > 0.05 else 0. # center can be noisy, deadzone of 5% self.axes_values[event[0]] = norm if abs(norm) > 0.05 else 0. # center can be noisy, deadzone of 5%
else: else:
return False return False

Loading…
Cancel
Save