Description
On button press it will always register 2 presses. Attempted to change the time.sleep(1). It will just wait 1 second and print a 2nd button press anyway. If you hold down on the button it will print button presses forever. Using SpriteButton simpletest but it happens with all examples using this library. Request adding debouncer like feature with rise/fall.
Adafruit ESP32-S3 Feather with 3.5" TFT Featherwing (with touch). I've done a few customizations to get it working with the TFT Featherwing without using the featherwing library.
from adafruit_hx8357 import HX8357
import adafruit_stmpe610
from adafruit_button.sprite_button import SpriteButton
# 3.5" TFT Featherwing is 480x320
displayio.release_displays()
DISPLAY_WIDTH = 480
DISPLAY_HEIGHT = 320
# Initialize TFT Display
spi = board.SPI()
tft_cs = board.D9
tft_dc = board.D10
display_bus = displayio.FourWire(spi, command=tft_dc, chip_select=tft_cs)
display = HX8357(display_bus, width=DISPLAY_WIDTH, height=DISPLAY_HEIGHT)
display.rotation = 0
_touch_flip = (False, True)
# Initialize 3.5" TFT Featherwing Touchscreen
ts_cs_pin = digitalio.DigitalInOut(board.D6)
touchscreen = adafruit_stmpe610.Adafruit_STMPE610_SPI(
board.SPI(),
ts_cs_pin,
calibration=((231, 3703), (287, 3787)),
size=(display.width, display.height),
disp_rotation=display.rotation,
touch_flip=_touch_flip,
)
TEXT_WHITE = 0xFFFFFF
small_font = bitmap_font.load_font("/fonts/GoodTimesRg-Regular-16.bdf")
# --| Button Config |--
BUTTON_WIDTH = 7 * 16
BUTTON_HEIGHT = 2 * 16
BUTTON_MARGIN = 5
# Defiine the button
button = SpriteButton(
x=BUTTON_MARGIN,
y=BUTTON_MARGIN,
width=BUTTON_WIDTH,
height=BUTTON_HEIGHT,
label="MENU",
label_font=small_font,
label_color=TEXT_WHITE,
bmp_path="icons/gradient_button_0.bmp",
selected_bmp_path="icons/gradient_button_1.bmp",
transparent_index=0,
)
while True:
p = touchscreen.touch_point
if p:
if button.contains(p):
button.selected = True
print("Button Pressed")
time.sleep(0.25) # Wait a bit so we can see the button color change
else:
button.selected = False # When touch moves outside of button
else:
button.selected = False # When button is released
press the button on the screen once and registers twice no matter how fast I try to tap
Button Pressed
Button Pressed
This is a problem when used with GUI navigation as it skips pages. Next Page becomes page 3 instead of 2 for example. I've attempted to use debouncer and ticks to no avail. It's like button.selected = True
is keeping the button selection in a memory buffer. No matter what I do it will press twice in most circumstances.