I’ve adapted my previous graphical demo from the Galactic Unicorn and the Cosmic Unicorn for my new Stellar Unicorn.
You can overclock it, but it gets rather overwhelming. I’m also not sure if it’s safe for someone sensitive to flashing images
import utime
import sys
#import machine
import random
from stellar import StellarUnicorn
from picographics import PicoGraphics, DISPLAY_STELLAR_UNICORN as DISPLAY
# standard clock speed
#machine.freq(125_000_000)
# overclock to 200Mhz
#machine.freq(200_000_000)
# create stellar object and graphics surface for drawing
su = StellarUnicorn()
graphics = PicoGraphics(DISPLAY)
width = StellarUnicorn.WIDTH
height = StellarUnicorn.HEIGHT
# define buffer handling elements
buffer = PicoGraphics(DISPLAY)
cu = StellarUnicorn()
displaywidth = StellarUnicorn.WIDTH
displayheight = StellarUnicorn.HEIGHT
cu.set_brightness(1.0)
def set_color():
return random.randrange(0, 256)
class Row():
def __init__(self, i):
self.rowno = i
self.update_values()
def update_values(self):
self.red = set_color()
self.green = set_color()
self.blue = set_color()
# leave a trail?
self.trail = random.choice((False, False, False, False, True))
self.direction = random.choice((0, displaywidth - 1))
self.currpos = self.direction
self.delay = random.randint(1, 10)
self.timeleft = self.delay
# print(self)
def __repr__(self):
return f"Row(rowno = '{self.rowno}', RGB = ('{self.red}', '{self.green}', '{self.blue}'),
leave a trail = '{self.trail}', direction = {self.direction},
delay = {self.delay}, current position = {self.currpos}"
r = []
for i in range(displayheight):
r.append(Row(i))
# define colours and font
bg = buffer.create_pen(0,0,0)
def bump_row(pix_row):
reinitialize = False
fg = buffer.create_pen(pix_row.red, pix_row.green, pix_row.blue)
buffer.set_pen(fg)
cu.update(buffer)
if pix_row.direction == 0:
buffer.pixel(pix_row.currpos, pix_row.rowno)
if pix_row.currpos > 1:
if not pix_row.trail:
buffer.set_pen(bg)
buffer.pixel(pix_row.currpos - 1, pix_row.rowno)
buffer.set_pen(fg)
else:
buffer.pixel(pix_row.currpos, pix_row.rowno)
if pix_row.currpos < displaywidth - 2:
if not pix_row.trail:
buffer.set_pen(bg)
buffer.pixel(pix_row.currpos + 1, pix_row.rowno)
buffer.set_pen(fg)
cu.update(buffer)
utime.sleep(5.0) # time to get the video ready
while (True):
for j in range(displayheight):
r[j].timeleft -= 1
if r[j].timeleft <= 0:
bump_row(r[j]) # processes one row
if r[j].direction == 0:
r[j].currpos += 1
if r[j].currpos >= displaywidth:
r[j].update_values()
else:
r[j].currpos -= 1
if r[j].currpos < 0:
r[j].update_values()
r[j].timeleft = r[j].delay
if cu.is_pressed(StellarUnicorn.SWITCH_A): # exits on press of A
cu.clear()
sys.exit()