Source code for adafruit_featherwing.joy_featherwing

# SPDX-FileCopyrightText: 2018 Kattni Rembor for Adafruit Industries
#
# SPDX-License-Identifier: MIT

"""
`adafruit_featherwing.joy_featherwing`
====================================================

Helper for using the `Joy FeatherWing <https://www.adafruit.com/product/3632>`_.

* Author(s): Kattni Rembor
"""

__version__ = "0.0.0-auto.0"
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_FeatherWing.git"

import board
from micropython import const
import adafruit_seesaw.seesaw

BUTTON_A = const(1 << 6)
BUTTON_B = const(1 << 7)
BUTTON_Y = const(1 << 9)
BUTTON_X = const(1 << 10)
BUTTON_SELECT = const(1 << 14)


[docs]class JoyFeatherWing: """Class representing an `Adafruit Joy FeatherWing <https://www.adafruit.com/product/3632>`_. Automatically uses the feather's I2C bus.""" def __init__(self, i2c=None): if i2c is None: i2c = board.I2C() self._seesaw = adafruit_seesaw.seesaw.Seesaw(i2c) self._seesaw.pin_mode_bulk( BUTTON_A | BUTTON_B | BUTTON_Y | BUTTON_X | BUTTON_SELECT, self._seesaw.INPUT_PULLUP, ) # Initialise joystick_offset self._joystick_offset = (0, 0) @property def button_a(self): """Joy featherwing button A. .. image :: ../docs/_static/joy_featherwing/joy_featherwing_a.jpg :alt: Joy FeatherWing Button A This example prints when button A is pressed. .. code-block:: python from adafruit_featherwing import joy_featherwing import time wing = joy_featherwing.JoyFeatherWing() while True: if wing.button_a: print("Button A pressed!") """ return self._check_button(BUTTON_A) @property def button_b(self): """Joy featherwing button B. .. image :: ../docs/_static/joy_featherwing/joy_featherwing_b.jpg :alt: Joy FeatherWing Button B This example prints when button B is pressed. .. code-block:: python from adafruit_featherwing import joy_featherwing import time wing = joy_featherwing.JoyFeatherWing() while True: if wing.button_b: print("Button B pressed!") """ return self._check_button(BUTTON_B) @property def button_x(self): """Joy featherwing button X. .. image :: ../docs/_static/joy_featherwing/joy_featherwing_x.jpg :alt: Joy FeatherWing Button X This example prints when button X is pressed. .. code-block:: python from adafruit_featherwing import joy_featherwing import time wing = joy_featherwing.JoyFeatherWing() while True: if wing.button_x: print("Button X pressed!") """ return self._check_button(BUTTON_X) @property def button_y(self): """Joy featherwing button Y. .. image :: ../docs/_static/joy_featherwing/joy_featherwing_y.jpg :alt: Joy FeatherWing Button Y This example prints when button Y is pressed. .. code-block:: python from adafruit_featherwing import joy_featherwing import time wing = joy_featherwing.JoyFeatherWing() while True: if wing.button_y: print("Button Y pressed!") """ return self._check_button(BUTTON_Y) @property def button_select(self): """Joy featherwing button SELECT. .. image :: ../docs/_static/joy_featherwing/joy_featherwing_select.jpg :alt: Joy FeatherWing Button SELECT This example prints when button SELECT is pressed. .. code-block:: python from adafruit_featherwing import joy_featherwing import time wing = joy_featherwing.JoyFeatherWing() while True: if wing.button_select: print("Button SELECT pressed!") """ return self._check_button(BUTTON_SELECT) def _check_button(self, button): """Utilises the seesaw to determine which button is being pressed.""" buttons = self._seesaw.digital_read_bulk(button) return not buttons != 0 @property def joystick_offset(self): """Offset used to correctly report (0, 0) when the joystick is centered. .. image :: ../docs/_static/joy_featherwing/joy_featherwing_joystick.jpg :alt: Joy FeatherWing Joystick Provide a tuple of (x, y) to set your joystick center to (0, 0). The offset you provide is subtracted from the current reading. For example, if your joystick reads as (-4, 0), you would enter (-4, 0) as the offset. The code will subtract -4 from -4, and 0 from 0, returning (0, 0). This example supplies an offset for zeroing, and prints the coordinates of the joystick when it is moved. .. code-block:: python from adafruit_featherwing import joy_featherwing import time wing = joy_featherwing.JoyFeatherWing() last_x = 0 last_y = 0 while True: wing.joystick_offset = (-4, 0) x, y = wing.joystick if (abs(x - last_x) > 3) or (abs(y - last_y) > 3): last_x = x last_y = y print(x, y) time.sleep(0.01) """ return self._joystick_offset @joystick_offset.setter def joystick_offset(self, offset): self._joystick_offset = offset
[docs] def zero_joystick(self): """Zeros the joystick by using current reading as (0, 0). Note: You must not be touching the joystick at the time of zeroing for it to be accurate. .. image :: ../docs/_static/joy_featherwing/joy_featherwing_joystick.jpg :alt: Joy FeatherWing Joystick This example zeros the joystick, and prints the coordinates of joystick when it is moved. .. code-block:: python from adafruit_featherwing import joy_featherwing import time wing = joy_featherwing.JoyFeatherWing() last_x = 0 last_y = 0 wing.zero_joystick() while True: x, y = wing.joystick if (abs(x - last_x) > 3) or (abs(y - last_y) > 3): last_x = x last_y = y print(x, y) time.sleep(0.01) """ self._joystick_offset = (0, 0) self._joystick_offset = self.joystick
@property def joystick(self): """Joy FeatherWing joystick. .. image :: ../docs/_static/joy_featherwing/joy_featherwing_joystick.jpg :alt: Joy FeatherWing Joystick This example zeros the joystick, and prints the coordinates of joystick when it is moved. .. code-block:: python from adafruit_featherwing import joy_featherwing import time wing = joy_featherwing.JoyFeatherWing() last_x = 0 last_y = 0 wing.zero_joystick() while True: x, y = wing.joystick if (abs(x - last_x) > 3) or (abs(y - last_y) > 3): last_x = x last_y = y print(x, y) time.sleep(0.01) """ x = int(127 - self._seesaw.analog_read(2) / 4) - self._joystick_offset[0] y = int(self._seesaw.analog_read(3) / 4 - 127) - self._joystick_offset[1] return x, y