import time from galactic import GalacticUnicorn from picographics import PicoGraphics, DISPLAY_GALACTIC_UNICORN as DISPLAY ''' Display scrolling wisdom, quotes or greetz. You can adjust the brightness with LUX + and -. ''' # constants for controlling scrolling text PADDING = 5 MESSAGE_COLOUR = (255, 255, 255) OUTLINE_COLOUR = (0, 0, 0) BACKGROUND_COLOUR = (10, 0, 96) MESSAGE = "\"Space is big. Really big. You just won't believe how vastly hugely mind-bogglingly big it is. I mean, you may think it's a long way down the road to the chemist, but that's just peanuts to space.\" - Douglas Adams" HOLD_TIME = 2.0 STEP_TIME = 0.075 # create galactic object and graphics surface for drawing gu = GalacticUnicorn() graphics = PicoGraphics(DISPLAY) width = GalacticUnicorn.WIDTH height = GalacticUnicorn.HEIGHT # function for drawing outlined text def outline_text(text, x, y): graphics.set_pen(graphics.create_pen(int(OUTLINE_COLOUR[0]), int(OUTLINE_COLOUR[1]), int(OUTLINE_COLOUR[2]))) graphics.text(text, x - 1, y - 1, -1, 1) graphics.text(text, x, y - 1, -1, 1) graphics.text(text, x + 1, y - 1, -1, 1) graphics.text(text, x - 1, y, -1, 1) graphics.text(text, x + 1, y, -1, 1) graphics.text(text, x - 1, y + 1, -1, 1) graphics.text(text, x, y + 1, -1, 1) graphics.text(text, x + 1, y + 1, -1, 1) graphics.set_pen(graphics.create_pen(int(MESSAGE_COLOUR[0]), int(MESSAGE_COLOUR[1]), int(MESSAGE_COLOUR[2]))) graphics.text(text, x, y, -1, 1) gu.set_brightness(0.5) # state constants STATE_PRE_SCROLL = 0 STATE_SCROLLING = 1 STATE_POST_SCROLL = 2 shift = 0 state = STATE_PRE_SCROLL # set the font graphics.set_font("bitmap8") # calculate the message width so scrolling can happen msg_width = graphics.measure_text(MESSAGE, 1) last_time = time.ticks_ms() while True: time_ms = time.ticks_ms() 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 state == STATE_PRE_SCROLL and time_ms - last_time > HOLD_TIME * 1000: if msg_width + PADDING * 2 >= width: state = STATE_SCROLLING last_time = time_ms if state == STATE_SCROLLING and time_ms - last_time > STEP_TIME * 1000: shift += 1 if shift >= (msg_width + PADDING * 2) - width - 1: state = STATE_POST_SCROLL last_time = time_ms if state == STATE_POST_SCROLL and time_ms - last_time > HOLD_TIME * 1000: state = STATE_PRE_SCROLL shift = 0 last_time = time_ms graphics.set_pen(graphics.create_pen(int(BACKGROUND_COLOUR[0]), int(BACKGROUND_COLOUR[1]), int(BACKGROUND_COLOUR[2]))) graphics.clear() outline_text(MESSAGE, x=PADDING - shift, y=2) # update the display gu.update(graphics) # pause for a moment (important or the USB serial device will fail) time.sleep(0.001)