125 lines
3.6 KiB
Python
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,
|
|
)
|