def brightness(): '''All matrices show displays all LEDs lit, from min to max brightness over about 1 second. Should be left at max brightness. ''' fb = FrameBuffer(matrix_layout=[(0, 0, 90)]) for i in range(16): fb.erase(i) fb.show() time.sleep(0.1)
def sprite_time_large_bitmap_draw_and_show(): # This is currently quite slow, as it is all done in Python via a 2D array. # Speed not needed right now, but may in future move to numpy or CPython fb = FrameBuffer(matrix_layout=[(0, 0, 0)]) s = Sprite((('5' * 16) + '\n') * 16) def draw(): fb.draw(s) fb.show() return timeit(partial(draw), loops=100) > 50
def diagonal_wave_animation(): '''Displays a diagonal wave animation over ~3 seconds. Movement should appear in the direction from the botton right to the top left. ''' fb = FrameBuffer(matrix_layout=[(0, 0, 90)]) colors = list(range(16)) + list(reversed(range(16))) for i in range(80): for x in range(16): fb.line((x - 8, 0), (x, fb.height), color=colors[x]) fb.show() # rotate colors colors = colors[1:] + colors[:1] time.sleep(0.04)
def rect2(): fb = FrameBuffer(matrix_layout=[(0, 0, 0)]) fb.rect((0, 0), (8, 8), fill=True) expected_fb = ''' FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF ''' return arrays_equal(expected_fb, fb)
def rect3(): fb = FrameBuffer(matrix_layout=[(0, 0, 0)]) fb.rect((2, 1), (3, 5), fill=True) expected_fb = ''' 00000000 00000000 00FFF000 00FFF000 00FFF000 00FFF000 00FFF000 00000000 ''' return arrays_equal(expected_fb, fb)
def point4(): fb = FrameBuffer(matrix_layout=[(0, 0, 0)]) fb.point(7, 7, color=10) expected_fb = ''' 0000000A 00000000 00000000 00000000 00000000 00000000 00000000 00000000 ''' return arrays_equal(expected_fb, fb)
def point3(): fb = FrameBuffer(matrix_layout=[(0, 0, 0)]) fb.point(1, 2, color=3) expected_fb = ''' 00000000 00000000 00000000 00000000 00000000 03000000 00000000 00000000 ''' return arrays_equal(expected_fb, fb)
def point2(): fb = FrameBuffer(matrix_layout=[(0, 0, 0)]) fb.point((0, 0), color=1) expected_fb = ''' 00000000 00000000 00000000 00000000 00000000 00000000 00000000 10000000 ''' return arrays_equal(expected_fb, fb)
def point1(): fb = FrameBuffer(matrix_layout=[(0, 0, 0)]) fb.point(0, 0) expected_fb = ''' 00000000 00000000 00000000 00000000 00000000 00000000 00000000 F0000000 ''' return arrays_equal(expected_fb, fb)
def init_two(): fb = FrameBuffer(matrix_layout=[(0, 0, 0), (8, 0, 0)]) fb.line((0, 0), (fb.width, fb.height), color=0xa) expected_fb = ''' 00000000000000aa 000000000000aa00 0000000000aa0000 00000000aa000000 000000aa00000000 0000aa0000000000 00aa000000000000 aa00000000000000 ''' return arrays_equal(expected_fb, fb)
def line5(): fb = FrameBuffer(matrix_layout=[(0, 0, 0)]) fb.line((1, 3), (6, 5)) expected_fb = ''' 00000000 00000000 00000FF0 000FF000 0FF00000 00000000 00000000 00000000 ''' return arrays_equal(expected_fb, fb)
def line3(): fb = FrameBuffer(matrix_layout=[(0, 0, 0)]) fb.line((0, 0), (7, 7)) expected_fb = ''' 0000000F 000000F0 00000F00 0000F000 000F0000 00F00000 0F000000 F0000000 ''' return arrays_equal(expected_fb, fb)
def sprite_draw(): fb = FrameBuffer(matrix_layout=[(0, 0, 0)]) fb.erase(0xE) s = copy.deepcopy(default_sprite) fb.draw(s, origin=(2, 3)) expected_fb = ''' EEEEEEEE EE123EEE EE456EEE EE789EEE EEABCEEE EEEEEEEE EEEEEEEE EEEEEEEE ''' return arrays_equal(expected_fb, fb)
def line4(): fb = FrameBuffer(matrix_layout=[(0, 0, 0)]) fb.line((0, 0), (7, 7)) fb.line((7, 0), (0, 7), color=1) fb.line((2, 0), (2, 7), color=2) fb.line((0, 2), (7, 2), color=3) expected_fb = ''' 1020000F 012000F0 00200F00 0021F000 002F1000 33333333 0F200010 F0200001 ''' return arrays_equal(expected_fb, fb)
def rect4(): fb = FrameBuffer(matrix_layout=[(0, 0, 0)]) fb.rect((0, 0), (4, 5), color=1) fb.rect((2, 2), (6, 6), color=2) fb.rect((5, 1), (3, 3), color=3) fb.rect((1, 5), (4, 2), color=4) expected_fb = ''' 00222222 04444002 04444002 11210002 10210333 10222323 10010333 11110000 ''' return arrays_equal(expected_fb, fb)
def verify_cpu(): fb = FrameBuffer(matrix_layout=[(0, 0, 0)]) return testing.verify_cpu()
def init_two_bad_angle(): try: fb = FrameBuffer(matrix_layout=[(0, 0, 0), (8, 0, 123)]) except ValueError: return True return False
def erase1(): fb = FrameBuffer(matrix_layout=[(0, 0, 0)]) fb.erase(0xf) fb.erase() return fb._framebuffer() == makefb('00000000\n' * 8)
def erase2(): fb = FrameBuffer(matrix_layout=[(0, 0, 0)]) fb.erase(3) return fb._framebuffer() == makefb('33333333\n' * 8)
def default_erased(): fb = FrameBuffer(matrix_layout=[(0, 0, 0)]) return fb._framebuffer() == erased_fb()
def erase3(): fb = FrameBuffer(matrix_layout=[(0, 0, 0)]) fb.erase(7) return fb._framebuffer() == makefb('77777777\n' * 8)
def out_of_bounds_point3(): fb = FrameBuffer(matrix_layout=[(0, 0, 0)]) fb.point(fb.width, 0) return fb._framebuffer() == erased_fb()
def time_show(): fb = FrameBuffer(matrix_layout=[(0, 0, 0)]) return timeit(partial(fb.show), loops=200) > 300
def out_of_bounds_point4(): fb = FrameBuffer(matrix_layout=[(0, 0, 0)]) fb.point(0, fb.height) return fb._framebuffer() == erased_fb()
def time_point(): fb = FrameBuffer(matrix_layout=[(0, 0, 0)]) return timeit(partial(fb.point, 0, 0)) > 40000
from rstem.led_matrix import FrameBuffer, Sprite from rstem.gpio import Output import time from random import random fb = FrameBuffer([(0, 0, 90)]) outs = [ Output(17), Output(27), Output(22), Output(23), Output(4), Output(14), Output(15), Output(18), ] with open('scroller1.spr') as f: s1 = Sprite(f.read()) s1_width = s1.width s1 += s1 with open('scroller2.spr') as f: s2 = Sprite(f.read()) s2_width = s2.width s2 += s2 i = 0 i1 = 0 i2 = 0
def init_three_diagonal(): fb = FrameBuffer(matrix_layout=[(0, 0, 0), (8, 8, 0), (16, 16, 0)]) expected_fb = (('0' * 24) + '\n') * 24 return arrays_equal(expected_fb, fb)
from rstem.led_matrix import FrameBuffer from rstem.mcpi import minecraft, control import time control.show() mc = minecraft.Minecraft.create() SCALE = 25 fb = FrameBuffer() count = 0 FLASH_COUNT = 3 flash_lit = True while True: pos = mc.player.getTilePos() x = round(pos.x / SCALE + (fb.width - 1) / 2) x_out_of_bounds = not 0 <= x < fb.width x = min(fb.width - 1, max(0, x)) z = round(pos.z / SCALE + (fb.height - 1) / 2) z_out_of_bounds = not 0 <= z < fb.height z = min(fb.height - 1, max(0, z)) fb.erase() count += 1 if count > FLASH_COUNT: flash_lit = not flash_lit count = 0 if not x_out_of_bounds and not z_out_of_bounds or flash_lit:
# Initialize framebuffer fb = FrameBuffer(matrix_layout=[ (0, 0, 0), (8, 0, 0), (16, 0, 0), (24, 0, 0), (32, 0, 0), (32, 8, 180), (24, 8, 180), (16, 8, 180), (8, 8, 180), (0, 8, 180), (0, 16, 0), (8, 16, 0), (16, 16, 0), (24, 16, 0), (32, 16, 0), (32, 24, 180), (24, 24, 180), (16, 24, 180), (8, 24, 180), (0, 24, 180), (0, 32, 0), (8, 32, 0), (16, 32, 0), (24, 32, 0), (32, 32, 0), ]) # Initialize accelerometer