kopia lustrzana https://github.com/GuyCarver/MicroPython
56 wiersze
1.3 KiB
Python
56 wiersze
1.3 KiB
Python
import pyb
|
|
|
|
class joystick(object) :
|
|
_X_CENTER = 2084.0
|
|
_Y_CENTER = 2114.0
|
|
_POS_X = 4095.0 - _X_CENTER
|
|
_POS_Y = 4095.0 - _Y_CENTER
|
|
|
|
def __init__( self, aX, aY, aB ) :
|
|
self._jx = pyb.ADC(aX)
|
|
self._jy = pyb.ADC(aY)
|
|
#PULL_DOWN doesn't report button press, need to use pull up resistor.
|
|
self._js = pyb.Pin(aB, pyb.Pin.IN, pyb.Pin.PULL_UP)
|
|
|
|
self._x = 0.0
|
|
self._y = 0.0
|
|
self._button = False
|
|
|
|
self._index = 0
|
|
self._xA = [0, 0, 0]
|
|
self._yA = [0, 0, 0]
|
|
|
|
@property
|
|
def x( self ) :
|
|
'''Return value from -1.0 to 1.0.'''
|
|
return self._x
|
|
|
|
@property
|
|
def y( self ) :
|
|
'''Return value from -1.0 to 1.0.'''
|
|
return self._y
|
|
|
|
@property
|
|
def button( self ) :
|
|
'''return True or False.'''
|
|
return self._button
|
|
|
|
def update( self ) :
|
|
self._xA[self._index] = self._jx.read()
|
|
self._yA[self._index] = self._jy.read()
|
|
|
|
self._index += 1
|
|
if self._index >= 3 :
|
|
self._index = 0
|
|
|
|
rx = float(sum(self._xA)) / 3.0 - joystick._X_CENTER
|
|
ry = float(sum(self._yA)) / 3.0 - joystick._Y_CENTER
|
|
dx = joystick._POS_X if rx >= 0 else joystick._X_CENTER
|
|
dy = joystick._POS_Y if ry >= 0 else joystick._Y_CENTER
|
|
self._x = rx / dx
|
|
self._y = ry / dy
|
|
|
|
#Button in pressed when value is 0.
|
|
self._button = not self._js.value()
|
|
|