Merge pull request #830 from ahnlak/pico-unicorn-mp-examples

Added some PicoGraphics based MP examples for the PicoUnicorn
pull/834/head
Hel Gibbons 2023-09-05 16:46:52 +01:00 zatwierdzone przez GitHub
commit 9e0b3adc0c
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
4 zmienionych plików z 157 dodań i 1 usunięć

Wyświetl plik

@ -0,0 +1,38 @@
# This is a PicoGraphics version of the original demo.py
from picounicorn import PicoUnicorn
from picographics import PicoGraphics, DISPLAY_UNICORN_PACK
picounicorn = PicoUnicorn()
graphics = PicoGraphics(display=DISPLAY_UNICORN_PACK)
w = picounicorn.get_width()
h = picounicorn.get_height()
# Display a rainbow across Pico Unicorn
for x in range(w):
for y in range(h):
# PicoGraphics allows us to set HSV pens directly
PEN = graphics.create_pen_hsv(x / w, y / h, 1.0)
graphics.set_pen(PEN)
graphics.pixel(x, y)
# Ask the Unicorn to update the graphics
picounicorn.update(graphics)
print("Press Button A")
while not picounicorn.is_pressed(picounicorn.BUTTON_A): # Wait for Button A to be pressed
pass
# Clear the display
# Set the pen to black
BLACK = graphics.create_pen(0, 0, 0)
graphics.set_pen(BLACK)
graphics.clear()
# Ask the Unicorn to update the graphics
picounicorn.update(graphics)
print("Button A pressed!")

Wyświetl plik

@ -0,0 +1,26 @@
# This is a PicoGraphics version of the original demo.py
from picounicorn import PicoUnicorn
from picographics import PicoGraphics, DISPLAY_UNICORN_PACK
import time
picounicorn = PicoUnicorn()
graphics = PicoGraphics(display=DISPLAY_UNICORN_PACK)
w = picounicorn.get_width()
h = picounicorn.get_height()
while True:
t = time.ticks_ms() / 3600
for x in range(w):
for y in range(h):
# PicoGraphics allows us to set HSV pens directly
PEN = graphics.create_pen_hsv(t + ((x + y) / w / 4), 1.0, 1.0)
graphics.set_pen(PEN)
graphics.pixel(x, y)
# Ask the Unicorn to update the graphics
picounicorn.update(graphics)
# And sleep, so we update ~ 60fps
time.sleep(1.0 / 60)

Wyświetl plik

@ -0,0 +1,91 @@
import time
import random
from picounicorn import PicoUnicorn
from picographics import PicoGraphics, DISPLAY_UNICORN_PACK
'''
A pretty, procedural fire effect. Based on fire_effect.py from bigger Unicorns!
'''
picounicorn = PicoUnicorn()
graphics = PicoGraphics(display=DISPLAY_UNICORN_PACK)
fire_colours = [graphics.create_pen(0, 0, 0),
graphics.create_pen(20, 20, 20),
graphics.create_pen(180, 30, 0),
graphics.create_pen(220, 160, 0),
graphics.create_pen(255, 255, 180)]
@micropython.native # noqa: F821
def update():
# take local references as it's quicker than accessing the global
# and we access it a lot in this method
_heat = heat
# clear the bottom row and then add a new fire seed to it
for x in range(width):
_heat[x][height - 1] = 0.0
_heat[x][height - 2] = 0.0
for c in range(fire_spawns):
x = random.randint(0, width - 4) + 2
_heat[x + 0][height - 1] = 1.0
_heat[x + 1][height - 1] = 1.0
_heat[x - 1][height - 1] = 1.0
_heat[x + 0][height - 2] = 1.0
_heat[x + 1][height - 2] = 1.0
_heat[x - 1][height - 2] = 1.0
factor = damping_factor / 5.0
for y in range(0, height - 2):
for x in range(1, width - 1):
_heat[x][y] += _heat[x][y + 1] + _heat[x][y + 2] + _heat[x - 1][y + 1] + _heat[x + 1][y + 1]
_heat[x][y] *= factor
@micropython.native # noqa: F821
def draw():
# take local references as it's quicker than accessing the global
# and we access it a lot in this method
_graphics = graphics
_heat = heat
_set_pen = graphics.set_pen
_pixel = graphics.pixel
_fire_colours = fire_colours
for y in range(picounicorn.get_height()):
for x in range(picounicorn.get_width()):
value = _heat[y + 1][x]
if value < 0.15:
_set_pen(_fire_colours[0])
elif value < 0.25:
_set_pen(_fire_colours[1])
elif value < 0.35:
_set_pen(_fire_colours[2])
elif value < 0.45:
_set_pen(_fire_colours[3])
else:
_set_pen(_fire_colours[4])
_pixel(x, y)
picounicorn.update(_graphics)
width = picounicorn.get_height() + 2
height = picounicorn.get_width() + 4
heat = [[0.0 for y in range(height)] for x in range(width)]
fire_spawns = 1
damping_factor = 0.97
while True:
start = time.ticks_ms()
update()
draw()
print("total took: {} ms".format(time.ticks_ms() - start))
# And sleep, so we update ~ 60fps
time.sleep(1.0 / 60)

Wyświetl plik

@ -73,6 +73,7 @@ Bear in mind that MicroPython has only 192K of RAM available- a 320x240 pixel di
* Interstate75 and 75W - HUB75 Matrix driver - `DISPLAY_INTERSTATE75_SIZEOFMATRIX` please read below!
* Cosmic Unicorn - 32x32 LED Matrix - `DISPLAY_COSMIC_UNICORN`
* Stellar Unicorn - 16x16 LED Matrix - `DISPLAY_STELLAR_UNICORN`
* Pico Unicorn Pack - 16x7 LED Matrix - `DISPLAY_UNICORN_PACK`
#### Interstate75 and Interstate75W Display modes
@ -274,7 +275,7 @@ Send the contents of your Pico Graphics buffer to your screen:
display.update()
```
If you are using a Galactic Unicorn, then the process for updating the display is different. Instead of the above, do:
If you are using a Unicorn (Galactic, Cosmic, Stellar or Pico), then the process for updating the display is different. Instead of the above, do:
```python
galactic_unicorn.update(display)