Example Programs¶
lines.py¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | """
lines.py
Draws lines and rectangles in random colors at random locations on the
display.
"""
import random
from machine import Pin, SPI
import gc9a01py as gc9a01
def main():
spi = SPI(2, baudrate=60000000, sck=Pin(18), mosi=Pin(23))
tft = gc9a01.GC9A01(
spi,
dc=Pin(21, Pin.OUT),
cs=Pin(13, Pin.OUT),
reset=Pin(26, Pin.OUT),
backlight=Pin(14, Pin.OUT),
rotation=0)
tft.fill(gc9a01.BLACK)
while True:
tft.line(
random.randint(0, tft.width),
random.randint(0, tft.height),
random.randint(0, tft.width),
random.randint(0, tft.height),
gc9a01.color565(
random.getrandbits(8),
random.getrandbits(8),
random.getrandbits(8)
)
)
width = random.randint(0, tft.width // 2)
height = random.randint(0, tft.height // 2)
col = random.randint(0, tft.width - width)
row = random.randint(0, tft.height - height)
tft.fill_rect(
col,
row,
width,
height,
gc9a01.color565(
random.getrandbits(8),
random.getrandbits(8),
random.getrandbits(8)
)
)
main()
|
hello.py¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | """
hello.py
Writes "Hello!" in random colors at random locations on the display
"""
import random
from machine import Pin, SPI
import gc9a01py as gc9a01
# Choose a font
# from fonts import vga1_8x8 as font
# from fonts import vga2_8x8 as font
# from fonts import vga1_8x16 as font
# from fonts import vga2_8x16 as font
# from fonts import vga1_16x16 as font
# from fonts import vga1_bold_16x16 as font
# from fonts import vga2_16x16 as font
# from fonts import vga2_bold_16x16 as font
# from fonts import vga1_16x32 as font
# from fonts import vga1_bold_16x32 as font
# from fonts import vga2_16x32 as font
from fonts import vga2_bold_16x32 as font
def main():
spi = SPI(2, baudrate=60000000, sck=Pin(18), mosi=Pin(23))
tft = gc9a01.GC9A01(
spi,
dc=Pin(21, Pin.OUT),
cs=Pin(13, Pin.OUT),
reset=Pin(26, Pin.OUT),
backlight=Pin(14, Pin.OUT),
rotation=0)
while True:
for rotation in range(8):
tft.rotation(rotation)
tft.fill(0)
col_max = tft.width - font.WIDTH*6
row_max = tft.height - font.HEIGHT
for _ in range(25):
tft.text(
font,
"Hello!",
random.randint(0, col_max),
random.randint(0, row_max),
gc9a01.color565(
random.getrandbits(8),
random.getrandbits(8),
random.getrandbits(8)),
gc9a01.color565(
random.getrandbits(8),
random.getrandbits(8),
random.getrandbits(8))
)
main()
|
chars.py¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | """
chars.py
Pages through all characters of four fonts on the display.
"""
import utime
from machine import Pin, SPI
import gc9a01py as gc9a01
# Choose a few fonts
# from fonts import vga1_8x8 as font
from fonts import vga2_8x8 as font1
# from fonts import vga1_8x16 as font
from fonts import vga2_8x16 as font2
# from fonts import vga1_16x16 as font
# from fonts import vga1_bold_16x16 as font
# from fonts import vga2_16x16 as font
from fonts import vga2_bold_16x16 as font3
# from fonts import vga1_16x32 as font
# from fonts import vga1_bold_16x32 as font
# from fonts import vga2_16x32 as font
from fonts import vga2_bold_16x32 as font4
def main():
spi = SPI(2, baudrate=60000000, sck=Pin(18), mosi=Pin(23))
tft = gc9a01.GC9A01(
spi,
dc=Pin(21, Pin.OUT),
cs=Pin(13, Pin.OUT),
reset=Pin(26, Pin.OUT),
backlight=Pin(14, Pin.OUT),
rotation=0)
while True:
for font in (font1, font2, font3, font4):
tft.fill(gc9a01.BLUE)
line = 0
col = 0
for char in range(font.FIRST, font.LAST):
tft.text(font, chr(char), col, line, gc9a01.WHITE, gc9a01.BLUE)
col += font.WIDTH
if col > tft.width - font.WIDTH:
col = 0
line += font.HEIGHT
if line > tft.height-font.HEIGHT:
utime.sleep(3)
tft.fill(gc9a01.BLUE)
line = 0
col = 0
utime.sleep(3)
main()
|
scroll.py¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | """
scroll.py
Smoothly(ish) scrolls all font characters up the screen on the display.
Only works with fonts with heights that are even multiples of the screen
height, (i.e. 8 or 16 pixels high)
"""
import utime
from machine import Pin, SPI
import gc9a01py as gc9a01
# choose a font
# import vga1_8x8 as font
# import vga2_8x8 as font
# import vga1_8x16 as font
# import vga2_8x16 as font
# import vga1_16x16 as font
# import vga1_bold_16x16 as font
# import vga2_16x16 as font
from fonts import vga2_bold_16x16 as font
def main():
spi = SPI(2, baudrate=60000000, sck=Pin(18), mosi=Pin(23))
tft = gc9a01.GC9A01(
spi,
dc=Pin(21, Pin.OUT),
cs=Pin(13, Pin.OUT),
reset=Pin(26, Pin.OUT),
backlight=Pin(14, Pin.OUT),
rotation=0)
last_line = tft.height - font.HEIGHT
tfa = 0
tfb = 0
tft.vscrdef(tfa, 240, tfb)
tft.fill(gc9a01.BLUE)
scroll = 0
character = 0
while True:
tft.fill_rect(0, scroll, tft.width, 1, gc9a01.BLUE)
if scroll % font.HEIGHT == 0:
tft.text(
font,
'x{:02x} = {:s}'.format(character, chr(character)),
64,
(scroll + last_line) % tft.height,
gc9a01.WHITE,
gc9a01.BLUE)
character = character + 1 if character < 256 else 0
tft.vscsad(scroll+tfa)
scroll += 1
if scroll == tft.height:
scroll = 0
utime.sleep(0.01)
main()
|
toasters.py¶
Flying toasters sprite demo using bitmaps created from spritesheet using ImageMagick’s convert and imgtobitmap.py utility. See the maketoast script in the utils directory for details.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | """
toasters.py
An example using bitmap to draw sprites on the display.
Spritesheet from CircuitPython_Flying_Toasters
https://learn.adafruit.com/circuitpython-sprite-animation-pendant-mario-clouds-flying-toasters
"""
import random
from machine import Pin, SPI
import gc9a01py as gc9a01
import t1, t2, t3, t4, t5
TOASTERS = [t1, t2, t3, t4]
TOAST = [t5]
class toast():
'''
toast class to keep track of a sprites locaton and step
'''
def __init__(self, sprites, x, y):
self.sprites = sprites
self.steps = len(sprites)
self.x = x
self.y = y
self.step = random.randint(0, self.steps-1)
self.speed = random.randint(2, 5)
def move(self):
if self.x <= 0:
self.speed = random.randint(2, 5)
self.x = 240 - 64
self.step += 1
self.step %= self.steps
self.x -= self.speed
def main():
"""
Initialize the display and draw flying toasters and toast
"""
spi = SPI(2, baudrate=60000000, sck=Pin(18), mosi=Pin(23))
tft = gc9a01.GC9A01(
spi,
dc=Pin(21, Pin.OUT),
cs=Pin(13, Pin.OUT),
reset=Pin(26, Pin.OUT),
backlight=Pin(14, Pin.OUT),
rotation=0)
tft.fill(gc9a01.BLACK)
# create toast spites in random positions
sprites = [
toast(TOASTERS, 240-64, 0),
toast(TOAST, 240-64*2, 80),
toast(TOASTERS, 240-64*4, 160)
]
# move and draw sprites
while True:
for man in sprites:
bitmap = man.sprites[man.step]
tft.fill_rect(
man.x+bitmap.WIDTH-man.speed,
man.y,
man.speed,
bitmap.HEIGHT,
gc9a01.BLACK)
man.move()
if man.x > 0:
tft.bitmap(bitmap, man.x, man.y)
else:
tft.fill_rect(
0,
man.y,
bitmap.WIDTH,
bitmap.HEIGHT,
gc9a01.BLACK)
main()
|
Chango.py¶
Test for font2bitmap converter for the GC9A01 display. See the font2bitmap program in the utils directory.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | """
chango.py
Test for font2bitmap converter for the GC9A01 display.
See the font2bitmap program in the utils directory.
"""
from machine import Pin, SPI
import gc9a01py
from truetype import chango_16 as font_16
from truetype import chango_32 as font_32
from truetype import chango_64 as font_64
def main():
# enable display and clear screen
spi = SPI(2, baudrate=60000000, sck=Pin(18), mosi=Pin(23))
tft = gc9a01py.GC9A01(
spi,
dc=Pin(21, Pin.OUT),
cs=Pin(13, Pin.OUT),
reset=Pin(26, Pin.OUT),
backlight=Pin(14, Pin.OUT),
rotation=0)
tft.fill(gc9a01py.BLACK)
row = 0
tft.write(font_16, "abcdefghijklmnopqrstuvwxyz", 0, row)
row += font_16.HEIGHT
tft.write(font_32, "abcdefghijklm", 0, row)
row += font_32.HEIGHT
tft.write(font_32, "nopqrstuvwxy", 0, row)
row += font_32.HEIGHT
tft.write(font_64, "abcdef", 0, row)
row += font_64.HEIGHT
tft.write(font_64, "ghijkl", 0, row)
row += font_64.HEIGHT
main()
|