Adafruit_Learning_System_Gu.../Matrix_Portal_Handbag/code.py
2022-02-23 12:56:10 -05:00

125 lines
3.6 KiB
Python

# SPDX-FileCopyrightText: 2020 Melissa LeBlanc-Williams for Adafruit Industries
# SPDX-FileCopyrightText: 2020 Erin St Blaine for Adafruit Industries
#
# SPDX-License-Identifier: MIT
"""
Slideshow Example using the Matrix Portal and 64 x 32 LED matrix display
Written by Melissa LeBlanc-Williams and Erin St Blaine for Adafruit Industries
Images smaller than 64 pixel width will be aligned alternating left or right
Press Up button to pause/resume Slideshow
Press Down button to cycle between slideshow folders
"""
import time
import board
import adafruit_lis3dh
import displayio
import busio
from digitalio import DigitalInOut, Pull
from adafruit_matrixportal.matrix import Matrix
from adafruit_slideshow import SlideShow, HorizontalAlignment
from adafruit_debouncer import Debouncer
'''
Display will go to sleep after SLEEP_DURATION seconds have elapsed with no accelerometer movement
Each slide will play for IMAGE_DURATION - customizable for each folder
Add folders to the list to add more slideshows.
'''
SLEEP_DURATION = 60
IMAGE_DURATION = (1, 0.5, 10)
IMAGE_FOLDER = (
"/bmps",
"/bmps2",
"/bmps3",
)
# pylint: disable=invalid-name
# --- Display setup ---
matrix = Matrix(bit_depth=6)
display = matrix.display
ACCEL = adafruit_lis3dh.LIS3DH_I2C(busio.I2C(board.SCL, board.SDA),
address=0x19)
_ = ACCEL.acceleration # Dummy reading to blow out any startup residue
pin_down = DigitalInOut(board.BUTTON_DOWN)
pin_down.switch_to_input(pull=Pull.UP)
button_down = Debouncer(pin_down)
pin_up = DigitalInOut(board.BUTTON_UP)
pin_up.switch_to_input(pull=Pull.UP)
button_up = Debouncer(pin_up)
ALIGN_RIGHT = True
auto_advance = True
i = 0
NUM_FOLDERS = 2 #first folder is numbered 0
slideshow = SlideShow(
display,
None,
folder=IMAGE_FOLDER[i],
order=0,
auto_advance=False,
fade_effect=False,
dwell=IMAGE_DURATION[i],
h_align=HorizontalAlignment.RIGHT,
)
LAST_ADVANCE = time.monotonic()
last_movement = time.monotonic()
MODE = 1
def advance():
''' go to the next slide '''
# pylint: disable=global-statement
global ALIGN_RIGHT, LAST_ADVANCE
ALIGN_RIGHT = not ALIGN_RIGHT
if ALIGN_RIGHT:
slideshow.h_align = HorizontalAlignment.RIGHT
else:
slideshow.h_align = HorizontalAlignment.LEFT
LAST_ADVANCE = time.monotonic()
slideshow.advance()
empty_group = displayio.Group()
while True:
if ACCEL.shake(shake_threshold=10):
print("Moving!")
if MODE == 0:
slideshow = SlideShow(
display,
None,
folder=IMAGE_FOLDER[i],
order=0,
auto_advance=False,
fade_effect=False,
dwell=IMAGE_DURATION[i],
h_align=HorizontalAlignment.RIGHT,
)
last_movement = time.monotonic()
MODE = 1
elif time.monotonic() > last_movement + SLEEP_DURATION:
MODE = 0
display.show(empty_group)
if MODE == 1:
if auto_advance and time.monotonic() > LAST_ADVANCE + IMAGE_DURATION[i]:
advance()
button_down.update()
button_up.update()
if button_up.fell:
auto_advance = not auto_advance
if button_down.fell:
i = i + 1
if i > NUM_FOLDERS:
i = 0
slideshow = SlideShow(
display,
None,
folder=IMAGE_FOLDER[i],
order=0,
auto_advance=False,
fade_effect=False,
dwell=IMAGE_DURATION[i],
h_align=HorizontalAlignment.RIGHT,
)