Microbit Super Computer
A slightly larger microbit application today with an homage to the Connection Machine super computer that featured in the movie Jurassic Park. More particularly, a microscopic recreation of the LED blinkenlights from the CM-5 LED front panel. The wikipedia page shows a gif of one of the "random" patterns that the front panel could show while the machine was working.
I have read that the CM-5 used to have several modes for the LED display and that the patterns generated, while looking random, were actually carefully curated and based on a specific algorithm. Here I've gone for a slightly simpler approach generating an initial image and then moving the top and bottom halves of the image in different directions y using the shift_right and shift_left functions on image. New stripes of pixels are created to fill in the gap created by each shift and the new image is recomposed by bit blitting (not a thing I've done since my younger days as a windows programmer) part of the bottom image onto the top image to create a sort of sliding conveyor belt effect.
# Randomly generate an evolving pixel
# pattern reminiscent of the Connection Machine
# LED front panel
from microbit import \*
import random
pixel_on = 9
pixel_off = 0
pc_chance_on = 60
speed = 300
# Generate a random series of pixels in a
# vertical strip down the display
def generate_random_strip(image, on_percent, stripe):
for y in range(0, 5):
on = random.randint(0, 100)
brightness = pixel_on if on <= on_percent else pixel_off
image.set_pixel(stripe, y, brightness)
return image
def generate_random_image(on_percent):
image = Image()
for x in range(0, 5):
image = generate_random_strip(image, on_percent, x)
return image
display.scroll('CM-5')
frame = generate_random_image(pc_chance_on)
display.show(frame)
while True:
top = generate_random_strip(frame.shift_right(1), pc_chance_on, 0)
bottom = generate_random_strip(frame.shift_left(1), pc_chance_on, 4)
from_x = 0
from_y = 2
from_width = 5
from_height = 3
to_x = 0
to_y = 2
top.blit(bottom, from_x, from_y, from_width, from_height, to_x, to_y)
frame = top
display.show(frame)
sleep(speed)