Skip to content

Commit b6c228f

Browse files
authored
Merge pull request #88 from jposada202020/including_animation_class
creating_animation_class
2 parents ea1f0de + 6ac8116 commit b6c228f

File tree

3 files changed

+272
-252
lines changed

3 files changed

+272
-252
lines changed

adafruit_ht16k33/animations.py

Lines changed: 254 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,254 @@
1+
# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
2+
# SPDX-License-Identifier: MIT
3+
4+
5+
"""
6+
`adafruit_ht16k33.animations`
7+
==============================
8+
9+
* Authors: ladyada
10+
11+
Test script for display animations on an HT16K33 with alphanumeric display
12+
13+
The display must be initialized with auto_write=False.
14+
15+
"""
16+
17+
from time import sleep
18+
19+
N = 16384
20+
M = 8192
21+
L = 4096
22+
K = 2048
23+
J = 1024
24+
I = 512
25+
H = 256
26+
G2 = 128
27+
G1 = 64
28+
F = 32
29+
E = 16
30+
D = 8
31+
C = 4
32+
B = 2
33+
A = 1
34+
35+
36+
# pylint: disable=invalid-name
37+
38+
39+
class Animation:
40+
"""Animation class for the htk33
41+
Main driver for all alphanumeric display animations (WIP!!!)
42+
43+
:param display: HTK33 Display object
44+
45+
46+
"""
47+
48+
def __init__(self, display):
49+
50+
self._display = display
51+
52+
def animate(self, digits, bitmasks, delay=0.2, auto_write=True):
53+
"""Animate function
54+
55+
56+
:param digits: a list of the digits to write to, in order, like [0, 1, 3]. The digits are
57+
0 to 3 starting at the left most digit.
58+
:param bitmasks: a list of the bitmasks to write, in sequence, to the specified digits.
59+
:param delay: The delay, in seconds (or fractions of), between writing bitmasks to a digit.
60+
:param auto_write: Whether to actually write to the display immediately or not.
61+
62+
63+
"""
64+
65+
if not isinstance(digits, list):
66+
raise ValueError("The first parameter MUST be a list!")
67+
if not isinstance(bitmasks, list):
68+
raise ValueError("The second parameter MUST be a list!")
69+
if delay < 0:
70+
raise ValueError("The delay between frames must be positive!")
71+
for dig in digits:
72+
if not 0 <= dig <= 3:
73+
raise ValueError("Digit value must be an integer in the range: 0-3")
74+
75+
for bits in bitmasks:
76+
if not 0 <= bits <= 0xFFFF:
77+
raise ValueError(
78+
"Bitmask value must be an integer in the range: 0-65535"
79+
)
80+
81+
self._display.set_digit_raw(dig, bits)
82+
83+
if auto_write:
84+
self._display.show()
85+
sleep(delay)
86+
87+
def chase_forward_and_reverse(self, delay=0.2, cycles=5):
88+
"""Chase Forward and Reverse Animation"""
89+
90+
cy = 0
91+
92+
while cy < cycles:
93+
self.animate([0, 1, 2, 3], [A, 0], delay)
94+
self.animate([3], [B, C, D, 0], delay)
95+
self.animate([2, 1, 0], [D, 0], delay)
96+
self.animate([0], [E, F, H, G2, 0], delay)
97+
self.animate([1, 2], [G1, G2, 0], delay)
98+
self.animate([3], [G1, J, A, 0], delay)
99+
self.animate([2, 1], [A, 0], delay)
100+
self.animate([0], [A, F, E, D, 0], delay)
101+
self.animate([1, 2], [D, 0], delay)
102+
self.animate([3], [D, C, B, J, G1, 0], delay)
103+
self.animate([2, 1], [G2, G1, 0], delay)
104+
self.animate([0], [H, 0], delay)
105+
106+
cy += 1
107+
108+
def prelude_to_spinners(self, delay=0.2, cycles=5):
109+
"""Prelude to Spinners Animation"""
110+
111+
cy = 0
112+
auto_write = False
113+
114+
while cy < cycles:
115+
self.animate([1, 2], [A], 0, auto_write)
116+
self._display.show()
117+
sleep(delay)
118+
119+
self.animate([0, 3], [A], 0, auto_write)
120+
self._display.show()
121+
sleep(delay)
122+
123+
self.animate([0], [A + F], 0, auto_write)
124+
self.animate([3], [A + B], 0, auto_write)
125+
self._display.show()
126+
sleep(delay)
127+
128+
self.animate([0], [A + E + F], 0, auto_write)
129+
self.animate([3], [A + B + C], 0, auto_write)
130+
self._display.show()
131+
sleep(delay)
132+
133+
self.animate([0], [A + D + E + F], 0, auto_write)
134+
self.animate([3], [A + B + C + D], 0, auto_write)
135+
self._display.show()
136+
sleep(delay)
137+
138+
self.animate([1], [A + D], 0, auto_write)
139+
self.animate([2], [A + D], 0, auto_write)
140+
self._display.show()
141+
sleep(delay)
142+
143+
self.animate([1], [A + D + M], 0, auto_write)
144+
self.animate([2], [A + D + K], 0, auto_write)
145+
self._display.show()
146+
sleep(delay)
147+
148+
self.animate([1], [A + D + M + H], 0, auto_write)
149+
self.animate([2], [A + D + K + J], 0, auto_write)
150+
self._display.show()
151+
sleep(delay)
152+
153+
self.animate([0], [A + E + F + J + D], 0, auto_write)
154+
self.animate([3], [A + B + C + H + D], 0, auto_write)
155+
self._display.show()
156+
sleep(delay)
157+
158+
self.animate([0], [A + E + F + J + K + D], 0, auto_write)
159+
self.animate([3], [A + B + C + H + M + D], 0, auto_write)
160+
self._display.show()
161+
sleep(delay)
162+
163+
self._display.fill(0)
164+
self._display.show()
165+
sleep(delay)
166+
167+
cy += 1
168+
169+
def spinners(self, delay=0.2, cycles=5):
170+
"""Spinners Animation"""
171+
172+
cy = 0
173+
auto_write = False
174+
175+
while cy < cycles:
176+
self.animate([0], [H + M], 0, auto_write)
177+
self.animate([1], [J + K], 0, auto_write)
178+
self.animate([2], [H + M], 0, auto_write)
179+
self.animate([3], [J + K], 0, auto_write)
180+
self._display.show()
181+
sleep(delay)
182+
183+
self.animate([0], [G1 + G2], 0, auto_write)
184+
self.animate([1], [G1 + G2], 0, auto_write)
185+
self.animate([2], [G1 + G2], 0, auto_write)
186+
self.animate([3], [G1 + G2], 0, auto_write)
187+
self._display.show()
188+
sleep(delay)
189+
190+
self.animate([0], [J + K], 0, auto_write)
191+
self.animate([1], [H + M], 0, auto_write)
192+
self.animate([2], [J + K], 0, auto_write)
193+
self.animate([3], [H + M], 0, auto_write)
194+
self._display.show()
195+
sleep(delay)
196+
197+
cy += 1
198+
199+
self._display.fill(0)
200+
201+
def enclosed_spinners(self, delay=0.2, cycles=5):
202+
"""Enclosed Spinner Animation"""
203+
cy = 0
204+
auto_write = False
205+
206+
while cy < cycles:
207+
self.animate([0], [A + D + E + F + H + M], 0, auto_write)
208+
self.animate([1], [A + D + J + K], 0, auto_write)
209+
self.animate([2], [A + D + H + M], 0, auto_write)
210+
self.animate([3], [A + B + C + D + J + K], 0, auto_write)
211+
self._display.show()
212+
sleep(delay)
213+
214+
self.animate([0], [A + D + E + F + G1 + G2], 0, auto_write)
215+
self.animate([1], [A + D + G1 + G2], 0, auto_write)
216+
self.animate([2], [A + D + G1 + G2], 0, auto_write)
217+
self.animate([3], [A + B + C + D + G1 + G2], 0, auto_write)
218+
self._display.show()
219+
sleep(delay)
220+
221+
self.animate([0], [A + D + E + F + J + K], 0, auto_write)
222+
self.animate([1], [A + D + H + M], 0, auto_write)
223+
self.animate([2], [A + D + J + K], 0, auto_write)
224+
self.animate([3], [A + B + C + D + H + M], 0, auto_write)
225+
self._display.show()
226+
sleep(delay)
227+
228+
cy += 1
229+
230+
self._display.fill(0)
231+
232+
def count_down(self):
233+
"""Countdown Method"""
234+
auto_write = False
235+
numbers = [
236+
[A + B + C + D + G1 + G2 + N],
237+
[A + B + D + E + G1 + G2 + N],
238+
[B + C + N],
239+
]
240+
index = 0
241+
242+
self._display.fill(0)
243+
244+
while index < len(numbers):
245+
self.animate([index], numbers[index], 0, auto_write)
246+
self._display.show()
247+
sleep(1)
248+
self._display.fill(0)
249+
sleep(0.5)
250+
251+
index += 1
252+
253+
sleep(1)
254+
self._display.fill(0)

docs/api.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,6 @@
1212

1313
.. automodule:: adafruit_ht16k33.segments
1414
:members:
15+
16+
.. automodule:: adafruit_ht16k33.animations
17+
:members:

0 commit comments

Comments
 (0)