Skip to content

Commit 97aad9e

Browse files
committed
add force_read argument fix namedtuples in values
1 parent ab94af5 commit 97aad9e

File tree

2 files changed

+30
-13
lines changed

2 files changed

+30
-13
lines changed

adafruit_nunchuk.py

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,16 @@ class Nunchuk:
4949
:type i2c_read_delay: float, optional
5050
"""
5151

52-
def __init__(self, i2c, address=0x52, i2c_read_delay=0.002):
52+
_Values = namedtuple("Values", ("joystick", "buttons", "acceleration"))
53+
_Joystick = namedtuple("Joystick", ("x", "y"))
54+
_Buttons = namedtuple("Buttons", ("C", "Z"))
55+
_Acceleration = namedtuple("Acceleration", ("x", "y", "z"))
56+
57+
def __init__(self, i2c, address=0x52, i2c_read_delay=0.002, force_read=True):
5358
self.buffer = bytearray(8)
5459
self.i2c_device = I2CDevice(i2c, address)
5560
self._i2c_read_delay = i2c_read_delay
61+
self._force_read = force_read
5662
time.sleep(_I2C_INIT_DELAY)
5763
with self.i2c_device as i2c_dev:
5864
# turn off encrypted data
@@ -65,33 +71,44 @@ def __init__(self, i2c, address=0x52, i2c_read_delay=0.002):
6571
def values(self):
6672
"""Return named tuple of all the input values."""
6773
self.read_data()
68-
(sx, sy), bc, bz, (ax, ay, az) = ( # pylint: disable=invalid-name
69-
self.joystick,
70-
self.button_C,
71-
self.button_Z,
72-
self.acceleration,
74+
temp_force_read = self._force_read
75+
self._force_read = False
76+
values = self._Values(
77+
self._Joystick(self.joystick[0], self.joystick[1]),
78+
self._Buttons(self.button_C, self.button_Z),
79+
self._Acceleration(
80+
self.acceleration[0], self.acceleration[1], self.acceleration[2]
81+
),
7382
)
74-
Values = namedtuple("Values", "sx sy bc bz ax ay az")
75-
return Values(sx, sy, bc, bz, ax, ay, az)
83+
self._force_read = temp_force_read
84+
return values
7685

7786
@property
7887
def joystick(self):
7988
"""Return tuple of current joystick position."""
89+
if self._force_read:
90+
self.read_data()
8091
return self.buffer[0], self.buffer[1]
8192

8293
@property
8394
def button_C(self): # pylint: disable=invalid-name
8495
"""Return current pressed state of button C."""
96+
if self._force_read:
97+
self.read_data()
8598
return not bool(self.buffer[5] & 0x02)
8699

87100
@property
88101
def button_Z(self): # pylint: disable=invalid-name
89102
"""Return current pressed state of button Z."""
103+
if self._force_read:
104+
self.read_data()
90105
return not bool(self.buffer[5] & 0x01)
91106

92107
@property
93108
def acceleration(self):
94109
"""Return 3 tuple of accelerometer reading."""
110+
if self._force_read:
111+
self.read_data()
95112
x = (self.buffer[5] & 0xC0) >> 6
96113
x |= self.buffer[2] << 2
97114
y = (self.buffer[5] & 0x30) >> 4

examples/nunchuk_simpletest.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@
88
nc = adafruit_nunchuk.Nunchuk(board.I2C())
99

1010
while True:
11-
values = nc.values
12-
print("joystick = {},{}".format(values.sx, values.sy))
13-
print("accceleration ax={}, ay={}, az={}".format(values.ax, values.ay, values.az))
14-
if values.bc:
11+
joystick,buttons,acceleration = nc.values
12+
print("joystick = {},{}".format(joystick.x, joystick.y))
13+
print("accceleration ax={}, ay={}, az={}".format(acceleration.x, acceleration.y, acceleration.z))
14+
if buttons.C:
1515
print("button C")
16-
if values.bz:
16+
if buttons.Z:
1717
print("button Z")
1818
time.sleep(0.5)

0 commit comments

Comments
 (0)