Simple test¶
Ensure your device works with this simple test.
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 | # SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT
import board
import displayio
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
from adafruit_display_shapes.polygon import Polygon
# Make the display context
splash = displayio.Group()
board.DISPLAY.show(splash)
# Make a background color fill
color_bitmap = displayio.Bitmap(320, 240, 1)
color_palette = displayio.Palette(1)
color_palette[0] = 0xFFFFFF
bg_sprite = displayio.TileGrid(color_bitmap, x=0, y=0, pixel_shader=color_palette)
splash.append(bg_sprite)
##########################################################################
splash.append(Line(220, 130, 270, 210, 0xFF0000))
splash.append(Line(270, 210, 220, 210, 0xFF0000))
splash.append(Line(220, 210, 270, 130, 0xFF0000))
splash.append(Line(270, 130, 220, 130, 0xFF0000))
# Draw a blue star
polygon = Polygon(
[
(255, 40),
(262, 62),
(285, 62),
(265, 76),
(275, 100),
(255, 84),
(235, 100),
(245, 76),
(225, 62),
(248, 62),
],
outline=0x0000FF,
)
splash.append(polygon)
triangle = Triangle(170, 50, 120, 140, 210, 160, fill=0x00FF00, outline=0xFF00FF)
splash.append(triangle)
rect = Rect(80, 20, 41, 41, fill=0x0)
splash.append(rect)
circle = Circle(100, 100, 20, fill=0x00FF00, outline=0xFF00FF)
splash.append(circle)
rect2 = Rect(50, 100, 61, 81, outline=0x0, stroke=3)
splash.append(rect2)
roundrect = RoundRect(10, 10, 61, 81, 10, fill=0x0, outline=0xFF00FF, stroke=6)
splash.append(roundrect)
while True:
pass
|
Simple test MagTag¶
Simple test with the MagTag.
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 | # SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT
import board
import displayio
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
from adafruit_display_shapes.polygon import Polygon
# use built in display (PyPortal, PyGamer, PyBadge, CLUE, etc.)
# see guide for setting up external displays (TFT / OLED breakouts, RGB matrices, etc.)
# https://learn.adafruit.com/circuitpython-display-support-using-displayio/display-and-display-bus
display = board.DISPLAY
# Make the display context
splash = displayio.Group()
display.show(splash)
# Make a background color fill
color_bitmap = displayio.Bitmap(display.width, display.height, 1)
color_palette = displayio.Palette(1)
color_palette[0] = 0xFFFFFF
bg_sprite = displayio.TileGrid(color_bitmap, x=0, y=0, pixel_shader=color_palette)
splash.append(bg_sprite)
##########################################################################
splash.append(Line(5, 74, 10, 110, 0x000000))
splash.append(Line(15, 74, 20, 110, 0x000000))
splash.append(Line(25, 74, 30, 110, 0x000000))
splash.append(Line(35, 74, 40, 110, 0x000000))
# Draw star
polygon = Polygon(
[
(255, 40),
(262, 62),
(285, 62),
(265, 76),
(275, 100),
(255, 84),
(235, 100),
(245, 76),
(225, 62),
(248, 62),
],
outline=0x000000,
)
splash.append(polygon)
triangle = Triangle(170, 20, 140, 90, 210, 100, fill=0x999999, outline=0x000000)
splash.append(triangle)
rect = Rect(80, 20, 41, 41, fill=0x999999, outline=0x666666)
splash.append(rect)
circle = Circle(100, 100, 20, fill=0xFFFFFF, outline=0x000000)
splash.append(circle)
rect2 = Rect(70, 85, 61, 30, outline=0x0, stroke=3)
splash.append(rect2)
roundrect = RoundRect(10, 10, 61, 51, 10, fill=0x666666, outline=0x000000, stroke=6)
splash.append(roundrect)
display.refresh()
while True:
pass
|
Sparkline Simple Test¶
Simple test with Sparklines
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 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | # SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT
# class of sparklines in CircuitPython
# created by Kevin Matocha - Copyright 2020 (C)
# See the bottom for a code example using the `sparkline` Class.
# # File: display_shapes_sparkline.py
# A sparkline is a scrolling line graph, where any values added to sparkline using
# `add_value` are plotted.
#
# The `sparkline` class creates an element suitable for adding to the display using
# `display.show(mySparkline)`
# or adding to a `displayio.Group` to be displayed.
#
# When creating the sparkline, identify the number of `max_items` that will be
# included in the graph.
# When additional elements are added to the sparkline and the number of items has
# exceeded max_items, any excess values are removed from the left of the graph,
# and new values are added to the right.
# The following is an example that shows the
# setup display
# instance sparklines
# add to the display
# Loop the following steps:
# add new values to sparkline `add_value`
# update the sparklines `update`
import time
import random
import board
import displayio
from adafruit_display_shapes.sparkline import Sparkline
if "DISPLAY" not in dir(board):
# Setup the LCD display with driver
# You may need to change this to match the display driver for the chipset
# used on your display
from adafruit_ili9341 import ILI9341
displayio.release_displays()
# setup the SPI bus
spi = board.SPI()
tft_cs = board.D9 # arbitrary, pin not used
tft_dc = board.D10
tft_backlight = board.D12
tft_reset = board.D11
while not spi.try_lock():
spi.configure(baudrate=32000000)
spi.unlock()
display_bus = displayio.FourWire(
spi,
command=tft_dc,
chip_select=tft_cs,
reset=tft_reset,
baudrate=32000000,
polarity=1,
phase=1,
)
print("spi.frequency: {}".format(spi.frequency))
# Number of pixels in the display
DISPLAY_WIDTH = 320
DISPLAY_HEIGHT = 240
# create the display
display = ILI9341(
display_bus,
width=DISPLAY_WIDTH,
height=DISPLAY_HEIGHT,
rotation=180, # The rotation can be adjusted to match your configuration.
auto_refresh=True,
native_frames_per_second=90,
)
# reset the display to show nothing.
display.show(None)
else:
# built-in display
display = board.DISPLAY
##########################################
# Create background bitmaps and sparklines
##########################################
# Baseline size of the sparkline chart, in pixels.
chart_width = display.width
chart_height = display.height
# sparkline1 uses a vertical y range between 0 to 10 and will contain a
# maximum of 40 items
sparkline1 = Sparkline(
width=chart_width, height=chart_height, max_items=40, y_min=0, y_max=10, x=0, y=0
)
# Create a group to hold the sparkline and append the sparkline into the
# group (my_group)
#
# Note: In cases where display elements will overlap, then the order the elements
# are added to the group will set which is on top. Latter elements are displayed
# on top of former elements.
my_group = displayio.Group()
# add the sparkline into my_group
my_group.append(sparkline1)
# Add my_group (containing the sparkline) to the display
display.show(my_group)
# Start the main loop
while True:
# turn off the auto_refresh of the display while modifying the sparkline
display.auto_refresh = False
# add_value: add a new value to a sparkline
# Note: The y-range for mySparkline1 is set to 0 to 10, so all these random
# values (between 0 and 10) will fit within the visible range of this sparkline
sparkline1.add_value(random.uniform(0, 10))
# turn the display auto_refresh back on
display.auto_refresh = True
# The display seems to be less jittery if a small sleep time is provided
# You can adjust this to see if it has any effect
time.sleep(0.01)
|
Sparkline Ticks Example¶
Example using tick with the Sparkline class
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 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 | # SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT
# class of sparklines in CircuitPython
# created by Kevin Matocha - Copyright 2020 (C)
# See the bottom for a code example using the `sparkline` Class.
# # File: display_shapes_sparkline.py
# A sparkline is a scrolling line graph, where any values added to sparkline
# using `add_value` are plotted.
#
# The `sparkline` class creates an element suitable for adding to the display
# using `display.show(mySparkline)` or adding to a `displayio.Group` to be displayed.
#
# When creating the sparkline, identify the number of `max_items` that will be
# included in the graph.
# When additional elements are added to the sparkline and the number of items
# has exceeded max_items, any excess values are removed from the left of the
# graph, and new values are added to the right.
# The following is an example that shows the
# setup display
# instance sparklines
# add to the display
# Loop the following steps:
# add new values to sparkline `add_value`
# update the sparklines `update`
import random
import time
import board
import displayio
import terminalio
from adafruit_display_text import label
from adafruit_display_shapes.sparkline import Sparkline
from adafruit_display_shapes.line import Line
from adafruit_display_shapes.rect import Rect
if "DISPLAY" not in dir(board):
# Setup the LCD display with driver
# You may need to change this to match the display driver for the chipset
# used on your display
from adafruit_ili9341 import ILI9341
displayio.release_displays()
# setup the SPI bus
spi = board.SPI()
tft_cs = board.D9 # arbitrary, pin not used
tft_dc = board.D10
tft_backlight = board.D12
tft_reset = board.D11
while not spi.try_lock():
spi.configure(baudrate=32000000)
spi.unlock()
display_bus = displayio.FourWire(
spi,
command=tft_dc,
chip_select=tft_cs,
reset=tft_reset,
baudrate=32000000,
polarity=1,
phase=1,
)
print("spi.frequency: {}".format(spi.frequency))
# Number of pixels in the display
DISPLAY_WIDTH = 320
DISPLAY_HEIGHT = 240
# create the display
display = ILI9341(
display_bus,
width=DISPLAY_WIDTH,
height=DISPLAY_HEIGHT,
rotation=180, # The rotation can be adjusted to match your configuration.
auto_refresh=True,
native_frames_per_second=90,
)
# reset the display to show nothing.
display.show(None)
else:
# built-in display
display = board.DISPLAY
##########################################
# Create background bitmaps and sparklines
##########################################
# Baseline size of the sparkline chart, in pixels.
chart_width = display.width - 50
chart_height = display.height - 50
font = terminalio.FONT
line_color = 0xFFFFFF
# Setup the first bitmap and sparkline
# This sparkline has no background bitmap
# mySparkline1 uses a vertical y range between 0 to 10 and will contain a
# maximum of 40 items
sparkline1 = Sparkline(
width=chart_width,
height=chart_height,
max_items=40,
y_min=0,
y_max=10,
x=40,
y=30,
color=line_color,
)
# Label the y-axis range
text_xoffset = -10
text_label1a = label.Label(
font=font, text=str(sparkline1.y_top), color=line_color
) # yTop label
text_label1a.anchor_point = (1, 0.5) # set the anchorpoint at right-center
text_label1a.anchored_position = (
sparkline1.x + text_xoffset,
sparkline1.y,
) # set the text anchored position to the upper right of the graph
text_label1b = label.Label(
font=font, text=str(sparkline1.y_bottom), color=line_color
) # yTop label
text_label1b.anchor_point = (1, 0.5) # set the anchorpoint at right-center
text_label1b.anchored_position = (
sparkline1.x + text_xoffset,
sparkline1.y + chart_height,
) # set the text anchored position to the upper right of the graph
bounding_rectangle = Rect(
sparkline1.x, sparkline1.y, chart_width, chart_height, outline=line_color
)
# Create a group to hold the sparkline, text, rectangle and tickmarks
# append them into the group (my_group)
#
# Note: In cases where display elements will overlap, then the order the
# elements are added to the group will set which is on top. Latter elements
# are displayed on top of former elemtns.
my_group = displayio.Group()
my_group.append(sparkline1)
my_group.append(text_label1a)
my_group.append(text_label1b)
my_group.append(bounding_rectangle)
total_ticks = 10
for i in range(total_ticks + 1):
x_start = sparkline1.x - 5
x_end = sparkline1.x
y_both = int(round(sparkline1.y + (i * (chart_height) / (total_ticks))))
if y_both > sparkline1.y + chart_height - 1:
y_both = sparkline1.y + chart_height - 1
my_group.append(Line(x_start, y_both, x_end, y_both, color=line_color))
# Set the display to show my_group that contains the sparkline and other graphics
display.show(my_group)
# Start the main loop
while True:
# Turn off auto_refresh to prevent partial updates of the screen during updates
# of the sparkline drawing
display.auto_refresh = False
# add_value: add a new value to a sparkline
# Note: The y-range for mySparkline1 is set to 0 to 10, so all these random
# values (between 0 and 10) will fit within the visible range of this sparkline
sparkline1.add_value(random.uniform(0, 10))
# Turn on auto_refresh for the display
display.auto_refresh = True
# The display seems to be less jittery if a small sleep time is provided
# You can adjust this to see if it has any effect
time.sleep(0.01)
|
Sparkline Triple Test¶
reate background bitmaps and sparklines
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 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 | # SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT
# class of sparklines in CircuitPython
# created by Kevin Matocha - Copyright 2020 (C)
# See the bottom for a code example using the `sparkline` Class.
# # File: display_shapes_sparkline.py
# A sparkline is a scrolling line graph, where any values added to sparkline
# using `add_value` are plotted.
#
# The `sparkline` class creates an element suitable for adding to the display
# using `display.show(mySparkline)` or adding to a `displayio.Group` to be displayed.
#
# When creating the sparkline, identify the number of `max_items` that will be
# included in the graph.
# When additional elements are added to the sparkline and the number of items
# has exceeded max_items, any excess values are removed from the left of the
# graph, and new values are added to the right.
# The following is an example that shows the
# setup display
# instance sparklines
# add to the display
# Loop the following steps:
# add new values to sparkline `add_value`
# update the sparklines `update`
import random
import time
import board
import displayio
import terminalio
from adafruit_display_text import label
from adafruit_display_shapes.sparkline import Sparkline
if "DISPLAY" not in dir(board):
# Setup the LCD display with driver
# You may need to change this to match the display driver for the chipset
# used on your display
from adafruit_ili9341 import ILI9341
displayio.release_displays()
# setup the SPI bus
spi = board.SPI()
tft_cs = board.D9 # arbitrary, pin not used
tft_dc = board.D10
tft_backlight = board.D12
tft_reset = board.D11
while not spi.try_lock():
spi.configure(baudrate=32000000)
spi.unlock()
display_bus = displayio.FourWire(
spi,
command=tft_dc,
chip_select=tft_cs,
reset=tft_reset,
baudrate=32000000,
polarity=1,
phase=1,
)
print("spi.frequency: {}".format(spi.frequency))
# Number of pixels in the display
DISPLAY_WIDTH = 320
DISPLAY_HEIGHT = 240
# create the display
display = ILI9341(
display_bus,
width=DISPLAY_WIDTH,
height=DISPLAY_HEIGHT,
rotation=180, # The rotation can be adjusted to match your configuration.
auto_refresh=True,
native_frames_per_second=90,
)
# reset the display to show nothing.
display.show(None)
else:
# built-in display
display = board.DISPLAY
DISPLAY_WIDTH = board.DISPLAY.width
##########################################
# Create background bitmaps and sparklines
##########################################
# Baseline size of the sparkline chart, in pixels.
chart_width = 50
chart_height = 50
font = terminalio.FONT
# Setup the first bitmap and sparkline
# This sparkline has no background bitmap
# sparkline1 uses a vertical y range between -1 to +1.25 and will contain a maximum of 40 items
sparkline1 = Sparkline(
width=chart_width,
height=chart_height,
max_items=40,
y_min=-1,
y_max=1.25,
x=10,
y=10,
)
# Label the y-axis range
text_label1a = label.Label(
font=font, text=str(sparkline1.y_top), color=0xFFFFFF
) # y_top label
text_label1a.anchor_point = (0, 0.5) # set the anchorpoint
text_label1a.anchored_position = (
10 + chart_width,
10,
) # set the text anchored position to the upper right of the graph
text_label1b = label.Label(
font=font, text=str(sparkline1.y_bottom), color=0xFFFFFF
) # y_bottom label
text_label1b.anchor_point = (0, 0.5) # set the anchorpoint
text_label1b.anchored_position = (
10 + chart_width,
10 + chart_height,
) # set the text anchored position to the upper right of the graph
# Setup the second bitmap and sparkline
# sparkline2 uses a vertical y range between 0 to 1, and will contain a
# maximum of 10 items
#
palette2 = displayio.Palette(1) # color palette used for bitmap2 (one color)
palette2[0] = 0x0000FF
bitmap2 = displayio.Bitmap(chart_width * 2, chart_height * 2, 1) # create bitmap2
tilegrid2 = displayio.TileGrid(
bitmap2, pixel_shader=palette2, x=150, y=10
) # Add bitmap2 to tilegrid2
sparkline2 = Sparkline(
width=chart_width * 2,
height=chart_height * 2,
max_items=10,
y_min=0,
y_max=1,
x=150,
y=10,
color=0xFF00FF,
)
# Setup the third bitmap and third sparkline
# sparkline3 contains a maximum of 10 items
# since y_min and y_max are not specified, sparkline3 uses autoranging for both
# the top and bottom of the y-axis.
# Note1: Any unspecified edge limit (y_min or y_max) will autorange that edge based
# on the data in the list.
# Note2: You can read back the current value of the y-axis limits by using
# sparkline3.y_bottom or sparkline3.y_top
palette3 = displayio.Palette(1) # color palette used for bitmap (one color)
palette3[0] = 0x11FF44
bitmap3 = displayio.Bitmap(DISPLAY_WIDTH - 30, chart_height * 2, 1) # create bitmap3
tilegrid3 = displayio.TileGrid(
bitmap3, pixel_shader=palette3, x=0, y=120
) # Add bitmap3 to tilegrid3
sparkline3 = Sparkline(
width=DISPLAY_WIDTH - 30,
height=chart_height * 2,
max_items=10,
x=0,
y=120,
color=0xFFFFFF,
)
# Initialize the y-axis labels for mySparkline3 with no text
text_label3a = label.Label(font=font, text="", color=0x11FF44) # y_top label
text_label3a.anchor_point = (0, 0.5) # set the anchorpoint
text_label3a.anchored_position = (
sparkline3.width,
120,
) # set the text anchored position to the upper right of the graph
text_label3b = label.Label(font=font, text="", color=0x11FF44) # y_bottom label
text_label3b.anchor_point = (0, 0.5) # set the anchorpoint
text_label3b.anchored_position = (
sparkline3.width,
120 + sparkline3.height,
) # set the text anchored position to the upper right of the graph
# Create a group to hold the three bitmap TileGrids and the three sparklines and
# append them into the group (my_group)
#
# Note: In cases where display elements will overlap, then the order the elements
# are added to the group will set which is on top. Latter elements are displayed
# on top of former elements.
my_group = displayio.Group()
my_group.append(sparkline1)
my_group.append(text_label1a)
my_group.append(text_label1b)
my_group.append(tilegrid2)
my_group.append(sparkline2)
my_group.append(tilegrid3)
my_group.append(sparkline3)
my_group.append(text_label3a)
my_group.append(text_label3b)
# Set the display to show my_group that contains all the bitmap TileGrids and
# sparklines
display.show(my_group)
i = 0 # This is a counter for changing the random values for mySparkline3
# Start the main loop
while True:
# Turn off auto_refresh to prevent partial updates of the screen during updates
# of the sparklines
display.auto_refresh = False
# add_value: add a new value to a sparkline
# Note: The y-range for sparkline1 is set to -1 to 1.25, so all these random
# values (between 0 and 1) will fit within the visible range of this sparkline
sparkline1.add_value(random.uniform(0, 1))
# Note: For sparkline2, the y-axis range is set from 0 to 1.
# With the random values set between -1 and +2, the values will sometimes
# be out of the y-range. This example shows how the fixed y-range (0 to 1)
# will "clip" values (it will not display them) that are above or below the
# y-range.
sparkline2.add_value(random.uniform(-1, 2))
# sparkline3 is set autoranging for both the top and bottom of the Y-axis
# In this example, for 15 values, this adds points in the range from 0 to 1.
# Then, for the next 15 values, it adds points in the range of 0 to 10.
# This is to highlight the autoranging of the y-axis.
# Notice how the y-axis labels show that the y-scale is changing.
#
# An exercise for the reader: You can set only one or the other sparkline axis
# to autoranging by setting its value to None.
if i < 15:
sparkline3.add_value(random.uniform(0, 1))
else:
sparkline3.add_value(random.uniform(0, 10))
text_label3a.text = str(sparkline3.y_top)
text_label3b.text = str(sparkline3.y_bottom)
i += 1 # increment the counter
if i > 30: # After 30 times through the loop, reset the counter
i = 0
# Turn on auto_refresh for the display
display.auto_refresh = True
# The display seems to be less jittery if a small sleep time is provided
# You can adjust this to see if it has any effect
time.sleep(0.01)
|
Circle Animation¶
Example showing the features of the new Circle setter
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 | # SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT
"""
This is an animation to demonstrate the use of Circle Setter Attribute.
"""
import time
import gc
import board
import displayio
from adafruit_display_shapes.circle import Circle
# use built in display (MagTag, PyPortal, PyGamer, PyBadge, CLUE, etc.)
# see guide for setting up external displays (TFT / OLED breakouts, RGB matrices, etc.)
# https://learn.adafruit.com/circuitpython-display-support-using-displayio/display-and-display-bus
display = board.DISPLAY
# Make the display context
main_group = displayio.Group()
# Make a background color fill
color_bitmap = displayio.Bitmap(display.width, display.height, 1)
color_palette = displayio.Palette(1)
color_palette[0] = 0xFFFFFF
bg_sprite = displayio.TileGrid(color_bitmap, pixel_shader=color_palette, x=0, y=0)
main_group.append(bg_sprite)
# Setting up the Circle starting position
posx = 50
posy = 50
# Define Circle characteristics
circle_radius = 20
circle = Circle(posx, posy, circle_radius, fill=0x00FF00, outline=0xFF00FF)
main_group.append(circle)
# Define Circle Animation Steps
delta_x = 2
delta_y = 2
# Showing the items on the screen
display.show(main_group)
while True:
if circle.y + circle_radius >= display.height - circle_radius:
delta_y = -1
if circle.x + circle_radius >= display.width - circle_radius:
delta_x = -1
if circle.x - circle_radius <= 0 - circle_radius:
delta_x = 1
if circle.y - circle_radius <= 0 - circle_radius:
delta_y = 1
circle.x = circle.x + delta_x
circle.y = circle.y + delta_y
time.sleep(0.02)
gc.collect()
|