kopia lustrzana https://github.com/pimoroni/pimoroni-pico
Tufty2040: MicroPython examples.
Co-authored-by: Phil Howard <phil@pimoroni.com>pull/373/head
rodzic
0258247b4b
commit
ef1bdff2bd
|
@ -0,0 +1,151 @@
|
||||||
|
import time
|
||||||
|
import machine
|
||||||
|
from picographics import PicoGraphics, DISPLAY_TUFTY_2040
|
||||||
|
|
||||||
|
rtc = machine.RTC()
|
||||||
|
display = PicoGraphics(display=DISPLAY_TUFTY_2040)
|
||||||
|
|
||||||
|
# Tufty constants.
|
||||||
|
A = 7
|
||||||
|
B = 8
|
||||||
|
C = 15
|
||||||
|
UP = 22
|
||||||
|
DOWN = 6
|
||||||
|
LED = 25
|
||||||
|
|
||||||
|
WIDTH, HEIGHT = display.get_bounds()
|
||||||
|
display.set_backlight(1.0)
|
||||||
|
|
||||||
|
# Buttons
|
||||||
|
button_a = machine.Pin(A, machine.Pin.IN)
|
||||||
|
button_b = machine.Pin(B, machine.Pin.IN)
|
||||||
|
button_c = machine.Pin(C, machine.Pin.IN)
|
||||||
|
button_up = machine.Pin(UP, machine.Pin.IN)
|
||||||
|
button_down = machine.Pin(DOWN, machine.Pin.IN)
|
||||||
|
|
||||||
|
WHITE = display.create_pen(255, 255, 255)
|
||||||
|
BLACK = display.create_pen(0, 0, 0)
|
||||||
|
|
||||||
|
PINK = display.create_pen(214, 28, 78)
|
||||||
|
ORANGE_1 = display.create_pen(247, 126, 33)
|
||||||
|
ORANGE_2 = display.create_pen(250, 194, 19)
|
||||||
|
|
||||||
|
cursors = ["hour", "minute"]
|
||||||
|
set_clock = False
|
||||||
|
cursor = 0
|
||||||
|
last = 0
|
||||||
|
|
||||||
|
|
||||||
|
def days_in_month(month, year):
|
||||||
|
if month == 2 and ((year % 4 == 0 and year % 100 != 0) or year % 400 == 0):
|
||||||
|
return 29
|
||||||
|
return (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)[month - 1]
|
||||||
|
|
||||||
|
|
||||||
|
# Button handling function
|
||||||
|
def button(pin):
|
||||||
|
global last, set_clock, cursor, year, month, day, hour, minute
|
||||||
|
|
||||||
|
time.sleep(0.01)
|
||||||
|
if not pin.value():
|
||||||
|
return
|
||||||
|
|
||||||
|
if button_a.value() and button_c.value():
|
||||||
|
machine.reset()
|
||||||
|
|
||||||
|
adjust = 0
|
||||||
|
changed = False
|
||||||
|
|
||||||
|
if pin == button_b:
|
||||||
|
set_clock = not set_clock
|
||||||
|
changed = True
|
||||||
|
if not set_clock:
|
||||||
|
rtc.datetime((year, month, day, 0, hour, minute, second, 0))
|
||||||
|
|
||||||
|
if set_clock:
|
||||||
|
if pin == button_c:
|
||||||
|
cursor += 1
|
||||||
|
cursor %= len(cursors)
|
||||||
|
|
||||||
|
if pin == button_a:
|
||||||
|
cursor -= 1
|
||||||
|
cursor %= len(cursors)
|
||||||
|
|
||||||
|
if pin == button_up:
|
||||||
|
adjust = 1
|
||||||
|
|
||||||
|
if pin == button_down:
|
||||||
|
adjust = -1
|
||||||
|
|
||||||
|
if cursors[cursor] == "hour":
|
||||||
|
hour += adjust
|
||||||
|
hour %= 24
|
||||||
|
if cursors[cursor] == "minute":
|
||||||
|
minute += adjust
|
||||||
|
minute %= 60
|
||||||
|
|
||||||
|
if set_clock or changed:
|
||||||
|
draw_clock()
|
||||||
|
|
||||||
|
|
||||||
|
# Register the button handling function with the buttons
|
||||||
|
button_down.irq(trigger=machine.Pin.IRQ_RISING, handler=button)
|
||||||
|
button_up.irq(trigger=machine.Pin.IRQ_RISING, handler=button)
|
||||||
|
button_a.irq(trigger=machine.Pin.IRQ_RISING, handler=button)
|
||||||
|
button_b.irq(trigger=machine.Pin.IRQ_RISING, handler=button)
|
||||||
|
button_c.irq(trigger=machine.Pin.IRQ_RISING, handler=button)
|
||||||
|
|
||||||
|
|
||||||
|
def draw_clock():
|
||||||
|
|
||||||
|
display.set_pen(WHITE)
|
||||||
|
display.clear()
|
||||||
|
|
||||||
|
hr = "{:02}".format(hour)
|
||||||
|
min = "{:02}".format(minute)
|
||||||
|
sec = "{:02}".format(second)
|
||||||
|
|
||||||
|
hr_width = display.measure_text(hr, 1)
|
||||||
|
hr_offset = 15
|
||||||
|
|
||||||
|
minute_width = display.measure_text(min, 1)
|
||||||
|
minute_offset = 15
|
||||||
|
|
||||||
|
second_width = display.measure_text(sec, 1)
|
||||||
|
second_offset = 5
|
||||||
|
|
||||||
|
display.set_pen(PINK)
|
||||||
|
display.rectangle(10, 10, (hour * 13), 60)
|
||||||
|
display.set_pen(ORANGE_1)
|
||||||
|
display.rectangle(10, 85, (minute * 5), 60)
|
||||||
|
display.set_pen(ORANGE_2)
|
||||||
|
display.rectangle(10, 160, (second * 5), 60)
|
||||||
|
|
||||||
|
display.set_pen(WHITE)
|
||||||
|
display.text(hr, (hour * 13) - hr_width - hr_offset, 45, 10, 3)
|
||||||
|
display.text(min, (minute * 5) - minute_width - minute_offset, 120, 10, 3)
|
||||||
|
display.text(sec, (second * 5) - second_width - second_offset, 202, 10, 2)
|
||||||
|
|
||||||
|
display.set_pen(BLACK)
|
||||||
|
|
||||||
|
if set_clock:
|
||||||
|
|
||||||
|
if cursors[cursor] == "hour":
|
||||||
|
display.line(5, 10, 5, 70)
|
||||||
|
if cursors[cursor] == "minute":
|
||||||
|
display.line(5, 85, 5, 145)
|
||||||
|
|
||||||
|
display.update()
|
||||||
|
|
||||||
|
|
||||||
|
year, month, day, wd, hour, minute, second, _ = rtc.datetime()
|
||||||
|
|
||||||
|
last_second = second
|
||||||
|
|
||||||
|
while True:
|
||||||
|
if not set_clock:
|
||||||
|
year, month, day, wd, hour, minute, second, _ = rtc.datetime()
|
||||||
|
if second != last_second:
|
||||||
|
draw_clock()
|
||||||
|
last_second = second
|
||||||
|
time.sleep(0.01)
|
|
@ -0,0 +1,197 @@
|
||||||
|
import time
|
||||||
|
import random
|
||||||
|
from pimoroni import Button
|
||||||
|
from picographics import PicoGraphics, DISPLAY_TUFTY_2040
|
||||||
|
|
||||||
|
display = PicoGraphics(display=DISPLAY_TUFTY_2040)
|
||||||
|
WIDTH, HEIGHT = display.get_bounds()
|
||||||
|
|
||||||
|
# Load the spritsheets so we can flip between them
|
||||||
|
tilemap = bytearray(128 * 128)
|
||||||
|
open("s4m_ur4i-pirate-tilemap.rgb332", "rb").readinto(tilemap)
|
||||||
|
|
||||||
|
character = bytearray(128 * 128)
|
||||||
|
open("s4m_ur4i-pirate-characters.rgb332", "rb").readinto(character)
|
||||||
|
|
||||||
|
display.set_spritesheet(character)
|
||||||
|
|
||||||
|
|
||||||
|
# Buttons
|
||||||
|
button_a = Button(7, invert=False)
|
||||||
|
button_b = Button(8, invert=False)
|
||||||
|
button_c = Button(9, invert=False)
|
||||||
|
button_up = Button(22, invert=False)
|
||||||
|
button_down = Button(6, invert=False)
|
||||||
|
|
||||||
|
display.set_backlight(1.0)
|
||||||
|
display.set_pen(255)
|
||||||
|
display.clear()
|
||||||
|
|
||||||
|
|
||||||
|
class Player():
|
||||||
|
def __init__(self):
|
||||||
|
self.reset()
|
||||||
|
|
||||||
|
def reset(self):
|
||||||
|
self.x = 150
|
||||||
|
self.y = 180
|
||||||
|
self.w = 15
|
||||||
|
self.h = 30
|
||||||
|
self.speed = 10
|
||||||
|
self.is_alive = True
|
||||||
|
self.lives = 3
|
||||||
|
self.score = 0
|
||||||
|
self.moving = 0
|
||||||
|
|
||||||
|
def move(self, x, y):
|
||||||
|
if self.x + x > 0 - self.w and self.x + x < WIDTH - self.w:
|
||||||
|
self.x += x
|
||||||
|
self.y += y
|
||||||
|
|
||||||
|
def sprite(self):
|
||||||
|
display.set_spritesheet(character)
|
||||||
|
display.sprite(1, 1 if self.moving else 0, self.x, self.y, 4, 0)
|
||||||
|
|
||||||
|
|
||||||
|
class Treasure():
|
||||||
|
def __init__(self):
|
||||||
|
self.w = 16
|
||||||
|
self.h = 16
|
||||||
|
self.randomize()
|
||||||
|
|
||||||
|
def sprite(self):
|
||||||
|
if not self.enabled:
|
||||||
|
return
|
||||||
|
display.set_spritesheet(tilemap)
|
||||||
|
display.sprite(4, 2, self.x, self.y, 3, 0)
|
||||||
|
|
||||||
|
def randomize(self):
|
||||||
|
self.enabled = True
|
||||||
|
self.x = random.randint(15, WIDTH - 60)
|
||||||
|
self.y = HEIGHT - 50
|
||||||
|
|
||||||
|
|
||||||
|
class Block():
|
||||||
|
def __init__(self):
|
||||||
|
self.w = 16
|
||||||
|
self.h = 16
|
||||||
|
self.is_alive = True
|
||||||
|
self.randomize()
|
||||||
|
|
||||||
|
def move(self):
|
||||||
|
self.y += self.speed
|
||||||
|
|
||||||
|
def sprite(self):
|
||||||
|
display.set_spritesheet(character)
|
||||||
|
display.sprite(10, 8, self.x, self.y, 4, 0)
|
||||||
|
|
||||||
|
def randomize(self):
|
||||||
|
self.last_update = time.time()
|
||||||
|
self.x = random.randint(10, WIDTH - self.w - 10)
|
||||||
|
self.y = -self.h
|
||||||
|
self.speed = random.randint(4, 12)
|
||||||
|
|
||||||
|
|
||||||
|
class Game():
|
||||||
|
def __init__(self):
|
||||||
|
self.player = Player()
|
||||||
|
self.block = []
|
||||||
|
self.last_new_block = 0
|
||||||
|
|
||||||
|
self.treasure = Treasure()
|
||||||
|
self.last_treasure = 0
|
||||||
|
|
||||||
|
self.SKY = display.create_pen(72, 180, 224)
|
||||||
|
|
||||||
|
for i in range(5):
|
||||||
|
self.block.append(Block())
|
||||||
|
|
||||||
|
def reset(self):
|
||||||
|
for block in self.block:
|
||||||
|
block.randomize()
|
||||||
|
|
||||||
|
self.treasure.randomize()
|
||||||
|
self.player.reset()
|
||||||
|
|
||||||
|
def get_input(self):
|
||||||
|
if button_c.read():
|
||||||
|
self.player.move(self.player.speed, 0)
|
||||||
|
self.player.moving = 0
|
||||||
|
if button_a.read():
|
||||||
|
self.player.move(-self.player.speed, 0)
|
||||||
|
self.player.moving = 1
|
||||||
|
|
||||||
|
def background(self):
|
||||||
|
display.set_spritesheet(tilemap)
|
||||||
|
display.set_pen(self.SKY)
|
||||||
|
display.clear()
|
||||||
|
|
||||||
|
for i in range(WIDTH / 32):
|
||||||
|
display.sprite(1, 2, i * 32, 210, 4, 0)
|
||||||
|
|
||||||
|
def draw(self):
|
||||||
|
self.background()
|
||||||
|
for block in self.block:
|
||||||
|
block.sprite()
|
||||||
|
display.set_pen(255)
|
||||||
|
display.text("Score: " + str(self.player.score), 10, 10, 320, 2)
|
||||||
|
self.treasure.sprite()
|
||||||
|
display.set_pen(0)
|
||||||
|
self.player.sprite()
|
||||||
|
display.update()
|
||||||
|
time.sleep(0.01)
|
||||||
|
|
||||||
|
def check_collision(self, a, b):
|
||||||
|
return a.x + a.w >= b.x and a.x <= b.x + b.w and a.y + a.h >= b.y and a.y <= b.y + b.h
|
||||||
|
|
||||||
|
def update(self):
|
||||||
|
for block in self.block:
|
||||||
|
block.move()
|
||||||
|
if block.y > HEIGHT:
|
||||||
|
block.randomize()
|
||||||
|
|
||||||
|
if block.y + block.h >= self.player.y and self.check_collision(self.player, block):
|
||||||
|
block.randomize()
|
||||||
|
self.player.is_alive = False
|
||||||
|
|
||||||
|
if self.treasure.enabled:
|
||||||
|
if self.check_collision(self.player, self.treasure):
|
||||||
|
self.player.score += 1
|
||||||
|
self.treasure.enabled = False
|
||||||
|
self.last_treasure = time.time()
|
||||||
|
|
||||||
|
if time.time() - self.last_treasure > 2:
|
||||||
|
if not self.treasure.enabled:
|
||||||
|
self.treasure.randomize()
|
||||||
|
|
||||||
|
if self.player.lives == 0:
|
||||||
|
self.player.is_alive = False
|
||||||
|
|
||||||
|
|
||||||
|
game = Game()
|
||||||
|
|
||||||
|
while True:
|
||||||
|
game.background()
|
||||||
|
display.set_pen(255)
|
||||||
|
display.text("ARGH!", 40, 35, 200, 10)
|
||||||
|
display.text("Press B to Start", 80, 150, 180, 2)
|
||||||
|
display.update()
|
||||||
|
|
||||||
|
while not button_b.read():
|
||||||
|
pass
|
||||||
|
|
||||||
|
while game.player.is_alive:
|
||||||
|
game.get_input()
|
||||||
|
game.update()
|
||||||
|
game.draw()
|
||||||
|
|
||||||
|
game.background()
|
||||||
|
display.set_pen(255)
|
||||||
|
display.text("OOPS!", 40, 35, 200, 10)
|
||||||
|
display.text("Your score: " + str(game.player.score), 50, 150, 180, 2)
|
||||||
|
display.update()
|
||||||
|
|
||||||
|
while not button_b.read():
|
||||||
|
pass
|
||||||
|
|
||||||
|
game.reset()
|
|
@ -0,0 +1,68 @@
|
||||||
|
from picographics import PicoGraphics, DISPLAY_TUFTY_2040
|
||||||
|
|
||||||
|
display = PicoGraphics(display=DISPLAY_TUFTY_2040)
|
||||||
|
WIDTH, HEIGHT = display.get_bounds()
|
||||||
|
display.set_backlight(1.0)
|
||||||
|
|
||||||
|
# Tufty constants
|
||||||
|
A = 7
|
||||||
|
B = 8
|
||||||
|
C = 15
|
||||||
|
UP = 22
|
||||||
|
DOWN = 6
|
||||||
|
LED = 25
|
||||||
|
|
||||||
|
WHITE = display.create_pen(255, 255, 255)
|
||||||
|
BLACK = display.create_pen(0, 0, 0)
|
||||||
|
RED = display.create_pen(200, 0, 0)
|
||||||
|
|
||||||
|
# Read name from file
|
||||||
|
try:
|
||||||
|
file = open("badge.txt", "r")
|
||||||
|
name = file.readline()
|
||||||
|
file.close()
|
||||||
|
except OSError:
|
||||||
|
name = "open name.txt in thonny to edit badge :)"
|
||||||
|
|
||||||
|
|
||||||
|
text_size = 12
|
||||||
|
text_x = 0
|
||||||
|
text_y = 100
|
||||||
|
|
||||||
|
# Clear the screen
|
||||||
|
display.set_pen(WHITE)
|
||||||
|
display.clear()
|
||||||
|
display.update()
|
||||||
|
|
||||||
|
|
||||||
|
# Draws a blank badge
|
||||||
|
def draw_badge():
|
||||||
|
display.set_pen(RED)
|
||||||
|
display.rectangle(0, 0, WIDTH, 60)
|
||||||
|
display.rectangle(0, HEIGHT - 20, WIDTH, 50)
|
||||||
|
display.set_pen(WHITE)
|
||||||
|
display.text("HELLO", 125, 5, 0, 3)
|
||||||
|
display.text("My name is:", 110, 35, 320, 2)
|
||||||
|
display.update()
|
||||||
|
|
||||||
|
|
||||||
|
def calculate_text_size():
|
||||||
|
global text_size
|
||||||
|
name_width = display.measure_text(name, text_size)
|
||||||
|
# Calculate the width of the text in pixels, adjusts according to the screen width
|
||||||
|
while name_width > 290:
|
||||||
|
text_size -= 1
|
||||||
|
name_width = display.measure_text(name, text_size)
|
||||||
|
|
||||||
|
# Calculate the margin to be applied on X
|
||||||
|
margin_x = (WIDTH - name_width) / 2
|
||||||
|
|
||||||
|
return int(margin_x)
|
||||||
|
|
||||||
|
|
||||||
|
draw_badge()
|
||||||
|
text_x = calculate_text_size()
|
||||||
|
|
||||||
|
display.set_pen(BLACK)
|
||||||
|
display.text(name, text_x, text_y, 300, text_size)
|
||||||
|
display.update()
|
|
@ -0,0 +1,46 @@
|
||||||
|
import time
|
||||||
|
import math
|
||||||
|
from picographics import PicoGraphics, DISPLAY_TUFTY_2040
|
||||||
|
|
||||||
|
display = PicoGraphics(display=DISPLAY_TUFTY_2040)
|
||||||
|
|
||||||
|
display.set_backlight(1.0)
|
||||||
|
|
||||||
|
WHITE = display.create_pen(255, 255, 255)
|
||||||
|
BLACK = display.create_pen(0, 0, 0)
|
||||||
|
|
||||||
|
# Reads name from file, and then closes the file.
|
||||||
|
try:
|
||||||
|
file = open("message.txt", "r")
|
||||||
|
message = file.readline()
|
||||||
|
file.close()
|
||||||
|
except OSError:
|
||||||
|
message = "CREATE MESSAGE.TXT IN THONNY :)"
|
||||||
|
|
||||||
|
message_length = display.measure_text(message, 10)
|
||||||
|
|
||||||
|
while True:
|
||||||
|
t = 0 # counter
|
||||||
|
x = 320 # Starting position of message, begins just off screen.
|
||||||
|
offset = 10
|
||||||
|
|
||||||
|
# How many loops it will take to scroll the whole message plus a little extra margin.
|
||||||
|
scroll = (message_length / offset) + 30
|
||||||
|
|
||||||
|
while t < scroll:
|
||||||
|
step = t + t
|
||||||
|
y = int(80 + math.sin(step / 5) * 30)
|
||||||
|
h = 100 + math.sin(step / 5) * 100
|
||||||
|
|
||||||
|
x -= offset
|
||||||
|
|
||||||
|
display.set_pen(WHITE)
|
||||||
|
display.clear()
|
||||||
|
|
||||||
|
display.set_pen(BLACK)
|
||||||
|
display.text(message, x, y, message_length, 10)
|
||||||
|
display.update()
|
||||||
|
|
||||||
|
time.sleep(0.02)
|
||||||
|
|
||||||
|
t += 1
|
|
@ -0,0 +1,89 @@
|
||||||
|
import time
|
||||||
|
from pimoroni import Button
|
||||||
|
from picographics import PicoGraphics, DISPLAY_TUFTY_2040
|
||||||
|
|
||||||
|
display = PicoGraphics(display=DISPLAY_TUFTY_2040)
|
||||||
|
|
||||||
|
# Tufty constants
|
||||||
|
A = 7
|
||||||
|
B = 8
|
||||||
|
C = 15
|
||||||
|
UP = 22
|
||||||
|
DOWN = 6
|
||||||
|
LED = 25
|
||||||
|
|
||||||
|
WIDTH, HEIGHT = display.get_bounds()
|
||||||
|
display.set_backlight(1.0)
|
||||||
|
|
||||||
|
# Buttons
|
||||||
|
button_a = Button(7, invert=False)
|
||||||
|
button_b = Button(8, invert=False)
|
||||||
|
button_c = Button(9, invert=False)
|
||||||
|
button_up = Button(22, invert=False)
|
||||||
|
button_down = Button(6, invert=False)
|
||||||
|
|
||||||
|
# Pens
|
||||||
|
WHITE = display.create_pen(255, 255, 255)
|
||||||
|
BLACK = display.create_pen(0, 0, 0)
|
||||||
|
RED = display.create_pen(200, 0, 0)
|
||||||
|
YELLOW = display.create_pen(255, 215, 0)
|
||||||
|
|
||||||
|
|
||||||
|
def draw_area():
|
||||||
|
display.set_pen(RED)
|
||||||
|
display.clear()
|
||||||
|
|
||||||
|
display.set_pen(YELLOW)
|
||||||
|
display.text("Sketchy-Sketch", 90, 5, 0, 2)
|
||||||
|
display.set_pen(WHITE)
|
||||||
|
display.circle(55, 215, 15)
|
||||||
|
display.circle(260, 215, 15)
|
||||||
|
display.rectangle(10, 25, 300, 170)
|
||||||
|
display.update()
|
||||||
|
|
||||||
|
|
||||||
|
position_x = 15
|
||||||
|
position_y = 30
|
||||||
|
|
||||||
|
last_x = 15
|
||||||
|
last_y = 30
|
||||||
|
|
||||||
|
draw_area()
|
||||||
|
|
||||||
|
while True:
|
||||||
|
display.set_pen(0)
|
||||||
|
|
||||||
|
if button_c.raw():
|
||||||
|
if position_x < 308:
|
||||||
|
last_x = position_x
|
||||||
|
last_y = position_y
|
||||||
|
position_x += 2
|
||||||
|
|
||||||
|
if button_a.raw():
|
||||||
|
if position_x > 12:
|
||||||
|
last_x = position_x
|
||||||
|
last_y = position_y
|
||||||
|
position_x -= 2
|
||||||
|
|
||||||
|
if button_up.raw():
|
||||||
|
if position_y > 26:
|
||||||
|
last_x = position_x
|
||||||
|
last_y = position_y
|
||||||
|
position_y -= 2
|
||||||
|
|
||||||
|
if button_down.raw():
|
||||||
|
if position_y < 193:
|
||||||
|
last_x = position_x
|
||||||
|
last_y = position_y
|
||||||
|
position_y += 2
|
||||||
|
|
||||||
|
if button_b.raw():
|
||||||
|
draw_area()
|
||||||
|
position_x = 15
|
||||||
|
position_y = 30
|
||||||
|
last_x = 15
|
||||||
|
last_y = 30
|
||||||
|
|
||||||
|
display.line(last_x, last_y, position_x, position_y)
|
||||||
|
display.update()
|
||||||
|
time.sleep(0.01)
|
|
@ -0,0 +1,48 @@
|
||||||
|
import math
|
||||||
|
import time
|
||||||
|
from picographics import PicoGraphics, DISPLAY_TUFTY_2040
|
||||||
|
|
||||||
|
display = PicoGraphics(display=DISPLAY_TUFTY_2040)
|
||||||
|
|
||||||
|
WIDTH, HEIGHT = 320, 240
|
||||||
|
display.set_backlight(1.0)
|
||||||
|
|
||||||
|
WHITE = display.create_pen(255, 255, 255)
|
||||||
|
BLACK = display.create_pen(0, 0, 0)
|
||||||
|
|
||||||
|
display.set_pen(WHITE)
|
||||||
|
display.clear()
|
||||||
|
display.update()
|
||||||
|
|
||||||
|
message = "HELLO WORLD!"
|
||||||
|
|
||||||
|
|
||||||
|
def calculate_text_size(text):
|
||||||
|
size = 20
|
||||||
|
width = display.measure_text(text, size)
|
||||||
|
while width > 280 and size > 1:
|
||||||
|
size -= 1
|
||||||
|
width = display.measure_text(text, size)
|
||||||
|
|
||||||
|
return size
|
||||||
|
|
||||||
|
|
||||||
|
size = calculate_text_size(message)
|
||||||
|
length = len(message)
|
||||||
|
|
||||||
|
while True:
|
||||||
|
display.set_pen(WHITE)
|
||||||
|
display.clear()
|
||||||
|
display.set_pen(BLACK)
|
||||||
|
|
||||||
|
t = time.ticks_ms() / 10 / size
|
||||||
|
|
||||||
|
left = int((WIDTH - ((length - 1) * size * 6)) / 2)
|
||||||
|
top = 120 - int((size * 6) / 2)
|
||||||
|
|
||||||
|
for i in range(length):
|
||||||
|
step = t + i
|
||||||
|
y = top - math.sin(step / length * math.pi) * 10
|
||||||
|
display.text(message[i], left + (i * size * 6), int(y), 0, size)
|
||||||
|
|
||||||
|
display.update()
|
Ładowanie…
Reference in New Issue