A szükséges ismeretek megtalálhatók a 2022. február 10-i és a 2022. március 3-i előadásokban. (lásd itt: Foglalkozások 2021/2022-ben )
Első lépésként a small_clowns.zip fájlból kibontott fázisképeket összedolgozzuk egyetlen képpé, például így:
A fázisképek mérete 56 x 64 képpont, így a fenti elrendezésben a teljes kép 224 x 128 képpont. Monokróm BMP formátumban mentettük el, clowns.bmp néven
A kijelző kelezéséhez szükségünk lesz az Adafruit_displayio_sh1106
meghajtóra, a kép beolvasásához pedig az Adafruit_imageload
programkönyvtárra.
import board
import displayio
from adafruit_displayio_sh1106 import SH1106
import adafruit_imageload
import time
A képernyő inicializálása a 2022. február 10-i előadás szerint történik. Az SH1106 vezérlő 132 x 64 felbontást kezel, de tényleges kijelzés csak a középre igazított 128 x 64-es mezőben van, ezért a 2 képpontnyi eltolásról majd nekünk kell gondoskodni!
displayio.release_displays() # Elengedjük a kijelzőt...
# Inintialize display
i2c = board.I2C()
display_bus = displayio.I2CDisplay(i2c, device_address=0x3C)
display=SH1106(display_bus, width=132, height=64, rotation=180)
A megjelenítés gyűjtőeleme a legfelső szintű Group objektum
# Make the display context
splash = displayio.Group()
display.show(splash)
Elkészítjük a fehér hátteret, ami egy 128 x 64 pixeles TileGrid (csempe) objektum, x = 2 eltolással)
# Make white backgound
color_bitmap = displayio.Bitmap(128, 64, 1)
color_palette = displayio.Palette(1)
color_palette[0] = 0xFFFFFF # White
bg_sprite = displayio.TileGrid(color_bitmap, pixel_shader=color_palette, x=2, y=0)
splash.append(bg_sprite)
Betöltjük a 8 db fázisképet tartalmazó clons.bmp
képfájlt és sprite néven készítünk belőle egy 56x64 pixeles csempét, amely alapértelmezetten a betöltött kép bal felső sarkából kivágott szeletet jelöli ki. A sprite[0] = n
értékadással (ahol n = 0..7) meg tudjuk változtatni, hogy a sprite nevű csempe melyik fázisképet hasítsa ki a betöltött képfájlból (lásd: a 2022. március 3-i előadásban )
# Load the sprite sheet (bitmap)
sprite_sheet, palette = adafruit_imageload.load("/clowns.bmp", bitmap=displayio.Bitmap, palette=displayio.Palette)
# Create a sprite (tilegrid)
sprite = displayio.TileGrid(sprite_sheet, pixel_shader=palette,width=1, height=1, tile_width=56, tile_height=64, x=40, y=0)
splash.append(sprite)
Végül a fázisképek váltogatásával futtatjuk az animációt
source_index = 0
# Run the animation by changing the source tile
while True:
sprite[0] = source_index # Váltogatjuk a sprite képét
source_index = (source_index + 1) % 8
time.sleep(0.1)