1
- # fmt: off
2
-
3
1
import analogio
4
2
import microcontroller
5
3
from .is32fl3733 import IS31FL3733
15
13
Matrix .COLS = (C1 , C2 , C3 , C4 , C5 , C6 , C7 , C8 )
16
14
Matrix .ROW2COL = False
17
15
18
-
16
+ # fmt: off
19
17
# ESC 1 2 3 4 5 6 7 8 9 0 - = BACKSPACE
20
18
# TAB Q W E R T Y U I O P [ ] |
21
19
# CAPS A S D F G H J K L ; " ENTER
@@ -62,16 +60,36 @@ def battery_level():
62
60
220 ,200 , 184 , 168 , 152 , 136 , 120 , 104 , 88 , 72 , 56 , 40 , 24 , 4 ,
63
61
6 , 27 , 43 , 59 , 75 , 91 , 107 , 123 , 139 , 155 , 171 , 187 , 214 ,
64
62
210 , 180 , 164 , 148 , 132 , 116 , 100 , 84 , 68 , 52 , 36 , 10 ,
65
- 2 , 22 , 42 , 102 , 162 , 182 , 202 , 222 , 123 , 82
63
+ 2 , 22 , 42 , 102 , 162 , 182 , 202 , 222 ,
64
+ 123 , 82
66
65
))
67
66
68
67
leds_y = bytearray ((
69
68
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
70
69
16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 ,
71
70
32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 ,
72
71
48 , 48 , 48 , 48 , 48 , 48 , 48 , 48 , 48 , 48 , 48 , 48 ,
73
- 64 , 64 , 64 , 64 , 64 , 64 , 64 , 64 , 64 , 64
72
+ 64 , 64 , 64 , 64 , 64 , 64 , 64 , 64 ,
73
+ 64 , 64
74
+ ))
75
+
76
+ angle = bytearray ((
77
+ 180 , 178 , 176 , 173 , 168 , 160 , 146 , 128 , 109 , 96 , 87 , 82 , 79 , 76 ,
78
+ 69 , 71 , 72 , 75 , 79 , 87 , 109 , 146 , 168 , 176 , 180 , 183 , 184 , 186 ,
79
+ 170 , 170 , 170 , 170 , 170 , 170 , 170 , 64 , 64 , 64 , 64 , 64 , 64 ,
80
+ 57 , 54 , 51 , 46 , 36 , 9 , 229 , 213 , 206 , 202 , 200 , 198 ,
81
+ 203 , 205 , 209 , 243 , 40 , 46 , 50 , 52 ,
82
+ 13 , 225
83
+ ))
84
+
85
+ distance = bytearray ((
86
+ 116 , 101 , 86 , 71 , 57 , 45 , 35 , 32 , 35 , 45 , 57 , 71 , 86 , 108 , 109 , 89 , 73 ,
87
+ 58 , 43 , 28 , 17 , 17 , 28 , 43 , 58 , 73 , 89 , 109 , 106 , 85 , 69 , 53 , 37 , 21 , 5 ,
88
+ 11 , 27 , 43 , 59 , 75 , 102 , 99 , 69 , 54 , 39 , 25 , 16 , 20 , 32 , 46 , 62 , 77 , 103 ,
89
+ 114 , 95 , 76 , 33 , 59 , 76 , 95 , 114 ,
90
+ 33 , 43
74
91
))
92
+ # fmt: on
75
93
76
94
77
95
def hsv_to_rgb (h , s , v ):
@@ -82,21 +100,28 @@ def hsv_to_rgb(h, s, v):
82
100
q = (v * (65536 - s * f )) >> 16
83
101
t = (v * (65536 - s * (256 - f ))) >> 16
84
102
85
- if i == 0 : return (v , t , p )
86
- if i == 1 : return (q , v , p )
87
- if i == 2 : return (p , v , t )
88
- if i == 3 : return (p , q , v )
89
- if i == 4 : return (t , p , v )
103
+ if i == 0 :
104
+ return (v , t , p )
105
+ if i == 1 :
106
+ return (q , v , p )
107
+ if i == 2 :
108
+ return (p , v , t )
109
+ if i == 3 :
110
+ return (p , q , v )
111
+ if i == 4 :
112
+ return (t , p , v )
90
113
return (v , p , q )
91
114
92
-
115
+
93
116
def wheel (h ):
94
117
i = (h * 3 ) >> 8
95
118
a = (h * 3 ) & 0xFF
96
119
b = 255 - a
97
120
98
- if i == 0 : return (b , a , 0 )
99
- if i == 1 : return (0 , b , a )
121
+ if i == 0 :
122
+ return (b , a , 0 )
123
+ if i == 1 :
124
+ return (0 , b , a )
100
125
101
126
return (a , 0 , b )
102
127
@@ -109,8 +134,10 @@ def wheel2(h, v):
109
134
a = a * v // 255
110
135
b = b * v // 255
111
136
112
- if i == 0 : return (b , a , 0 )
113
- if i == 1 : return (0 , b , a )
137
+ if i == 0 :
138
+ return (b , a , 0 )
139
+ if i == 1 :
140
+ return (0 , b , a )
114
141
115
142
return (a , 0 , b )
116
143
@@ -127,7 +154,18 @@ def __init__(self):
127
154
self .keys = {}
128
155
self .n = 0
129
156
130
- self .modes = (self .off , self .mono , self .gradient , self .spectrum , self .spectrum_x , self .spectrum_y , self .elapse )
157
+ self .modes = (
158
+ self .off ,
159
+ self .mono ,
160
+ self .gradient ,
161
+ self .spectrum ,
162
+ self .spectrum_x ,
163
+ self .spectrum_y ,
164
+ self .elapse ,
165
+ self .broadcast ,
166
+ self .blackhole ,
167
+ self .pinwheel ,
168
+ )
131
169
self .mode = 6
132
170
self .mode_function = self .modes [self .mode ]
133
171
self .dynamic = True
@@ -212,7 +250,7 @@ def spectrum_x(self):
212
250
self .update ()
213
251
self .n = (n + 1 ) & 0xFF
214
252
return True
215
-
253
+
216
254
def spectrum_y (self ):
217
255
n = self .n
218
256
for i in range (63 ):
@@ -221,11 +259,35 @@ def spectrum_y(self):
221
259
self .update ()
222
260
self .n = (n + 1 ) & 0xFF
223
261
return True
224
-
262
+
263
+ def broadcast (self ):
264
+ n = self .n
265
+ for i in range (63 ):
266
+ self .pixel (i , * wheel ((distance [i ] - n ) & 0xFF ))
267
+ self .update ()
268
+ self .n = (n + 2 ) & 0xFF
269
+ return True
270
+
271
+ def blackhole (self ):
272
+ n = self .n
273
+ for i in range (63 ):
274
+ self .pixel (i , * wheel2 ((distance [i ] + n ) & 0xFF , distance [i ] * 2 - 10 ))
275
+ self .update ()
276
+ self .n = (n + 2 ) & 0xFF
277
+ return True
278
+
279
+ def pinwheel (self ):
280
+ n = self .n
281
+ for i in range (63 ):
282
+ self .pixel (i , * wheel ((angle [i ] + n ) & 0xFF ))
283
+ self .update ()
284
+ self .n = (n + 2 ) & 0xFF
285
+ return True
286
+
225
287
def handle_key (self , key , pressed ):
226
288
if self .enabled and self .mode == 6 :
227
289
self .keys [key ] = 255
228
-
290
+
229
291
def elapse (self ):
230
292
if 0 == len (self .keys ):
231
293
return False
@@ -287,18 +349,18 @@ def next(self):
287
349
if self .mode == 6 :
288
350
self .keys .clear ()
289
351
if self .mode >= 3 :
290
- self .dynamic = True
352
+ self .dynamic = True
291
353
else :
292
354
self .dynamic = False
293
355
self .mode_function ()
294
356
295
357
def set_mode (self , mode ):
296
- self .mode = mode if mode < len (self .modes ) else 0
358
+ self .mode = mode if mode < len (self .modes ) else 0
297
359
self .mode_function = self .modes [self .mode ]
298
360
if self .mode == 6 :
299
361
self .keys .clear ()
300
362
if self .mode >= 3 :
301
- self .dynamic = True
363
+ self .dynamic = True
302
364
else :
303
365
self .dynamic = False
304
366
self .mode_function ()
0 commit comments