diff --git a/micropython/examples/galactic_unicorn/eighties_super_computer.py b/micropython/examples/galactic_unicorn/eighties_super_computer.py new file mode 100644 index 00000000..4fdbc48a --- /dev/null +++ b/micropython/examples/galactic_unicorn/eighties_super_computer.py @@ -0,0 +1,62 @@ +import time +import random +from galactic import GalacticUnicorn + +gu = GalacticUnicorn() + +colour = (230, 150, 0) + + +@micropython.native # noqa: F821 +def setup(): + global width, height, lifetime, age + width = GalacticUnicorn.WIDTH + height = GalacticUnicorn.HEIGHT + lifetime = [[0.0 for y in range(height)] for x in range(width)] + age = [[0.0 for y in range(height)] for x in range(width)] + for y in range(height): + for x in range(width): + lifetime[x][y] = 1.0 + random.uniform(0.0, 0.1) + age[x][y] = random.uniform(0.0, 1.0) * lifetime[x][y] + + +@micropython.native # noqa: F821 +def draw(): + for y in range(height): + for x in range(width): + if age[x][y] < lifetime[x][y] * 0.3: + gu.set_pixel(x, y, colour[0], colour[1], colour[2]) + elif age[x][y] < lifetime[x][y] * 0.5: + decay = (lifetime[x][y] * 0.5 - age[x][y]) * 5.0 + gu.set_pixel(x, y, int(decay * colour[0]), int(decay * colour[1]), int(decay * colour[2])) + + +@micropython.native # noqa: F821 +def update(): + for y in range(height): + for x in range(width): + if age[x][y] >= lifetime[x][y]: + age[x][y] = 0.0 + lifetime[x][y] = 1.0 + random.uniform(0.0, 0.1) + + age[x][y] += 0.025 + + +setup() + +gu.set_brightness(0.5) + +while True: + + if gu.is_pressed(GalacticUnicorn.SWITCH_BRIGHTNESS_UP): + gu.adjust_brightness(+0.01) + + if gu.is_pressed(GalacticUnicorn.SWITCH_BRIGHTNESS_DOWN): + gu.adjust_brightness(-0.01) + + start = time.ticks_ms() + + draw() + update() + + print("total took: {} ms".format(time.ticks_ms() - start)) diff --git a/micropython/examples/galactic_unicorn/rainbow.py b/micropython/examples/galactic_unicorn/rainbow.py new file mode 100644 index 00000000..c0ec6826 --- /dev/null +++ b/micropython/examples/galactic_unicorn/rainbow.py @@ -0,0 +1,105 @@ +import time +import math +from galactic import GalacticUnicorn + +gu = GalacticUnicorn() + +width = GalacticUnicorn.WIDTH +height = GalacticUnicorn.HEIGHT + + +@micropython.native # noqa: F821 +def from_hsv(h, s, v): + i = math.floor(h * 6.0) + f = h * 6.0 - i + v *= 255.0 + p = v * (1.0 - s) + q = v * (1.0 - f * s) + t = v * (1.0 - (1.0 - f) * s) + + i = int(i) % 6 + if i == 0: + return int(v), int(t), int(p) + if i == 1: + return int(q), int(v), int(p) + if i == 2: + return int(p), int(v), int(t) + if i == 3: + return int(p), int(q), int(v) + if i == 4: + return int(t), int(p), int(v) + if i == 5: + return int(v), int(p), int(q) + + +@micropython.native # noqa: F821 +def draw(): + global hue_offset, phase + phase_percent = phase / 15 + for x in range(width): + colour = hue_map[int((x + (hue_offset * width)) % width)] + for y in range(height): + v = ((math.sin((x + y) / stripe_width + phase_percent) + 1.5) / 2.5) + + r = int(colour[0] * v) + g = int(colour[1] * v) + b = int(colour[2] * v) + + gu.set_pixel(x, y, r, g, b) + + +hue_map = [from_hsv(x / width, 1.0, 1.0) for x in range(width)] +hue_offset = 0.0 + +animate = True +stripe_width = 3.0 +speed = 1.0 + +gu.set_brightness(0.5) + +phase = 0 +while True: + + if animate: + phase += speed + + if gu.is_pressed(GalacticUnicorn.SWITCH_VOLUME_UP): + hue_offset += 0.01 + hue_offset = 1.0 if hue_offset > 1.0 else hue_offset + + if gu.is_pressed(GalacticUnicorn.SWITCH_VOLUME_DOWN): + hue_offset -= 0.01 + hue_offset = 0.0 if hue_offset < 0.0 else hue_offset + + if gu.is_pressed(GalacticUnicorn.SWITCH_BRIGHTNESS_UP): + gu.adjust_brightness(+0.01) + + if gu.is_pressed(GalacticUnicorn.SWITCH_BRIGHTNESS_DOWN): + gu.adjust_brightness(-0.01) + + if gu.is_pressed(GalacticUnicorn.SWITCH_SLEEP): + animate = False + + if gu.is_pressed(GalacticUnicorn.SWITCH_A): + speed += 0.05 + speed = 10.0 if speed > 10.0 else speed + animate = True + + if gu.is_pressed(GalacticUnicorn.SWITCH_B): + speed -= 0.05 + speed = 0.0 if speed < 0.0 else speed + animate = True + + if gu.is_pressed(GalacticUnicorn.SWITCH_C): + stripe_width += 0.05 + stripe_width = 10.0 if stripe_width > 10.0 else stripe_width + + if gu.is_pressed(GalacticUnicorn.SWITCH_D): + stripe_width -= 0.05 + stripe_width = 1.0 if stripe_width < 1.0 else stripe_width + + start = time.ticks_ms() + + draw() + + print("total took: {} ms".format(time.ticks_ms() - start))