Added some PicoGraphics based MP examples for the PicoUnicorn
This commit is contained in:
parent
57042bfed3
commit
2f44e85431
|
@ -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!")
|
|
@ -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)
|
|
@ -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][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)
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue