-
Notifications
You must be signed in to change notification settings - Fork 777
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #2945 from adafruit/newxie
newxie examples
- Loading branch information
Showing
10 changed files
with
1,073 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Empty file.
Large diffs are not rendered by default.
Oops, something went wrong.
Binary file not shown.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,326 @@ | ||
# SPDX-FileCopyrightText: 2025 Liz Clark for Adafruit Industries | ||
# SPDX-FileCopyrightText: Adapted from Phil B.'s 16bit_hello Arduino Code | ||
# | ||
# SPDX-License-Identifier: MIT | ||
|
||
'''Graphics example for the Vertical Newxie TFT''' | ||
|
||
import gc | ||
import math | ||
from random import randint | ||
import time | ||
import displayio | ||
import board | ||
import vectorio | ||
import terminalio | ||
import simpleio | ||
from adafruit_st7789 import ST7789 | ||
from adafruit_bitmap_font import bitmap_font | ||
from adafruit_display_text import label, wrap_text_to_lines | ||
from adafruit_display_shapes.rect import Rect | ||
from adafruit_display_shapes.circle import Circle | ||
from adafruit_display_shapes.roundrect import RoundRect | ||
from adafruit_display_shapes.triangle import Triangle | ||
from adafruit_display_shapes.line import Line | ||
|
||
displayio.release_displays() | ||
|
||
spi = board.SPI() | ||
tft_cs = board.D5 | ||
tft_dc = board.D6 | ||
|
||
display_bus = displayio.FourWire( | ||
spi, command=tft_dc, chip_select=tft_cs, reset=None | ||
) | ||
|
||
display = ST7789(display_bus, rotation=180, width=135, height=240, rowstart=40, colstart=53) | ||
|
||
bitmap = displayio.Bitmap(display.width, display.height, 3) | ||
|
||
red = 0xff0000 | ||
yellow = 0xcccc00 | ||
orange = 0xff5500 | ||
blue = 0x0000ff | ||
pink = 0xff00ff | ||
purple = 0x5500ff | ||
white = 0xffffff | ||
green = 0x00ff00 | ||
aqua = 0x125690 | ||
|
||
palette = displayio.Palette(3) | ||
palette[0] = 0x000000 # black | ||
palette[1] = white | ||
palette[2] = yellow | ||
|
||
palette.make_transparent(0) | ||
|
||
tile_grid = displayio.TileGrid(bitmap, pixel_shader=palette) | ||
|
||
group = displayio.Group() | ||
|
||
def clean_up(group_name): | ||
for _ in range(len(group_name)): | ||
group_name.pop() | ||
gc.collect() | ||
|
||
def show_shapes(): | ||
gc.collect() | ||
cx = int(display.width / 2) | ||
cy = int(display.height / 2) | ||
minor = min(cx, cy) | ||
pad = 5 | ||
size = minor - pad | ||
half = int(size / 2) | ||
rect = Rect(cx - minor, cy - minor, size, size, stroke = 1, fill=red, outline = red) | ||
tri = Triangle(cx + pad, cy - pad, cx + pad + half, cy - minor, | ||
cx + minor - 1, cy - pad, fill=green, outline = green) | ||
circ = Circle(cx - pad - half, cy + pad + half, half, fill=blue, stroke = 1, outline = blue) | ||
rnd = RoundRect(cx + pad, cy + pad, size, size, int(size / 5), stroke = 1, | ||
fill=yellow, outline = yellow) | ||
|
||
group.append(rect) | ||
group.append(tri) | ||
group.append(circ) | ||
group.append(rnd) | ||
rect.fill = None | ||
tri.fill = None | ||
circ.fill = None | ||
rnd.fill = None | ||
|
||
time.sleep(2) | ||
|
||
rect.fill = red | ||
tri.fill = green | ||
circ.fill = blue | ||
rnd.fill = yellow | ||
time.sleep(2) | ||
clean_up(group) | ||
del rect | ||
del tri | ||
del circ | ||
del rnd | ||
gc.collect() | ||
|
||
def sine_chart(): | ||
gc.collect() | ||
cx = int(display.width / 2) | ||
cy = int(display.height / 2) | ||
minor = min(cx, cy) | ||
major = max(cx, cy) | ||
|
||
group.append(Line(cx, 0, cx, display.height, blue)) # v | ||
group.append(Line(0, cy, display.width, cy, blue)) # h | ||
|
||
for i in range(10): | ||
_n = simpleio.map_range(i, 0, 10, 0, major - 1) | ||
n = int(_n) | ||
group.append(Line(cx - n, cy - 5, cx - n, (cy - 5) + 11, blue)) # v | ||
group.append(Line(cx + n, cy - 5, cx + n, (cy - 5) + 11, blue)) # v | ||
group.append(Line(cx - 5, cy - n, (cx - 5) + 11, cy - n, blue)) # h | ||
group.append(Line(cx - 5, cy + n, (cx - 5) + 11, cy + n, blue)) # h | ||
|
||
for x in range(display.width): | ||
y = cy - int(math.sin((x - cx) * 0.05) * float(minor * 0.5)) | ||
bitmap[x, y] = 1 | ||
group.append(tile_grid) | ||
time.sleep(2) | ||
clean_up(group) | ||
|
||
def widget0(): | ||
gc.collect() | ||
data = [31, 42, 36, 58, 67, 88] | ||
num_points = len(data) | ||
|
||
text_area = label.Label(terminalio.FONT, text="Widget Sales", color=white) | ||
text_area.anchor_point = (0.5, 0.0) | ||
text_area.anchored_position = (display.width / 2, 3) | ||
group.append(text_area) | ||
for i in range(11): | ||
_x = simpleio.map_range(i, 0, 10, 0, display.width - 1) | ||
x = int(_x) | ||
group.append(Line(x, 20, x, display.height, blue)) | ||
_y = simpleio.map_range(i, 0, 10, 20, display.height - 1) | ||
y = int(_y) | ||
group.append(Line(0, y, display.width, y, blue)) | ||
prev_x = 0 | ||
_prev_y = simpleio.map_range(data[0], 0, 100, display.height - 1, 20) | ||
prev_y = int(_prev_y) | ||
for i in range(1, num_points): | ||
_new_x = simpleio.map_range(i, 0, num_points - 1, 0, display.width - 1) | ||
new_x = int(_new_x) | ||
_new_y = simpleio.map_range(data[i], 0, 100, display.height - 1, 20) | ||
new_y = int(_new_y) | ||
group.append(Line(prev_x, prev_y, new_x, new_y, aqua)) | ||
prev_x = new_x | ||
prev_y = new_y | ||
|
||
for i in range(num_points): | ||
_x = simpleio.map_range(i, 0, num_points - 1, 0, display.width - 1) | ||
x = int(_x) | ||
_y = simpleio.map_range(data[i], 0, 100, display.height - 1, 20) | ||
y = int(_y) | ||
group.append(Circle(x, y, 5, fill=None, stroke = 2, outline = white)) | ||
|
||
time.sleep(2) | ||
clean_up(group) | ||
|
||
def widget1(): | ||
gc.collect() | ||
data = [31, 42, 36, 58, 67, 88] | ||
num_points = len(data) | ||
bar_width = int(display.width / num_points) - 4 | ||
x_mapped_w = display.width + 2 | ||
h_mapped_h = display.height + 20 | ||
|
||
text_area = label.Label(terminalio.FONT, text="Widget Sales", color=white) | ||
text_area.anchor_point = (0.5, 0.0) | ||
text_area.anchored_position = (display.width / 2, 3) | ||
group.append(text_area) | ||
for i in range(11): | ||
_y = simpleio.map_range(i, 0, 10, 20, display.height - 1) | ||
y = int(_y) | ||
group.append(Line(0, y, display.width, y, blue)) | ||
for i in range(num_points): | ||
_x = simpleio.map_range(i, 0, num_points, 0, x_mapped_w) | ||
x = int(_x) | ||
_height = simpleio.map_range(data[i], 0, 100, h_mapped_h, 0) | ||
height = int(_height) | ||
group.append(vectorio.Rectangle(pixel_shader=palette, width=bar_width, | ||
height=display.height + 1, x=x, y=height, color_index = 2)) | ||
|
||
time.sleep(2) | ||
clean_up(group) | ||
|
||
def text_align(): | ||
gc.collect() | ||
TEXT = "hi!" | ||
|
||
text_area_top_left = label.Label(terminalio.FONT, text=TEXT, color=red) | ||
text_area_top_left.anchor_point = (0.0, 0.0) | ||
text_area_top_left.anchored_position = (0, 0) | ||
|
||
text_area_top_middle = label.Label(terminalio.FONT, text=TEXT, color=orange) | ||
text_area_top_middle.anchor_point = (0.5, 0.0) | ||
text_area_top_middle.anchored_position = (display.width / 2, 0) | ||
|
||
text_area_top_right = label.Label(terminalio.FONT, text=TEXT, color=yellow) | ||
text_area_top_right.anchor_point = (1.0, 0.0) | ||
text_area_top_right.anchored_position = (display.width, 0) | ||
|
||
text_area_middle_left = label.Label(terminalio.FONT, text=TEXT, color=green) | ||
text_area_middle_left.anchor_point = (0.0, 0.5) | ||
text_area_middle_left.anchored_position = (0, display.height / 2) | ||
|
||
text_area_middle_middle = label.Label(terminalio.FONT, text=TEXT, color=aqua) | ||
text_area_middle_middle.anchor_point = (0.5, 0.5) | ||
text_area_middle_middle.anchored_position = (display.width / 2, display.height / 2) | ||
|
||
text_area_middle_right = label.Label(terminalio.FONT, text=TEXT, color=blue) | ||
text_area_middle_right.anchor_point = (1.0, 0.5) | ||
text_area_middle_right.anchored_position = (display.width, display.height / 2) | ||
|
||
text_area_bottom_left = label.Label(terminalio.FONT, text=TEXT, color=purple) | ||
text_area_bottom_left.anchor_point = (0.0, 1.0) | ||
text_area_bottom_left.anchored_position = (0, display.height) | ||
|
||
text_area_bottom_middle = label.Label(terminalio.FONT, text=TEXT, color=pink) | ||
text_area_bottom_middle.anchor_point = (0.5, 1.0) | ||
text_area_bottom_middle.anchored_position = (display.width / 2, display.height) | ||
|
||
text_area_bottom_right = label.Label(terminalio.FONT, text=TEXT, color=white) | ||
text_area_bottom_right.anchor_point = (1.0, 1.0) | ||
text_area_bottom_right.anchored_position = (display.width, display.height) | ||
|
||
group.append(text_area_top_middle) | ||
group.append(text_area_top_left) | ||
group.append(text_area_top_right) | ||
group.append(text_area_middle_middle) | ||
group.append(text_area_middle_left) | ||
group.append(text_area_middle_right) | ||
group.append(text_area_bottom_middle) | ||
group.append(text_area_bottom_left) | ||
group.append(text_area_bottom_right) | ||
|
||
time.sleep(2) | ||
clean_up(group) | ||
|
||
def custom_font(): | ||
gc.collect() | ||
my_font = bitmap_font.load_font("/Helvetica-Bold-16.pcf") | ||
text_sample = "The quick brown fox jumps over the lazy dog." | ||
text_sample = "\n".join(wrap_text_to_lines(text_sample, 15)) | ||
text_area = label.Label(my_font, text="Custom Font", color=white) | ||
text_area.anchor_point = (0.0, 0.0) | ||
text_area.anchored_position = (0, 0) | ||
|
||
sample_text = label.Label(my_font, text=text_sample) | ||
sample_text.anchor_point = (0.5, 0.5) | ||
sample_text.anchored_position = (display.width / 2, display.height / 2) | ||
|
||
group.append(text_area) | ||
group.append(sample_text) | ||
|
||
time.sleep(2) | ||
clean_up(group) | ||
|
||
del my_font | ||
gc.collect() | ||
|
||
def bitmap_example(): | ||
gc.collect() | ||
blinka_bitmap = displayio.OnDiskBitmap("/adabot.bmp") | ||
blinka_grid = displayio.TileGrid(blinka_bitmap, pixel_shader=blinka_bitmap.pixel_shader) | ||
gc.collect() | ||
group.append(blinka_grid) | ||
|
||
time.sleep(2) | ||
clean_up(group) | ||
|
||
del blinka_grid | ||
del blinka_bitmap | ||
gc.collect() | ||
|
||
def sensor_values(): | ||
gc.collect() | ||
text_x = "X: %d" % randint(-25, 25) | ||
text_y = "Y: %d" % randint(-25, 25) | ||
text_z = "Z: %d" % randint(-25, 25) | ||
x_text = label.Label(terminalio.FONT, text=text_x, color=red) | ||
x_text.anchor_point = (0.0, 0.0) | ||
x_text.anchored_position = (2, 0) | ||
y_text = label.Label(terminalio.FONT, text=text_y, color=green) | ||
y_text.anchor_point = (0.0, 0.0) | ||
y_text.anchored_position = (2, 10) | ||
z_text = label.Label(terminalio.FONT, text=text_z, color=blue) | ||
z_text.anchor_point = (0.0, 0.0) | ||
z_text.anchored_position = (2, 20) | ||
group.append(x_text) | ||
group.append(y_text) | ||
group.append(z_text) | ||
|
||
for i in range(40): | ||
if i == 10: | ||
group.scale = 2 | ||
elif i == 20: | ||
group.scale = 3 | ||
elif i == 30: | ||
group.scale = 4 | ||
x_text.text = "X: %d" % randint(-50, 50) | ||
y_text.text = "Y: %d" % randint(-50, 50) | ||
z_text.text = "Z: %d" % randint(-50, 50) | ||
time.sleep(0.1) | ||
time.sleep(0.1) | ||
clean_up(group) | ||
group.scale = 1 | ||
|
||
display.root_group = group | ||
|
||
while True: | ||
show_shapes() | ||
sine_chart() | ||
widget0() | ||
widget1() | ||
text_align() | ||
custom_font() | ||
bitmap_example() | ||
sensor_values() |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.