Skip to content

I2C Speedup #20

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Jan 25, 2021
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 17 additions & 9 deletions adafruit_nunchuk.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,17 +31,27 @@
__version__ = "0.0.0-auto.0"
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_Nunchuk.git"

_DEFAULT_ADDRESS = 0x52
_I2C_INIT_DELAY = 0.1
_I2C_READ_DELAY = 0.01


class Nunchuk:
"""Class which provides interface to Nintendo Nunchuk controller."""

def __init__(self, i2c, address=_DEFAULT_ADDRESS):
self.buffer = bytearray(6)
"""
Class which provides interface to Nintendo Nunchuk controller.

:param i2c: The `busio.I2C` object to use.
:param address: The I2C address of the device. Default is 0x52.
:type address: int, optional
:param i2c_read_delay: The time in seconds to pause between the
I2C write and read. This needs to be at least 200us. A
conservative default of 2000us is used since some hosts may
not be able to achieve such timing.
:type i2c_read_delay: float, optional
"""

def __init__(self, i2c, address=0x52, i2c_read_delay=0.002):
self.buffer = bytearray(8)
self.i2c_device = I2CDevice(i2c, address)
self._i2c_read_delay = i2c_read_delay
time.sleep(_I2C_INIT_DELAY)
with self.i2c_device as i2c_dev:
# turn off encrypted data
Expand Down Expand Up @@ -83,9 +93,7 @@ def _read_data(self):

def _read_register(self, address):
with self.i2c_device as i2c:
time.sleep(_I2C_READ_DELAY)
i2c.write(address)
time.sleep(_I2C_READ_DELAY)
time.sleep(self._i2c_read_delay) # at least 200us
i2c.readinto(self.buffer)
time.sleep(_I2C_READ_DELAY)
return self.buffer