├── README.md
├── gerber
├── Gerber_BoardOutline.GKO
├── Gerber_BottomLayer.GBL
├── Gerber_BottomSolderMaskLayer.GBS
├── Gerber_Drill_NPTH.DRL
├── Gerber_Drill_PTH.DRL
├── Gerber_TopLayer.GTL
├── Gerber_TopPasteMaskLayer.GTP
├── Gerber_TopSilkLayer.GTO
├── Gerber_TopSolderMaskLayer.GTS
└── ReadOnly.Mechanical
├── images
├── pcb.png
├── pic1.webp
├── pic2.webp
├── test.jpeg
└── ui.jpeg
└── src
├── ESP_POV.ino
├── EspTLC5947.cpp
├── EspTLC5947.h
├── FixedPointsMath.cpp
├── FixedPointsMath.h
├── KeyEvent.cpp
├── KeyEvent.h
├── common.h
├── data
├── index.html
└── index_static.html
├── display.cpp
├── display.h
├── font5x7.h
├── game.cpp
├── game.h
├── msgQueue.cpp
└── msgQueue.h
/README.md:
--------------------------------------------------------------------------------
1 | Wi-Fi POV LED Display Based on ESP8266
2 | ======================================
3 |
4 | [中文](#zh_CN)/English
5 |
6 | This is a POV LED Display that supports display *any* images
7 | uploaded from a smartphone via Wi-Fi connnection.
8 |
9 | To use it, turn on the device power and connect to the new
10 | Wi-Fi hotspot named "ESP POV Display"(configurable), and press
11 | the `Open Image` button and `Upload`.
12 |
13 | 
14 | 
15 | 
16 |
17 | Dependencies:
18 |
19 | * Arduino Core for ESP8266 > v1.8
20 | * FixedPoints Library for Arduino
21 |
22 | Hardware Design (Try to design one yourself):
23 |
24 | https://oshwhub.com/yiheng/ju-yu-wang-kong-zhi-di-xuan-zhuailed
25 |
26 | Test Video:
27 |
28 | https://www.bilibili.com/video/av75754031/
29 |
30 |
基于ESP8266的Wi-Fi控制旋转LED显示器
31 |
32 | 基于ESP8266的WiFi旋转LED显示器,支持Wifi传图。
33 |
34 | 依赖项:
35 |
36 | * Arduino Core for ESP8266 > v1.8
37 | * FixedPoints 库
38 |
39 | 使用方法及硬件指南详见:[OSHWHub](https://oshwhub.com/yiheng/ju-yu-wang-kong-zhi-di-xuan-zhuailed)
40 |
41 | 测试视频
42 |
43 | https://www.bilibili.com/video/av75754031/
44 |
--------------------------------------------------------------------------------
/gerber/Gerber_BoardOutline.GKO:
--------------------------------------------------------------------------------
1 | G04 Layer: BoardOutline*
2 | G04 EasyEDA v6.3.43, 2020-06-07T13:11:06+08:00*
3 | G04 57be81840bc34c5ebe362b8f785087f4,10*
4 | G04 Gerber Generator version 0.2*
5 | G04 Scale: 100 percent, Rotated: No, Reflected: No *
6 | G04 Dimensions in inches *
7 | G04 leading zeros omitted , absolute positions ,2 integer and 4 decimal *
8 | %FSLAX24Y24*%
9 | %MOIN*%
10 | G90*
11 | G70D02*
12 |
13 | %ADD10C,0.010000*%
14 | G54D10*
15 | G01X0Y71500D02*
16 | G01X13000Y71500D01*
17 | G01X13000Y41500D01*
18 | G01X12000Y41500D01*
19 | G01X12000Y38500D01*
20 | G01X13000Y38500D01*
21 | G01X13000Y37500D01*
22 | G01X10500Y35000D01*
23 | G01X10500Y3000D01*
24 | G01X7500Y0D01*
25 | G01X5500Y0D01*
26 | G01X2500Y3000D01*
27 | G01X2500Y35000D01*
28 | G01X0Y37500D01*
29 | G01X0Y38500D01*
30 | G01X1000Y38500D01*
31 | G01X1000Y41500D01*
32 | G01X0Y41500D01*
33 | G01X0Y71500D01*
34 |
35 | %LPD*%
36 | M00*
37 | M02*
38 |
--------------------------------------------------------------------------------
/gerber/Gerber_BottomLayer.GBL:
--------------------------------------------------------------------------------
1 | G04 Layer: BottomLayer*
2 | G04 EasyEDA v6.3.43, 2020-06-07T13:11:06+08:00*
3 | G04 57be81840bc34c5ebe362b8f785087f4,10*
4 | G04 Gerber Generator version 0.2*
5 | G04 Scale: 100 percent, Rotated: No, Reflected: No *
6 | G04 Dimensions in inches *
7 | G04 leading zeros omitted , absolute positions ,2 integer and 4 decimal *
8 | %FSLAX24Y24*%
9 | %MOIN*%
10 | G90*
11 | G70D02*
12 |
13 | %ADD10C,0.010000*%
14 | %ADD11C,0.020000*%
15 | %ADD13C,0.009500*%
16 | %ADD14C,0.009800*%
17 | %ADD16C,0.009900*%
18 | %ADD18C,0.024400*%
19 | %ADD30C,0.059060*%
20 | %ADD31C,0.039370*%
21 |
22 | %LPD*%
23 | G54D10*
24 | G01X4200Y63300D02*
25 | G01X4200Y61780D01*
26 | G01X3019Y60600D01*
27 | G01X3019Y57200D01*
28 | G01X2780Y56959D01*
29 | G01X4460Y63560D02*
30 | G01X4459Y63559D01*
31 | G01X3500Y63559D01*
32 | G54D11*
33 | G01X7780Y65444D02*
34 | G01X3940Y65444D01*
35 | G54D10*
36 | G01X8600Y63300D02*
37 | G01X8600Y64540D01*
38 | G01X8059Y65080D01*
39 | G01X8059Y67559D01*
40 | G01X9050Y68550D01*
41 | G54D13*
42 | G01X10259Y44440D02*
43 | G01X10540Y44159D01*
44 | G01X10100Y44280D02*
45 | G01X10300Y44080D01*
46 | G01X10300Y43619D01*
47 | G01X10319Y43619D01*
48 | G01X10419Y43519D01*
49 | G01X10419Y42080D01*
50 | G01X10580Y41919D01*
51 | G01X10580Y41640D01*
52 | G01X10659Y41559D01*
53 | G01X10659Y41319D01*
54 | G01X10500Y41159D01*
55 | G01X10500Y38719D01*
56 | G01X9100Y37319D01*
57 | G01X9100Y16119D01*
58 | G01X8415Y15436D01*
59 | G01X8415Y11155D01*
60 | G01X7890Y10630D01*
61 | G01X7890Y4390D01*
62 | G01X7180Y3680D01*
63 | G01X9940Y44240D02*
64 | G01X9940Y44200D01*
65 | G01X10140Y44000D01*
66 | G01X10140Y43540D01*
67 | G01X10159Y43540D01*
68 | G01X10259Y43440D01*
69 | G01X10259Y42000D01*
70 | G01X10419Y41840D01*
71 | G01X10419Y41440D01*
72 | G01X8940Y16319D02*
73 | G01X8940Y16200D01*
74 | G01X8259Y15519D01*
75 | G01X8259Y11240D01*
76 | G01X7735Y10715D01*
77 | G01X7735Y5795D01*
78 | G01X6940Y5000D01*
79 | G01X9780Y44319D02*
80 | G01X9780Y44119D01*
81 | G01X9980Y43919D01*
82 | G01X9980Y43459D01*
83 | G01X10000Y43459D01*
84 | G01X10100Y43359D01*
85 | G01X10100Y41919D01*
86 | G01X10219Y41800D01*
87 | G01X10219Y41559D01*
88 | G01X10100Y41440D01*
89 | G01X10100Y41400D01*
90 | G01X10340Y41159D01*
91 | G01X10340Y38800D01*
92 | G01X8940Y37400D01*
93 | G01X8940Y16319D01*
94 | G01X9619Y44280D02*
95 | G01X9619Y44040D01*
96 | G01X9819Y43840D01*
97 | G01X9819Y43400D01*
98 | G01X9940Y43280D01*
99 | G01X9940Y41680D01*
100 | G01X9459Y43959D02*
101 | G01X9659Y43759D01*
102 | G01X9659Y43319D01*
103 | G01X9780Y43200D01*
104 | G01X9780Y41880D01*
105 | G01X9580Y41680D01*
106 | G01X10180Y41080D01*
107 | G01X10180Y38880D01*
108 | G01X8780Y37480D01*
109 | G01X8780Y16280D01*
110 | G01X8100Y15600D01*
111 | G01X8100Y11319D01*
112 | G01X7580Y10800D01*
113 | G01X7580Y6640D01*
114 | G01X7180Y6240D01*
115 | G01X9300Y44280D02*
116 | G01X9300Y43880D01*
117 | G01X9500Y43680D01*
118 | G01X9500Y43240D01*
119 | G01X9619Y43119D01*
120 | G01X9619Y42080D01*
121 | G01X9459Y41919D01*
122 | G01X9139Y44239D02*
123 | G01X9139Y43800D01*
124 | G01X9339Y43600D01*
125 | G01X9339Y43160D01*
126 | G01X9460Y43039D01*
127 | G01X9460Y42280D01*
128 | G01X9100Y41919D01*
129 | G01X10019Y41000D01*
130 | G01X10019Y38960D01*
131 | G01X8619Y37560D01*
132 | G01X8619Y16360D01*
133 | G01X7939Y15680D01*
134 | G01X7939Y11400D01*
135 | G01X6500Y9960D01*
136 | G01X6500Y8840D01*
137 | G01X6180Y8519D01*
138 | G01X8980Y44000D02*
139 | G01X8980Y43719D01*
140 | G01X9180Y43519D01*
141 | G01X9180Y43080D01*
142 | G01X9300Y42959D01*
143 | G01X9300Y42480D01*
144 | G01X9180Y42359D01*
145 | G01X8819Y43919D02*
146 | G01X8819Y43640D01*
147 | G01X9019Y43440D01*
148 | G01X9019Y43000D01*
149 | G01X9100Y42919D01*
150 | G01X9100Y42640D01*
151 | G01X8940Y42480D01*
152 | G01X8940Y41840D01*
153 | G01X9859Y40919D01*
154 | G01X9859Y39040D01*
155 | G01X8459Y37632D01*
156 | G01X8459Y16440D01*
157 | G01X7780Y15759D01*
158 | G01X7780Y11480D01*
159 | G01X6219Y9919D01*
160 | G01X8660Y43560D02*
161 | G01X8859Y43360D01*
162 | G01X8859Y42800D01*
163 | G01X8500Y43559D02*
164 | G01X8500Y43480D01*
165 | G01X8700Y43280D01*
166 | G01X8700Y43038D01*
167 | G01X8619Y42959D01*
168 | G01X8619Y42640D01*
169 | G01X8780Y42480D01*
170 | G01X8780Y41759D01*
171 | G01X9700Y40840D01*
172 | G01X9700Y39119D01*
173 | G01X8296Y37715D01*
174 | G01X8300Y16519D01*
175 | G01X7619Y15840D01*
176 | G01X7619Y11680D01*
177 | G01X7059Y11119D01*
178 | G01X9100Y62800D02*
179 | G01X9180Y62800D01*
180 | G01X9740Y62240D01*
181 | G01X9740Y60119D01*
182 | G01X10100Y59759D01*
183 | G01X10100Y59159D01*
184 | G01X10819Y58440D01*
185 | G01X10819Y47040D01*
186 | G01X10259Y46480D01*
187 | G01X10259Y44440D01*
188 | G01X8780Y62519D02*
189 | G01X9219Y62519D01*
190 | G01X9580Y62159D01*
191 | G01X9580Y60040D01*
192 | G01X9940Y59680D01*
193 | G01X9940Y59080D01*
194 | G01X10659Y58359D01*
195 | G01X10659Y47119D01*
196 | G01X10100Y46559D01*
197 | G01X10100Y44280D01*
198 | G01X9100Y62280D02*
199 | G01X9100Y62240D01*
200 | G01X9419Y61919D01*
201 | G01X9419Y59959D01*
202 | G01X9780Y59600D01*
203 | G01X9780Y59000D01*
204 | G01X10500Y58280D01*
205 | G01X10500Y47200D01*
206 | G01X9940Y46640D01*
207 | G01X9940Y44240D01*
208 | G01X8780Y62000D02*
209 | G01X9109Y62000D01*
210 | G01X9259Y61850D01*
211 | G01X9259Y59880D01*
212 | G01X9619Y59519D01*
213 | G01X9619Y58919D01*
214 | G01X10340Y58200D01*
215 | G01X10340Y47280D01*
216 | G01X9780Y46719D01*
217 | G01X9780Y44319D01*
218 | G01X9019Y61759D02*
219 | G01X9019Y59880D01*
220 | G01X9459Y59440D01*
221 | G01X9459Y58840D01*
222 | G01X10180Y58119D01*
223 | G01X10180Y47359D01*
224 | G01X9619Y46800D01*
225 | G01X9619Y44280D01*
226 | G01X8780Y61519D02*
227 | G01X8780Y61400D01*
228 | G01X8860Y61319D01*
229 | G01X8860Y61200D01*
230 | G01X8780Y61119D01*
231 | G01X8780Y59880D01*
232 | G01X9300Y59360D01*
233 | G01X9300Y58760D01*
234 | G01X10019Y58039D01*
235 | G01X10019Y47439D01*
236 | G01X9451Y46871D01*
237 | G01X9459Y43959D01*
238 | G01X8580Y61240D02*
239 | G01X8580Y59840D01*
240 | G01X9140Y59280D01*
241 | G01X9140Y58680D01*
242 | G01X9859Y57959D01*
243 | G01X9859Y47519D01*
244 | G01X9296Y46955D01*
245 | G01X9300Y44280D01*
246 | G01X8859Y59200D02*
247 | G01X8859Y58719D01*
248 | G01X9700Y57880D01*
249 | G01X9700Y47600D01*
250 | G01X9140Y47040D01*
251 | G01X9140Y44240D01*
252 | G01X8500Y59200D02*
253 | G01X8500Y58840D01*
254 | G01X9540Y57800D01*
255 | G01X9540Y47680D01*
256 | G01X8980Y47119D01*
257 | G01X8980Y44000D01*
258 | G01X8140Y59200D02*
259 | G01X8140Y58959D01*
260 | G01X9380Y57719D01*
261 | G01X9380Y47759D01*
262 | G01X8819Y47200D01*
263 | G01X8819Y43919D01*
264 | G01X7780Y59200D02*
265 | G01X7780Y59080D01*
266 | G01X9219Y57640D01*
267 | G01X9219Y47840D01*
268 | G01X8659Y47280D01*
269 | G01X8659Y43559D01*
270 | G01X7419Y59200D02*
271 | G01X9059Y57559D01*
272 | G01X9059Y47919D01*
273 | G01X8500Y47359D01*
274 | G01X8500Y43559D01*
275 | G54D10*
276 | G01X11300Y63919D02*
277 | G01X11300Y59640D01*
278 | G01X11300Y59559D01*
279 | G54D13*
280 | G01X7339Y21360D02*
281 | G01X7339Y20999D01*
282 | G01X6180Y19840D01*
283 | G01X8340Y43280D02*
284 | G01X8340Y43280D01*
285 | G01X8459Y43159D01*
286 | G01X8180Y43159D02*
287 | G01X8180Y43000D01*
288 | G01X8459Y42719D01*
289 | G01X8459Y42559D01*
290 | G01X8619Y42400D01*
291 | G01X8619Y41680D01*
292 | G01X9540Y40759D01*
293 | G01X9540Y39200D01*
294 | G01X8140Y37796D01*
295 | G01X8140Y16840D01*
296 | G01X7300Y16000D01*
297 | G01X7300Y12519D01*
298 | G01X8019Y42919D02*
299 | G01X8019Y42919D01*
300 | G01X8300Y42640D01*
301 | G01X8300Y42359D01*
302 | G01X8380Y42280D01*
303 | G01X7859Y42919D02*
304 | G01X7859Y42840D01*
305 | G01X8140Y42559D01*
306 | G01X8140Y42159D01*
307 | G01X8380Y41919D01*
308 | G01X8380Y41680D01*
309 | G01X9380Y40680D01*
310 | G01X9380Y39280D01*
311 | G01X7980Y37880D01*
312 | G01X7980Y17080D01*
313 | G01X7219Y16319D01*
314 | G01X7700Y42919D02*
315 | G01X7700Y42760D01*
316 | G01X7939Y42519D01*
317 | G01X7939Y41960D01*
318 | G01X8059Y41840D01*
319 | G01X7539Y42719D02*
320 | G01X7539Y42680D01*
321 | G01X7780Y42439D01*
322 | G01X7780Y41719D01*
323 | G01X7980Y41519D01*
324 | G01X8300Y41519D01*
325 | G01X9219Y40600D01*
326 | G01X9219Y39360D01*
327 | G01X7819Y37960D01*
328 | G01X7819Y17680D01*
329 | G01X6380Y16240D01*
330 | G01X7380Y42719D02*
331 | G01X7380Y42480D01*
332 | G01X7459Y42400D01*
333 | G01X7219Y42719D02*
334 | G01X7219Y42280D01*
335 | G01X7580Y41919D01*
336 | G01X7580Y41680D01*
337 | G01X7900Y41359D01*
338 | G01X8219Y41359D01*
339 | G01X9059Y40519D01*
340 | G01X9059Y39440D01*
341 | G01X7659Y38040D01*
342 | G01X7659Y20000D01*
343 | G01X6180Y18519D01*
344 | G01X7051Y42711D02*
345 | G01X7051Y42188D01*
346 | G01X7071Y42188D01*
347 | G01X7340Y41919D01*
348 | G01X7340Y41919D01*
349 | G01X7380Y41880D01*
350 | G01X7380Y41480D01*
351 | G01X6896Y42719D02*
352 | G01X6896Y42119D01*
353 | G01X7139Y41880D01*
354 | G01X7139Y41319D01*
355 | G01X7260Y41196D01*
356 | G01X8143Y41196D01*
357 | G01X8900Y40439D01*
358 | G01X8900Y39519D01*
359 | G01X7500Y38119D01*
360 | G01X7500Y20800D01*
361 | G01X7259Y20559D01*
362 | G01X6740Y42719D02*
363 | G01X6740Y41840D01*
364 | G01X6819Y41759D01*
365 | G01X8540Y54359D02*
366 | G01X8419Y54359D01*
367 | G01X8332Y54271D01*
368 | G01X8332Y53448D01*
369 | G01X8619Y53159D01*
370 | G01X8619Y50919D01*
371 | G01X8900Y50640D01*
372 | G01X8900Y48000D01*
373 | G01X8336Y47436D01*
374 | G01X8340Y43280D01*
375 | G01X8740Y54640D02*
376 | G01X8419Y54640D01*
377 | G01X8176Y54396D01*
378 | G01X8176Y53363D01*
379 | G01X8459Y53080D01*
380 | G01X8459Y50840D01*
381 | G01X8740Y50559D01*
382 | G01X8740Y48080D01*
383 | G01X8180Y47519D01*
384 | G01X8180Y43159D01*
385 | G01X8540Y54880D02*
386 | G01X8259Y54880D01*
387 | G01X8019Y54640D01*
388 | G01X8019Y53280D01*
389 | G01X8300Y53000D01*
390 | G01X8300Y50759D01*
391 | G01X8580Y50480D01*
392 | G01X8580Y48159D01*
393 | G01X8019Y47600D01*
394 | G01X8019Y42919D01*
395 | G01X7859Y47680D02*
396 | G01X7859Y42919D01*
397 | G01X8740Y55159D02*
398 | G01X7859Y55159D01*
399 | G01X7859Y53200D01*
400 | G01X8140Y52919D01*
401 | G01X8140Y50680D01*
402 | G01X8419Y50400D01*
403 | G01X8419Y48240D01*
404 | G01X7859Y47680D01*
405 | G01X7859Y47680D01*
406 | G01X8540Y55400D02*
407 | G01X7819Y55400D01*
408 | G01X7696Y55276D01*
409 | G01X7696Y53123D01*
410 | G01X7980Y52840D01*
411 | G01X7980Y50600D01*
412 | G01X8259Y50319D01*
413 | G01X8259Y48319D01*
414 | G01X7700Y47759D01*
415 | G01X7700Y42919D01*
416 | G01X8740Y55680D02*
417 | G01X7859Y55680D01*
418 | G01X7540Y55359D01*
419 | G01X7540Y53040D01*
420 | G01X7819Y52759D01*
421 | G01X7819Y50519D01*
422 | G01X8100Y50240D01*
423 | G01X8100Y48400D01*
424 | G01X7540Y47840D01*
425 | G01X7540Y42719D01*
426 | G01X8540Y55919D02*
427 | G01X7859Y55919D01*
428 | G01X7380Y55440D01*
429 | G01X7380Y52959D01*
430 | G01X7659Y52680D01*
431 | G01X7659Y50440D01*
432 | G01X7940Y50159D01*
433 | G01X7940Y48480D01*
434 | G01X7380Y47919D01*
435 | G01X7380Y42719D01*
436 | G01X8740Y56159D02*
437 | G01X7859Y56159D01*
438 | G01X7219Y55519D01*
439 | G01X7219Y52880D01*
440 | G01X7500Y52600D01*
441 | G01X7500Y50359D01*
442 | G01X7780Y50080D01*
443 | G01X7780Y48559D01*
444 | G01X7219Y48000D01*
445 | G01X7219Y42719D01*
446 | G01X8540Y56440D02*
447 | G01X7900Y56440D01*
448 | G01X7059Y55600D01*
449 | G01X7059Y52800D01*
450 | G01X7340Y52519D01*
451 | G01X7340Y50280D01*
452 | G01X7619Y50000D01*
453 | G01X7619Y48640D01*
454 | G01X7055Y48076D01*
455 | G01X7051Y42711D01*
456 | G01X8740Y56680D02*
457 | G01X7900Y56680D01*
458 | G01X6900Y55680D01*
459 | G01X6900Y52719D01*
460 | G01X7180Y52440D01*
461 | G01X7180Y50200D01*
462 | G01X7459Y49919D01*
463 | G01X7459Y48719D01*
464 | G01X6900Y48159D01*
465 | G01X6896Y42715D01*
466 | G01X8540Y56919D02*
467 | G01X7900Y56919D01*
468 | G01X6740Y55759D01*
469 | G01X6740Y52640D01*
470 | G01X7019Y52359D01*
471 | G01X7019Y50119D01*
472 | G01X7300Y49840D01*
473 | G01X7300Y48800D01*
474 | G01X6736Y48236D01*
475 | G01X6740Y42719D01*
476 | G01X8740Y57200D02*
477 | G01X7940Y57200D01*
478 | G01X6578Y55838D01*
479 | G01X6578Y52561D01*
480 | G01X6859Y52280D01*
481 | G01X6859Y50040D01*
482 | G01X7140Y49759D01*
483 | G01X7140Y48880D01*
484 | G01X6580Y48319D01*
485 | G01X6580Y41640D01*
486 | G01X7180Y41040D01*
487 | G01X8059Y41040D01*
488 | G01X8740Y40359D01*
489 | G01X8740Y39600D01*
490 | G01X7340Y38200D01*
491 | G01X7340Y21359D01*
492 | G01X940Y60440D02*
493 | G01X940Y60040D01*
494 | G01X700Y59800D01*
495 | G01X700Y58040D01*
496 | G01X1180Y57559D01*
497 | G01X1180Y47759D01*
498 | G01X2300Y46640D01*
499 | G01X2300Y44159D01*
500 | G01X2780Y43680D01*
501 | G01X2780Y38640D01*
502 | G01X3740Y37680D01*
503 | G01X3740Y25359D01*
504 | G01X5500Y23600D01*
505 | G01X6819Y23600D01*
506 | G01X1059Y59759D02*
507 | G01X1059Y59640D01*
508 | G01X859Y59440D01*
509 | G01X3903Y37755D02*
510 | G01X3900Y25600D01*
511 | G01X5300Y24200D01*
512 | G01X859Y59425D02*
513 | G01X859Y58119D01*
514 | G01X1344Y57636D01*
515 | G01X1344Y52915D01*
516 | G01X1463Y52796D01*
517 | G01X1463Y50515D01*
518 | G01X1659Y50319D01*
519 | G01X1659Y47519D01*
520 | G01X2463Y46715D01*
521 | G01X2463Y44236D01*
522 | G01X2940Y43759D01*
523 | G01X2940Y38719D01*
524 | G01X3900Y37759D01*
525 | G01X4780Y25280D02*
526 | G01X5219Y25280D01*
527 | G01X6140Y26200D01*
528 | G01X6619Y26200D01*
529 | G01X1090Y59069D02*
530 | G01X1090Y58130D01*
531 | G01X1500Y57719D01*
532 | G01X1500Y53000D01*
533 | G01X1619Y52880D01*
534 | G01X1619Y50600D01*
535 | G01X1819Y50400D01*
536 | G01X1819Y47600D01*
537 | G01X2619Y46800D01*
538 | G01X2619Y44319D01*
539 | G01X3100Y43839D01*
540 | G01X3100Y38800D01*
541 | G01X4060Y37839D01*
542 | G01X4060Y27960D01*
543 | G01X5780Y26239D01*
544 | G01X3980Y61080D02*
545 | G01X3180Y60280D01*
546 | G01X3180Y48400D01*
547 | G01X2780Y48000D01*
548 | G01X2780Y44400D01*
549 | G01X3459Y43719D01*
550 | G01X3700Y43719D01*
551 | G01X3700Y43280D01*
552 | G01X3340Y42919D01*
553 | G01X3340Y42319D01*
554 | G01X3259Y42240D01*
555 | G01X3259Y42080D01*
556 | G01X3380Y41959D01*
557 | G01X3580Y41959D01*
558 | G01X3659Y41880D01*
559 | G01X3659Y41200D01*
560 | G01X3259Y40800D01*
561 | G01X3259Y38880D01*
562 | G01X4634Y37505D01*
563 | G01X4634Y36694D01*
564 | G01X4219Y36280D01*
565 | G01X4219Y36040D01*
566 | G01X4300Y35959D01*
567 | G01X4300Y28040D01*
568 | G01X4819Y27519D01*
569 | G01X4819Y27480D01*
570 | G01X4980Y27319D01*
571 | G01X5259Y27319D01*
572 | G01X4460Y36160D02*
573 | G01X4460Y28199D01*
574 | G01X5019Y27640D01*
575 | G01X4019Y60680D02*
576 | G01X3980Y60680D01*
577 | G01X3340Y60040D01*
578 | G01X3340Y48319D01*
579 | G01X2940Y47919D01*
580 | G01X2940Y44480D01*
581 | G01X3500Y43919D01*
582 | G01X3863Y43915D01*
583 | G01X3855Y43196D01*
584 | G01X3540Y42880D01*
585 | G01X3540Y42200D01*
586 | G01X3819Y42800D02*
587 | G01X3700Y42680D01*
588 | G01X3700Y42480D01*
589 | G01X3819Y42359D01*
590 | G01X3819Y41119D01*
591 | G01X3419Y40719D01*
592 | G01X3419Y38959D01*
593 | G01X4790Y37590D01*
594 | G01X4790Y35769D01*
595 | G01X4619Y35600D01*
596 | G01X4619Y28359D01*
597 | G01X5826Y27246D01*
598 | G01X3740Y60000D02*
599 | G01X3740Y59279D01*
600 | G01X3500Y59039D01*
601 | G01X3500Y48239D01*
602 | G01X3100Y47839D01*
603 | G01X3100Y44560D01*
604 | G01X3580Y44080D01*
605 | G01X4019Y44080D01*
606 | G01X4019Y43119D01*
607 | G01X3819Y42919D01*
608 | G01X3819Y42800D01*
609 | G01X5819Y30959D02*
610 | G01X6780Y30959D01*
611 | G01X6819Y31000D01*
612 | G01X3980Y42840D02*
613 | G01X3980Y42600D01*
614 | G01X4180Y43240D02*
615 | G01X4180Y43040D01*
616 | G01X3980Y42840D01*
617 | G01X4340Y43119D02*
618 | G01X4340Y42840D01*
619 | G01X4259Y42759D01*
620 | G54D14*
621 | G01X4500Y42919D02*
622 | G01X4500Y42621D01*
623 | G01X4482Y42621D01*
624 | G01X3980Y42119D01*
625 | G01X3980Y41040D01*
626 | G01X3580Y40640D01*
627 | G01X3580Y39040D01*
628 | G01X4946Y37673D01*
629 | G01X4946Y35686D01*
630 | G01X4780Y35519D01*
631 | G01X4780Y32438D01*
632 | G01X5500Y31719D01*
633 | G01X5500Y29959D01*
634 | G54D13*
635 | G01X3980Y59559D02*
636 | G01X3980Y59280D01*
637 | G01X3659Y58959D01*
638 | G01X3659Y48159D01*
639 | G01X3259Y47759D01*
640 | G01X3259Y44640D01*
641 | G01X3619Y44280D01*
642 | G01X4080Y44280D01*
643 | G01X4080Y44259D01*
644 | G01X4184Y44155D01*
645 | G01X4180Y43240D01*
646 | G01X4259Y59880D02*
647 | G01X4259Y59319D01*
648 | G01X3819Y58880D01*
649 | G01X3819Y48080D01*
650 | G01X3419Y47680D01*
651 | G01X3419Y44719D01*
652 | G01X3700Y44440D01*
653 | G01X4140Y44440D01*
654 | G01X4340Y44240D01*
655 | G01X4340Y43119D01*
656 | G01X4140Y41719D02*
657 | G01X4140Y40959D01*
658 | G01X3740Y40559D01*
659 | G01X3740Y39119D01*
660 | G01X3940Y38919D01*
661 | G01X5104Y37755D01*
662 | G01X5104Y35604D01*
663 | G01X5059Y35559D01*
664 | G01X4940Y35440D01*
665 | G01X4940Y32640D01*
666 | G01X5619Y31959D01*
667 | G01X4140Y41719D02*
668 | G01X4140Y42040D01*
669 | G01X4662Y42562D01*
670 | G01X4659Y42919D01*
671 | G54D16*
672 | G01X4819Y42719D02*
673 | G01X4819Y42480D01*
674 | G01X4419Y42080D01*
675 | G01X4419Y41919D01*
676 | G01X4980Y42559D02*
677 | G01X4980Y42359D01*
678 | G01X4780Y42159D01*
679 | G01X4780Y42159D01*
680 | G01X4659Y42040D01*
681 | G01X4659Y41719D01*
682 | G54D13*
683 | G01X6180Y35040D02*
684 | G01X5619Y35600D01*
685 | G01X5619Y37480D01*
686 | G01X3900Y39200D01*
687 | G01X3900Y40480D01*
688 | G01X4296Y40880D01*
689 | G01X4296Y41240D01*
690 | G01X4540Y41480D01*
691 | G01X4859Y41480D01*
692 | G01X4900Y41519D01*
693 | G01X4900Y42040D01*
694 | G01X5140Y42280D01*
695 | G01X5140Y42640D01*
696 | G01X4980Y41319D02*
697 | G01X4619Y41319D01*
698 | G01X4459Y41159D01*
699 | G01X4448Y40790D01*
700 | G01X4059Y40400D01*
701 | G01X4059Y39280D01*
702 | G01X5780Y37559D01*
703 | G01X5780Y36480D01*
704 | G01X6180Y36080D01*
705 | G54D16*
706 | G01X5300Y42680D02*
707 | G01X5300Y42200D01*
708 | G01X5059Y41959D01*
709 | G01X5059Y41400D01*
710 | G01X4980Y41319D01*
711 | G54D14*
712 | G01X4700Y41040D02*
713 | G01X5100Y41040D01*
714 | G01X5220Y41160D01*
715 | G01X5220Y41880D01*
716 | G01X5460Y42119D01*
717 | G01X5460Y42519D01*
718 | G54D13*
719 | G01X5619Y42159D02*
720 | G01X5619Y42040D01*
721 | G01X5380Y41800D01*
722 | G01X5380Y41000D01*
723 | G01X5180Y40800D01*
724 | G01X4700Y40800D01*
725 | G01X4219Y40319D01*
726 | G01X4219Y39680D01*
727 | G01X4219Y39400D01*
728 | G01X6180Y37440D01*
729 | G54D14*
730 | G01X5540Y41719D02*
731 | G01X5780Y41959D01*
732 | G01X5780Y42359D01*
733 | G01X5540Y40800D02*
734 | G01X5659Y40919D01*
735 | G01X5659Y41440D01*
736 | G01X5540Y41559D01*
737 | G01X5540Y41719D01*
738 | G54D10*
739 | G01X5819Y41640D02*
740 | G01X5819Y41640D01*
741 | G01X5940Y41759D01*
742 | G01X5940Y42240D01*
743 | G01X6814Y38714D02*
744 | G01X6814Y39565D01*
745 | G01X6500Y39880D01*
746 | G54D16*
747 | G01X6100Y42160D02*
748 | G01X6100Y41439D01*
749 | G01X5939Y41280D01*
750 | G01X5939Y40919D01*
751 | G01X5860Y40839D01*
752 | G01X5860Y40159D01*
753 | G01X6180Y39840D01*
754 | G01X6260Y42160D02*
755 | G01X6260Y41040D01*
756 | G01X6180Y40959D01*
757 | G01X6419Y42160D02*
758 | G01X6419Y41359D01*
759 | G01X6819Y40959D01*
760 | G54D14*
761 | G01X4100Y58800D02*
762 | G01X4100Y58680D01*
763 | G01X3980Y58559D01*
764 | G01X3980Y48000D01*
765 | G01X3580Y47600D01*
766 | G01X3580Y44800D01*
767 | G01X3780Y44600D01*
768 | G01X4219Y44600D01*
769 | G01X4500Y44319D01*
770 | G01X4500Y42919D01*
771 | G54D16*
772 | G01X4459Y54400D02*
773 | G01X4540Y54400D01*
774 | G01X4659Y54280D01*
775 | G01X4659Y53559D01*
776 | G01X4340Y53119D01*
777 | G01X4340Y50000D01*
778 | G01X4659Y49680D01*
779 | G01X4659Y42919D01*
780 | G01X4259Y54640D02*
781 | G01X4819Y54640D01*
782 | G01X4819Y53480D01*
783 | G01X4500Y53040D01*
784 | G01X4500Y50080D01*
785 | G01X4819Y49759D01*
786 | G01X4819Y42719D01*
787 | G01X4459Y54880D02*
788 | G01X4980Y54880D01*
789 | G01X4980Y53400D01*
790 | G01X4659Y52959D01*
791 | G01X4659Y50159D01*
792 | G01X4980Y49840D01*
793 | G01X4980Y42559D01*
794 | G01X4259Y55159D02*
795 | G01X5059Y55159D01*
796 | G01X5140Y55119D01*
797 | G01X5140Y53319D01*
798 | G01X4819Y52880D01*
799 | G01X4819Y50240D01*
800 | G01X5140Y49919D01*
801 | G01X5140Y42640D01*
802 | G01X4459Y55400D02*
803 | G01X5059Y55400D01*
804 | G01X5300Y55200D01*
805 | G01X5300Y53240D01*
806 | G01X4980Y52800D01*
807 | G01X4980Y50319D01*
808 | G01X5300Y50000D01*
809 | G01X5300Y42680D01*
810 | G01X4280Y55659D02*
811 | G01X5119Y55659D01*
812 | G01X5459Y55319D01*
813 | G01X5459Y53159D01*
814 | G01X5140Y52719D01*
815 | G01X5140Y50400D01*
816 | G01X5459Y50080D01*
817 | G01X5459Y42519D01*
818 | G01X4459Y55919D02*
819 | G01X5140Y55919D01*
820 | G01X5619Y55440D01*
821 | G01X5619Y53080D01*
822 | G01X5300Y52627D01*
823 | G01X5300Y50480D01*
824 | G01X5619Y50159D01*
825 | G01X5619Y42159D01*
826 | G01X4259Y56159D02*
827 | G01X5140Y56159D01*
828 | G01X5780Y55519D01*
829 | G01X5780Y53000D01*
830 | G01X5459Y52573D01*
831 | G01X5459Y50559D01*
832 | G01X5780Y50240D01*
833 | G01X5780Y42359D01*
834 | G01X5940Y42240D02*
835 | G01X5940Y50319D01*
836 | G01X5659Y50600D01*
837 | G01X5619Y50640D01*
838 | G01X5619Y52480D01*
839 | G01X5940Y52919D01*
840 | G01X5940Y55600D01*
841 | G01X5100Y56440D01*
842 | G01X4459Y56440D01*
843 | G01X6100Y42160D02*
844 | G01X6100Y50400D01*
845 | G01X5780Y50719D01*
846 | G01X5780Y52411D01*
847 | G01X6100Y52800D01*
848 | G01X6100Y55680D01*
849 | G01X5100Y56680D01*
850 | G01X4269Y56680D01*
851 | G01X6259Y42159D02*
852 | G01X6259Y50480D01*
853 | G01X6019Y50719D01*
854 | G01X6019Y50719D01*
855 | G01X5940Y50800D01*
856 | G01X5940Y52328D01*
857 | G01X6259Y52719D01*
858 | G01X6259Y55759D01*
859 | G01X5100Y56919D01*
860 | G01X4459Y56919D01*
861 | G01X4459Y56919D01*
862 | G01X6419Y42159D02*
863 | G01X6419Y50560D01*
864 | G01X6100Y50880D01*
865 | G01X6100Y52200D01*
866 | G01X6419Y52639D01*
867 | G01X6419Y55839D01*
868 | G01X5059Y57200D01*
869 | G01X4280Y57200D01*
870 | G54D10*
871 | G01X6860Y69800D02*
872 | G01X6860Y70599D01*
873 | G01X6859Y70600D01*
874 | G01X2611Y64660D02*
875 | G01X2611Y65861D01*
876 | G01X3300Y66550D01*
877 | G01X5090Y66550D01*
878 | G01X6859Y68319D01*
879 | G01X2611Y64209D02*
880 | G01X2609Y64659D01*
881 | G01X2150Y56800D02*
882 | G01X2150Y56850D01*
883 | G01X2800Y57500D01*
884 | G01X2800Y58000D01*
885 | G01X2753Y58046D01*
886 | G01X2750Y58600D01*
887 | G01X2650Y58700D01*
888 | G01X2650Y62550D01*
889 | G01X3250Y63150D01*
890 | G01X3250Y63559D01*
891 | G01X2619Y64200D01*
892 | G01X2259Y47519D02*
893 | G01X2250Y52950D01*
894 | G01X2900Y53600D01*
895 | G01X2900Y54825D01*
896 | G01X2775Y54950D01*
897 | G01X2300Y54950D01*
898 | G01X2150Y55100D01*
899 | G01X2150Y56800D01*
900 | G01X2450Y64660D02*
901 | G01X2450Y65989D01*
902 | G01X3180Y66719D01*
903 | G01X4859Y66719D01*
904 | G01X6459Y68319D01*
905 | G01X2950Y63300D02*
906 | G01X2950Y63600D01*
907 | G01X2450Y64100D01*
908 | G01X2450Y64669D01*
909 | G01X1950Y57650D02*
910 | G01X1950Y57700D01*
911 | G01X2188Y57938D01*
912 | G01X2190Y58300D01*
913 | G01X2125Y58375D01*
914 | G01X2125Y63000D01*
915 | G01X2188Y63138D01*
916 | G01X2400Y53567D02*
917 | G01X2400Y53900D01*
918 | G01X1950Y54350D01*
919 | G01X2000Y51350D02*
920 | G01X2000Y52950D01*
921 | G01X2400Y53350D01*
922 | G01X2400Y53567D01*
923 | G01X2000Y50700D02*
924 | G01X2000Y51350D01*
925 | G01X2210Y64659D02*
926 | G01X2210Y66410D01*
927 | G01X4400Y68600D01*
928 | G01X8300Y68600D01*
929 | G01X9050Y69350D01*
930 | G01X2659Y53919D02*
931 | G01X2700Y53919D01*
932 | G01X2700Y54650D01*
933 | G01X2650Y54700D01*
934 | G01X2200Y54700D01*
935 | G01X1950Y54950D01*
936 | G01X1950Y56900D01*
937 | G01X2600Y57550D01*
938 | G01X2600Y58000D01*
939 | G01X2550Y58050D01*
940 | G01X2550Y58525D01*
941 | G01X2475Y58600D01*
942 | G01X2475Y62725D01*
943 | G01X2700Y62950D01*
944 | G01X2698Y63560D01*
945 | G01X2210Y64039D01*
946 | G01X2209Y64669D01*
947 | G01X2050Y64659D02*
948 | G01X2050Y66500D01*
949 | G01X4150Y68600D01*
950 | G01X4150Y70150D01*
951 | G01X2350Y57700D02*
952 | G01X2350Y58450D01*
953 | G01X2300Y58500D01*
954 | G01X2300Y62825D01*
955 | G01X2500Y63000D01*
956 | G01X2500Y63500D01*
957 | G01X2050Y63950D01*
958 | G01X2050Y64650D01*
959 | G01X1619Y64659D02*
960 | G01X1619Y67459D01*
961 | G01X2700Y68540D01*
962 | G01X2459Y54319D02*
963 | G01X2344Y54319D01*
964 | G01X1700Y54959D01*
965 | G01X1700Y57919D01*
966 | G01X1619Y57992D01*
967 | G01X1619Y64640D01*
968 | G01X10259Y64619D02*
969 | G01X10259Y65419D01*
970 | G01X11050Y54550D02*
971 | G01X11050Y58900D01*
972 | G01X10750Y59200D01*
973 | G01X10750Y62850D01*
974 | G01X10400Y63200D01*
975 | G01X10259Y63340D01*
976 | G01X10259Y64640D01*
977 | G01X1800Y53100D02*
978 | G01X1800Y53250D01*
979 | G01X2100Y53550D01*
980 | G01X2100Y53850D01*
981 | G01X6500Y51100D02*
982 | G01X6500Y50750D01*
983 | G01X6580Y50680D01*
984 | G01X6580Y50077D01*
985 | G01X6900Y49757D01*
986 | G01X6900Y49000D01*
987 | G01X4140Y58350D02*
988 | G01X4140Y57859D01*
989 | G01X4550Y57450D01*
990 | G01X8800Y63050D02*
991 | G01X8709Y63050D01*
992 | G01X4140Y58359D01*
993 | G01X4459Y63559D02*
994 | G01X6390Y63559D01*
995 | G01X6650Y63300D01*
996 | G01X8600Y63300D01*
997 | G01X4500Y57959D02*
998 | G01X6890Y57959D01*
999 | G01X7150Y57700D01*
1000 | G01X8550Y57700D01*
1001 | G01X1950Y58050D02*
1002 | G01X1950Y63350D01*
1003 | G01X2100Y63500D01*
1004 | G01X10500Y63900D02*
1005 | G01X10500Y63400D01*
1006 | G01X10700Y63200D01*
1007 | G01X10995Y63200D01*
1008 | G01X11000Y63195D01*
1009 | G54D11*
1010 | G01X11000Y64550D02*
1011 | G01X11000Y65900D01*
1012 | G01X10900Y66000D01*
1013 | G01X11000Y59300D02*
1014 | G01X11000Y64550D01*
1015 | G01X11300Y57700D02*
1016 | G01X11300Y59000D01*
1017 | G01X11000Y59300D01*
1018 | G01X10900Y66000D02*
1019 | G01X8940Y66000D01*
1020 | G01X8380Y65440D01*
1021 | G36*
1022 | G01X3746Y45394D02*
1023 | G01X4453Y45394D01*
1024 | G01X4453Y44805D01*
1025 | G01X3746Y44805D01*
1026 | G01X3746Y45394D01*
1027 | G37*
1028 | G36*
1029 | G01X6750Y51296D02*
1030 | G01X6750Y50903D01*
1031 | G01X6250Y50903D01*
1032 | G01X6250Y51296D01*
1033 | G01X6750Y51296D01*
1034 | G37*
1035 | G54D18*
1036 | G01X10900Y66000D03*
1037 | G01X8380Y65440D03*
1038 | G01X11300Y57700D03*
1039 | G01X11000Y59300D03*
1040 | G01X10500Y63900D03*
1041 | G01X1950Y58050D03*
1042 | G01X2100Y63500D03*
1043 | G01X4500Y57959D03*
1044 | G01X8550Y57700D03*
1045 | G01X4459Y63559D03*
1046 | G01X8600Y63300D03*
1047 | G01X8800Y63050D03*
1048 | G01X4550Y57450D03*
1049 | G01X9050Y68550D03*
1050 | G01X4200Y63300D03*
1051 | G01X6900Y49000D03*
1052 | G01X1800Y53100D03*
1053 | G01X2100Y53850D03*
1054 | G01X11050Y54550D03*
1055 | G01X10259Y65419D03*
1056 | G01X2459Y54319D03*
1057 | G01X2700Y68540D03*
1058 | G01X2350Y57700D03*
1059 | G01X4150Y70150D03*
1060 | G01X2659Y53919D03*
1061 | G01X9050Y69350D03*
1062 | G01X2000Y50700D03*
1063 | G01X1950Y54350D03*
1064 | G01X1950Y57650D03*
1065 | G01X2188Y63138D03*
1066 | G01X2950Y63300D03*
1067 | G01X6459Y68319D03*
1068 | G01X6859Y68319D03*
1069 | G01X6859Y69800D03*
1070 | G01X6859Y70600D03*
1071 | G01X4459Y54400D03*
1072 | G01X4259Y54640D03*
1073 | G01X4459Y54880D03*
1074 | G01X4259Y55159D03*
1075 | G01X4280Y57200D03*
1076 | G01X4269Y56680D03*
1077 | G01X4459Y56440D03*
1078 | G01X4259Y56159D03*
1079 | G01X4459Y55919D03*
1080 | G01X4280Y55659D03*
1081 | G01X4459Y55400D03*
1082 | G01X4459Y56919D03*
1083 | G01X4100Y58800D03*
1084 | G01X2259Y47519D03*
1085 | G01X6819Y40959D03*
1086 | G01X6180Y40959D03*
1087 | G01X6180Y39840D03*
1088 | G01X6815Y38715D03*
1089 | G01X6500Y39880D03*
1090 | G01X5819Y41640D03*
1091 | G01X5540Y40800D03*
1092 | G01X6180Y37440D03*
1093 | G01X4700Y41040D03*
1094 | G01X6180Y36080D03*
1095 | G01X6180Y35040D03*
1096 | G01X4659Y41719D03*
1097 | G01X4419Y41919D03*
1098 | G01X5619Y31959D03*
1099 | G01X4259Y59880D03*
1100 | G01X3980Y59559D03*
1101 | G01X4259Y42759D03*
1102 | G01X3980Y42600D03*
1103 | G01X5819Y30959D03*
1104 | G01X6819Y31000D03*
1105 | G01X3740Y60000D03*
1106 | G01X4019Y60680D03*
1107 | G01X5019Y27640D03*
1108 | G01X3540Y42200D03*
1109 | G01X4459Y36159D03*
1110 | G01X3980Y61080D03*
1111 | G01X5259Y27319D03*
1112 | G01X1380Y58280D03*
1113 | G01X1090Y59069D03*
1114 | G01X940Y60440D03*
1115 | G01X5780Y26240D03*
1116 | G01X4780Y25280D03*
1117 | G01X6619Y26200D03*
1118 | G01X1059Y59759D03*
1119 | G01X5300Y24200D03*
1120 | G01X6819Y23600D03*
1121 | G01X8540Y54359D03*
1122 | G01X8740Y54640D03*
1123 | G01X8540Y54880D03*
1124 | G01X8740Y55159D03*
1125 | G01X8540Y55400D03*
1126 | G01X8740Y55680D03*
1127 | G01X8540Y55919D03*
1128 | G01X8740Y56159D03*
1129 | G01X8540Y56440D03*
1130 | G01X8740Y56680D03*
1131 | G01X8540Y56919D03*
1132 | G01X8740Y57200D03*
1133 | G01X6819Y41759D03*
1134 | G01X7259Y20559D03*
1135 | G01X7380Y41480D03*
1136 | G01X6180Y18519D03*
1137 | G01X7459Y42400D03*
1138 | G01X6380Y16240D03*
1139 | G01X8059Y41840D03*
1140 | G01X7219Y16319D03*
1141 | G01X8380Y42280D03*
1142 | G01X7300Y12519D03*
1143 | G01X8459Y43159D03*
1144 | G01X6180Y19840D03*
1145 | G01X11300Y59559D03*
1146 | G01X11300Y63919D03*
1147 | G01X7419Y59200D03*
1148 | G01X7780Y59200D03*
1149 | G01X8140Y59200D03*
1150 | G01X8500Y59200D03*
1151 | G01X8859Y59200D03*
1152 | G01X8580Y61240D03*
1153 | G01X8780Y61519D03*
1154 | G01X9019Y61759D03*
1155 | G01X8780Y62000D03*
1156 | G01X9100Y62280D03*
1157 | G01X9100Y62800D03*
1158 | G01X8780Y62519D03*
1159 | G01X7059Y11119D03*
1160 | G01X8859Y42800D03*
1161 | G01X6219Y9919D03*
1162 | G01X9180Y42359D03*
1163 | G01X6180Y8519D03*
1164 | G01X9459Y41919D03*
1165 | G01X7180Y6240D03*
1166 | G01X9940Y41680D03*
1167 | G01X6940Y5000D03*
1168 | G01X10419Y41440D03*
1169 | G01X7180Y3680D03*
1170 | G01X10540Y44159D03*
1171 | G01X5826Y27246D03*
1172 | G01X5500Y29959D03*
1173 | G01X3940Y65444D03*
1174 | G01X7780Y65444D03*
1175 | G01X3500Y63559D03*
1176 | G01X4900Y66280D03*
1177 | G01X4900Y65759D03*
1178 | G01X5419Y66400D03*
1179 | G01X5419Y66080D03*
1180 | G01X5419Y65759D03*
1181 | G01X4900Y64919D03*
1182 | G01X5419Y65119D03*
1183 | G01X5419Y64719D03*
1184 | G01X3980Y67280D03*
1185 | G01X4259Y67040D03*
1186 | G01X4140Y67880D03*
1187 | G01X4380Y67680D03*
1188 | G01X4900Y67240D03*
1189 | G01X4619Y67440D03*
1190 | G01X5140Y64400D03*
1191 | G01X4819Y64119D03*
1192 | G01X4019Y64040D03*
1193 | G01X4259Y64280D03*
1194 | G01X4540Y64559D03*
1195 | G01X2780Y56959D03*
1196 | G54D30*
1197 | G01X4040Y45887D02*
1198 | G01X4159Y45887D01*
1199 | G01X4040Y46674D02*
1200 | G01X4159Y46674D01*
1201 | G01X4040Y47462D02*
1202 | G01X4159Y47462D01*
1203 | G54D31*
1204 | G01X6553Y51600D02*
1205 | G01X6446Y51600D01*
1206 | G01X6553Y52100D02*
1207 | G01X6446Y52100D01*
1208 | M00*
1209 | M02*
1210 |
--------------------------------------------------------------------------------
/gerber/Gerber_BottomSolderMaskLayer.GBS:
--------------------------------------------------------------------------------
1 | G04 Layer: BottomSolderMaskLayer*
2 | G04 EasyEDA v6.3.43, 2020-06-07T13:11:06+08:00*
3 | G04 57be81840bc34c5ebe362b8f785087f4,10*
4 | G04 Gerber Generator version 0.2*
5 | G04 Scale: 100 percent, Rotated: No, Reflected: No *
6 | G04 Dimensions in inches *
7 | G04 leading zeros omitted , absolute positions ,2 integer and 4 decimal *
8 | %FSLAX24Y24*%
9 | %MOIN*%
10 | G90*
11 | G70D02*
12 |
13 | %ADD37C,0.067060*%
14 | %ADD38C,0.047370*%
15 |
16 | %LPD*%
17 | G54D37*
18 | G01X4040Y45887D02*
19 | G01X4159Y45887D01*
20 | G01X4040Y46674D02*
21 | G01X4159Y46674D01*
22 | G01X4040Y47462D02*
23 | G01X4159Y47462D01*
24 | G54D38*
25 | G01X6553Y51600D02*
26 | G01X6446Y51600D01*
27 | G01X6553Y52100D02*
28 | G01X6446Y52100D01*
29 | G36*
30 | G01X3705Y44765D02*
31 | G01X3705Y45434D01*
32 | G01X4494Y45434D01*
33 | G01X4494Y44765D01*
34 | G01X3705Y44765D01*
35 | G37*
36 | G36*
37 | G01X6209Y50863D02*
38 | G01X6209Y51336D01*
39 | G01X6790Y51336D01*
40 | G01X6790Y50863D01*
41 | G01X6209Y50863D01*
42 | G37*
43 | M00*
44 | M02*
45 |
--------------------------------------------------------------------------------
/gerber/Gerber_Drill_NPTH.DRL:
--------------------------------------------------------------------------------
1 | ;Layer: Drill NPTH
2 | ;EasyEDA v6.3.43, 2020-06-07T13:11:06+08:00
3 | ;57be81840bc34c5ebe362b8f785087f4,,10
4 | ;Gerber Generator version 0.2
5 | M48
6 | INCH,LZ,00.0000
7 | ;Holesize 1 = 0.126 INCH
8 | T01C0.126
9 | %
10 | G05
11 | G90
12 | T01
13 | X+005023Y+040000
14 | X+007976Y+040000
15 | M30
16 |
--------------------------------------------------------------------------------
/gerber/Gerber_Drill_PTH.DRL:
--------------------------------------------------------------------------------
1 | ;Layer: Drill PTH
2 | ;EasyEDA v6.3.43, 2020-06-07T13:11:06+08:00
3 | ;57be81840bc34c5ebe362b8f785087f4,,10
4 | ;Gerber Generator version 0.2
5 | M48
6 | INCH,LZ,00.0000
7 | ;Holesize 1 = 0.012 INCH
8 | T01C0.012
9 | ;Holesize 2 = 0.030 INCH
10 | T02C0.030
11 | ;Holesize 3 = 0.032 INCH
12 | T03C0.032
13 | ;Holesize 4 = 0.032 INCH
14 | T04C0.032
15 | %
16 | G05
17 | G90
18 | T01
19 | X+010900Y+066000
20 | X+008380Y+065440
21 | X+011300Y+057700
22 | X+011000Y+059300
23 | X+010500Y+063900
24 | X+001950Y+058050
25 | X+002100Y+063500
26 | X+004500Y+057959
27 | X+008550Y+057700
28 | X+004459Y+063559
29 | X+008600Y+063300
30 | X+008800Y+063050
31 | X+004550Y+057450
32 | X+009050Y+068550
33 | X+004200Y+063300
34 | X+006900Y+049000
35 | X+001800Y+053100
36 | X+002100Y+053850
37 | X+011050Y+054550
38 | X+010259Y+065419
39 | X+002459Y+054319
40 | X+002700Y+068540
41 | X+002350Y+057700
42 | X+004150Y+070150
43 | X+002659Y+053919
44 | X+009050Y+069350
45 | X+002000Y+050700
46 | X+001950Y+054350
47 | X+001950Y+057650
48 | X+002188Y+063138
49 | X+002950Y+063300
50 | X+006459Y+068319
51 | X+006859Y+068319
52 | X+006859Y+069800
53 | X+006859Y+070600
54 | X+004459Y+054400
55 | X+004259Y+054640
56 | X+004459Y+054880
57 | X+004259Y+055159
58 | X+004280Y+057200
59 | X+004269Y+056680
60 | X+004459Y+056440
61 | X+004259Y+056159
62 | X+004459Y+055919
63 | X+004280Y+055659
64 | X+004459Y+055400
65 | X+004459Y+056919
66 | X+004100Y+058800
67 | X+002259Y+047519
68 | X+006819Y+040959
69 | X+006180Y+040959
70 | X+006180Y+039840
71 | X+006815Y+038715
72 | X+006500Y+039880
73 | X+005819Y+041640
74 | X+005540Y+040800
75 | X+006180Y+037440
76 | X+004700Y+041040
77 | X+006180Y+036080
78 | X+006180Y+035040
79 | X+004659Y+041719
80 | X+004419Y+041919
81 | X+005619Y+031959
82 | X+004259Y+059880
83 | X+003980Y+059559
84 | X+004259Y+042759
85 | X+003980Y+042600
86 | X+005819Y+030959
87 | X+006819Y+031000
88 | X+003740Y+060000
89 | X+004019Y+060680
90 | X+005019Y+027640
91 | X+003540Y+042200
92 | X+004459Y+036159
93 | X+003980Y+061080
94 | X+005259Y+027319
95 | X+001380Y+058280
96 | X+001090Y+059069
97 | X+000940Y+060440
98 | X+005780Y+026240
99 | X+004780Y+025280
100 | X+006619Y+026200
101 | X+001059Y+059759
102 | X+005300Y+024200
103 | X+006819Y+023600
104 | X+008540Y+054359
105 | X+008740Y+054640
106 | X+008540Y+054880
107 | X+008740Y+055159
108 | X+008540Y+055400
109 | X+008740Y+055680
110 | X+008540Y+055919
111 | X+008740Y+056159
112 | X+008540Y+056440
113 | X+008740Y+056680
114 | X+008540Y+056919
115 | X+008740Y+057200
116 | X+006819Y+041759
117 | X+007259Y+020559
118 | X+007380Y+041480
119 | X+006180Y+018519
120 | X+007459Y+042400
121 | X+006380Y+016240
122 | X+008059Y+041840
123 | X+007219Y+016319
124 | X+008380Y+042280
125 | X+007300Y+012519
126 | X+008459Y+043159
127 | X+006180Y+019840
128 | X+011300Y+059559
129 | X+011300Y+063919
130 | X+007419Y+059200
131 | X+007780Y+059200
132 | X+008140Y+059200
133 | X+008500Y+059200
134 | X+008859Y+059200
135 | X+008580Y+061240
136 | X+008780Y+061519
137 | X+009019Y+061759
138 | X+008780Y+062000
139 | X+009100Y+062280
140 | X+009100Y+062800
141 | X+008780Y+062519
142 | X+007059Y+011119
143 | X+008859Y+042800
144 | X+006219Y+009919
145 | X+009180Y+042359
146 | X+006180Y+008519
147 | X+009459Y+041919
148 | X+007180Y+006240
149 | X+009940Y+041680
150 | X+006940Y+005000
151 | X+010419Y+041440
152 | X+007180Y+003680
153 | X+010540Y+044159
154 | X+005826Y+027246
155 | X+005500Y+029959
156 | X+003940Y+065444
157 | X+007780Y+065444
158 | X+003500Y+063559
159 | X+004900Y+066280
160 | X+004900Y+065759
161 | X+005419Y+066400
162 | X+005419Y+066080
163 | X+005419Y+065759
164 | X+004900Y+064919
165 | X+005419Y+065119
166 | X+005419Y+064719
167 | X+003980Y+067280
168 | X+004259Y+067040
169 | X+004140Y+067880
170 | X+004380Y+067680
171 | X+004900Y+067240
172 | X+004619Y+067440
173 | X+005140Y+064400
174 | X+004819Y+064119
175 | X+004019Y+064040
176 | X+004259Y+064280
177 | X+004540Y+064559
178 | X+002780Y+056959
179 | T02
180 | X+004100Y+045100G85X+004100Y+045100
181 | T03
182 | X+004098Y+045886G85X+004101Y+045886
183 | X+004098Y+046675G85X+004101Y+046675
184 | X+004098Y+047461G85X+004101Y+047461
185 | T04
186 | X+006500Y+051100
187 | X+006500Y+051600
188 | X+006500Y+052100
189 | M30
190 |
--------------------------------------------------------------------------------
/gerber/Gerber_TopPasteMaskLayer.GTP:
--------------------------------------------------------------------------------
1 | G04 Layer: TopPasteMaskLayer*
2 | G04 EasyEDA v6.3.43, 2020-06-07T13:11:06+08:00*
3 | G04 57be81840bc34c5ebe362b8f785087f4,10*
4 | G04 Gerber Generator version 0.2*
5 | G04 Scale: 100 percent, Rotated: No, Reflected: No *
6 | G04 Dimensions in inches *
7 | G04 leading zeros omitted , absolute positions ,2 integer and 4 decimal *
8 | %FSLAX24Y24*%
9 | %MOIN*%
10 | G90*
11 | G70D02*
12 |
13 | %ADD19R,0.079200X0.039900*%
14 | %ADD23R,0.040000X0.036000*%
15 | %ADD24R,0.036000X0.040000*%
16 | %ADD26R,0.070900X0.011800*%
17 | %ADD27R,0.204700X0.433100*%
18 |
19 | %LPD*%
20 | G54D19*
21 | G01X9650Y65444D03*
22 | G01X9650Y66224D03*
23 | G01X9650Y67014D03*
24 | G01X9650Y67804D03*
25 | G01X9650Y68594D03*
26 | G01X9650Y69374D03*
27 | G01X9650Y70164D03*
28 | G01X9650Y70954D03*
29 | G01X3350Y70954D03*
30 | G01X3350Y70164D03*
31 | G01X3350Y69374D03*
32 | G01X3350Y68594D03*
33 | G01X3350Y67804D03*
34 | G01X3350Y67014D03*
35 | G01X3350Y66224D03*
36 | G01X3350Y65444D03*
37 | G36*
38 | G01X6617Y22794D02*
39 | G01X6617Y23307D01*
40 | G01X7011Y23307D01*
41 | G01X7011Y22794D01*
42 | G01X6617Y22794D01*
43 | G37*
44 | G36*
45 | G01X6617Y21692D02*
46 | G01X6617Y22205D01*
47 | G01X7011Y22205D01*
48 | G01X7011Y21692D01*
49 | G01X6617Y21692D01*
50 | G37*
51 | G36*
52 | G01X5987Y21692D02*
53 | G01X5987Y22205D01*
54 | G01X6381Y22205D01*
55 | G01X6381Y21692D01*
56 | G01X5987Y21692D01*
57 | G37*
58 | G36*
59 | G01X5987Y22794D02*
60 | G01X5987Y23307D01*
61 | G01X6381Y23307D01*
62 | G01X6381Y22794D01*
63 | G01X5987Y22794D01*
64 | G37*
65 | G36*
66 | G01X8896Y46298D02*
67 | G01X9684Y46298D01*
68 | G01X9684Y44802D01*
69 | G01X8896Y44802D01*
70 | G01X8896Y46298D01*
71 | G37*
72 | G36*
73 | G01X6416Y45844D02*
74 | G01X7203Y45844D01*
75 | G01X7203Y45255D01*
76 | G01X6416Y45255D01*
77 | G01X6416Y45844D01*
78 | G37*
79 | G36*
80 | G01X6416Y44940D02*
81 | G01X7203Y44940D01*
82 | G01X7203Y44348D01*
83 | G01X6416Y44348D01*
84 | G01X6416Y44940D01*
85 | G37*
86 | G36*
87 | G01X6416Y46751D02*
88 | G01X7203Y46751D01*
89 | G01X7203Y46159D01*
90 | G01X6416Y46159D01*
91 | G01X6416Y46751D01*
92 | G37*
93 | G54D23*
94 | G01X10900Y64998D03*
95 | G01X10900Y65601D03*
96 | G01X10900Y66398D03*
97 | G01X10900Y67001D03*
98 | G01X9800Y54801D03*
99 | G01X9800Y54198D03*
100 | G54D24*
101 | G01X3701Y49100D03*
102 | G01X3098Y49100D03*
103 | G54D23*
104 | G01X8900Y50301D03*
105 | G01X8900Y49698D03*
106 | G01X3200Y55001D03*
107 | G01X3200Y54398D03*
108 | G01X2100Y68719D03*
109 | G01X2100Y69321D03*
110 | G36*
111 | G01X10076Y53476D02*
112 | G01X10076Y52689D01*
113 | G01X9524Y52689D01*
114 | G01X9524Y53476D01*
115 | G01X10076Y53476D01*
116 | G37*
117 | G36*
118 | G01X10075Y51310D02*
119 | G01X10075Y50522D01*
120 | G01X9524Y50522D01*
121 | G01X9524Y51310D01*
122 | G01X10075Y51310D01*
123 | G37*
124 | G36*
125 | G01X2923Y50523D02*
126 | G01X2923Y51310D01*
127 | G01X3475Y51310D01*
128 | G01X3475Y50523D01*
129 | G01X2923Y50523D01*
130 | G37*
131 | G36*
132 | G01X2924Y52689D02*
133 | G01X2924Y53477D01*
134 | G01X3475Y53477D01*
135 | G01X3475Y52689D01*
136 | G01X2924Y52689D01*
137 | G37*
138 | G54D24*
139 | G01X6801Y53400D03*
140 | G01X6198Y53400D03*
141 | G36*
142 | G01X6617Y25294D02*
143 | G01X6617Y25807D01*
144 | G01X7011Y25807D01*
145 | G01X7011Y25294D01*
146 | G01X6617Y25294D01*
147 | G37*
148 | G36*
149 | G01X6617Y24192D02*
150 | G01X6617Y24705D01*
151 | G01X7011Y24705D01*
152 | G01X7011Y24192D01*
153 | G01X6617Y24192D01*
154 | G37*
155 | G36*
156 | G01X5987Y24192D02*
157 | G01X5987Y24705D01*
158 | G01X6381Y24705D01*
159 | G01X6381Y24192D01*
160 | G01X5987Y24192D01*
161 | G37*
162 | G36*
163 | G01X5987Y25294D02*
164 | G01X5987Y25807D01*
165 | G01X6381Y25807D01*
166 | G01X6381Y25294D01*
167 | G01X5987Y25294D01*
168 | G37*
169 | G36*
170 | G01X6617Y27794D02*
171 | G01X6617Y28307D01*
172 | G01X7011Y28307D01*
173 | G01X7011Y27794D01*
174 | G01X6617Y27794D01*
175 | G37*
176 | G36*
177 | G01X6617Y26692D02*
178 | G01X6617Y27205D01*
179 | G01X7011Y27205D01*
180 | G01X7011Y26692D01*
181 | G01X6617Y26692D01*
182 | G37*
183 | G36*
184 | G01X5987Y26692D02*
185 | G01X5987Y27205D01*
186 | G01X6381Y27205D01*
187 | G01X6381Y26692D01*
188 | G01X5987Y26692D01*
189 | G37*
190 | G36*
191 | G01X5987Y27794D02*
192 | G01X5987Y28307D01*
193 | G01X6381Y28307D01*
194 | G01X6381Y27794D01*
195 | G01X5987Y27794D01*
196 | G37*
197 | G36*
198 | G01X6617Y30294D02*
199 | G01X6617Y30807D01*
200 | G01X7011Y30807D01*
201 | G01X7011Y30294D01*
202 | G01X6617Y30294D01*
203 | G37*
204 | G36*
205 | G01X6617Y29192D02*
206 | G01X6617Y29705D01*
207 | G01X7011Y29705D01*
208 | G01X7011Y29192D01*
209 | G01X6617Y29192D01*
210 | G37*
211 | G36*
212 | G01X5987Y29192D02*
213 | G01X5987Y29705D01*
214 | G01X6381Y29705D01*
215 | G01X6381Y29192D01*
216 | G01X5987Y29192D01*
217 | G37*
218 | G36*
219 | G01X5987Y30294D02*
220 | G01X5987Y30807D01*
221 | G01X6381Y30807D01*
222 | G01X6381Y30294D01*
223 | G01X5987Y30294D01*
224 | G37*
225 | G36*
226 | G01X6617Y10294D02*
227 | G01X6617Y10807D01*
228 | G01X7011Y10807D01*
229 | G01X7011Y10294D01*
230 | G01X6617Y10294D01*
231 | G37*
232 | G36*
233 | G01X6617Y9192D02*
234 | G01X6617Y9705D01*
235 | G01X7011Y9705D01*
236 | G01X7011Y9192D01*
237 | G01X6617Y9192D01*
238 | G37*
239 | G36*
240 | G01X5987Y9192D02*
241 | G01X5987Y9705D01*
242 | G01X6381Y9705D01*
243 | G01X6381Y9192D01*
244 | G01X5987Y9192D01*
245 | G37*
246 | G36*
247 | G01X5987Y10294D02*
248 | G01X5987Y10807D01*
249 | G01X6381Y10807D01*
250 | G01X6381Y10294D01*
251 | G01X5987Y10294D01*
252 | G37*
253 | G36*
254 | G01X6617Y7794D02*
255 | G01X6617Y8307D01*
256 | G01X7011Y8307D01*
257 | G01X7011Y7794D01*
258 | G01X6617Y7794D01*
259 | G37*
260 | G36*
261 | G01X6617Y6692D02*
262 | G01X6617Y7205D01*
263 | G01X7011Y7205D01*
264 | G01X7011Y6692D01*
265 | G01X6617Y6692D01*
266 | G37*
267 | G36*
268 | G01X5987Y6692D02*
269 | G01X5987Y7205D01*
270 | G01X6381Y7205D01*
271 | G01X6381Y6692D01*
272 | G01X5987Y6692D01*
273 | G37*
274 | G36*
275 | G01X5987Y7794D02*
276 | G01X5987Y8307D01*
277 | G01X6381Y8307D01*
278 | G01X6381Y7794D01*
279 | G01X5987Y7794D01*
280 | G37*
281 | G36*
282 | G01X6617Y5294D02*
283 | G01X6617Y5807D01*
284 | G01X7011Y5807D01*
285 | G01X7011Y5294D01*
286 | G01X6617Y5294D01*
287 | G37*
288 | G36*
289 | G01X6617Y4192D02*
290 | G01X6617Y4705D01*
291 | G01X7011Y4705D01*
292 | G01X7011Y4192D01*
293 | G01X6617Y4192D01*
294 | G37*
295 | G36*
296 | G01X5987Y4192D02*
297 | G01X5987Y4705D01*
298 | G01X6381Y4705D01*
299 | G01X6381Y4192D01*
300 | G01X5987Y4192D01*
301 | G37*
302 | G36*
303 | G01X5987Y5294D02*
304 | G01X5987Y5807D01*
305 | G01X6381Y5807D01*
306 | G01X6381Y5294D01*
307 | G01X5987Y5294D01*
308 | G37*
309 | G36*
310 | G01X6617Y2794D02*
311 | G01X6617Y3307D01*
312 | G01X7011Y3307D01*
313 | G01X7011Y2794D01*
314 | G01X6617Y2794D01*
315 | G37*
316 | G36*
317 | G01X6617Y1692D02*
318 | G01X6617Y2205D01*
319 | G01X7011Y2205D01*
320 | G01X7011Y1692D01*
321 | G01X6617Y1692D01*
322 | G37*
323 | G36*
324 | G01X5987Y1692D02*
325 | G01X5987Y2205D01*
326 | G01X6381Y2205D01*
327 | G01X6381Y1692D01*
328 | G01X5987Y1692D01*
329 | G37*
330 | G36*
331 | G01X5987Y2794D02*
332 | G01X5987Y3307D01*
333 | G01X6381Y3307D01*
334 | G01X6381Y2794D01*
335 | G01X5987Y2794D01*
336 | G37*
337 | G36*
338 | G01X6617Y40294D02*
339 | G01X6617Y40807D01*
340 | G01X7011Y40807D01*
341 | G01X7011Y40294D01*
342 | G01X6617Y40294D01*
343 | G37*
344 | G36*
345 | G01X6617Y39192D02*
346 | G01X6617Y39705D01*
347 | G01X7011Y39705D01*
348 | G01X7011Y39192D01*
349 | G01X6617Y39192D01*
350 | G37*
351 | G36*
352 | G01X5987Y39192D02*
353 | G01X5987Y39705D01*
354 | G01X6381Y39705D01*
355 | G01X6381Y39192D01*
356 | G01X5987Y39192D01*
357 | G37*
358 | G36*
359 | G01X5987Y40294D02*
360 | G01X5987Y40807D01*
361 | G01X6381Y40807D01*
362 | G01X6381Y40294D01*
363 | G01X5987Y40294D01*
364 | G37*
365 | G36*
366 | G01X6617Y37794D02*
367 | G01X6617Y38307D01*
368 | G01X7011Y38307D01*
369 | G01X7011Y37794D01*
370 | G01X6617Y37794D01*
371 | G37*
372 | G36*
373 | G01X6617Y36692D02*
374 | G01X6617Y37205D01*
375 | G01X7011Y37205D01*
376 | G01X7011Y36692D01*
377 | G01X6617Y36692D01*
378 | G37*
379 | G36*
380 | G01X5987Y36692D02*
381 | G01X5987Y37205D01*
382 | G01X6381Y37205D01*
383 | G01X6381Y36692D01*
384 | G01X5987Y36692D01*
385 | G37*
386 | G36*
387 | G01X5987Y37794D02*
388 | G01X5987Y38307D01*
389 | G01X6381Y38307D01*
390 | G01X6381Y37794D01*
391 | G01X5987Y37794D01*
392 | G37*
393 | G36*
394 | G01X6617Y35294D02*
395 | G01X6617Y35807D01*
396 | G01X7011Y35807D01*
397 | G01X7011Y35294D01*
398 | G01X6617Y35294D01*
399 | G37*
400 | G36*
401 | G01X6617Y34192D02*
402 | G01X6617Y34705D01*
403 | G01X7011Y34705D01*
404 | G01X7011Y34192D01*
405 | G01X6617Y34192D01*
406 | G37*
407 | G36*
408 | G01X5987Y34192D02*
409 | G01X5987Y34705D01*
410 | G01X6381Y34705D01*
411 | G01X6381Y34192D01*
412 | G01X5987Y34192D01*
413 | G37*
414 | G36*
415 | G01X5987Y35294D02*
416 | G01X5987Y35807D01*
417 | G01X6381Y35807D01*
418 | G01X6381Y35294D01*
419 | G01X5987Y35294D01*
420 | G37*
421 | G36*
422 | G01X6617Y32794D02*
423 | G01X6617Y33307D01*
424 | G01X7011Y33307D01*
425 | G01X7011Y32794D01*
426 | G01X6617Y32794D01*
427 | G37*
428 | G36*
429 | G01X6617Y31692D02*
430 | G01X6617Y32205D01*
431 | G01X7011Y32205D01*
432 | G01X7011Y31692D01*
433 | G01X6617Y31692D01*
434 | G37*
435 | G36*
436 | G01X5987Y31692D02*
437 | G01X5987Y32205D01*
438 | G01X6381Y32205D01*
439 | G01X6381Y31692D01*
440 | G01X5987Y31692D01*
441 | G37*
442 | G36*
443 | G01X5987Y32794D02*
444 | G01X5987Y33307D01*
445 | G01X6381Y33307D01*
446 | G01X6381Y32794D01*
447 | G01X5987Y32794D01*
448 | G37*
449 | G36*
450 | G01X6617Y12794D02*
451 | G01X6617Y13307D01*
452 | G01X7011Y13307D01*
453 | G01X7011Y12794D01*
454 | G01X6617Y12794D01*
455 | G37*
456 | G36*
457 | G01X6617Y11692D02*
458 | G01X6617Y12205D01*
459 | G01X7011Y12205D01*
460 | G01X7011Y11692D01*
461 | G01X6617Y11692D01*
462 | G37*
463 | G36*
464 | G01X5987Y11692D02*
465 | G01X5987Y12205D01*
466 | G01X6381Y12205D01*
467 | G01X6381Y11692D01*
468 | G01X5987Y11692D01*
469 | G37*
470 | G36*
471 | G01X5987Y12794D02*
472 | G01X5987Y13307D01*
473 | G01X6381Y13307D01*
474 | G01X6381Y12794D01*
475 | G01X5987Y12794D01*
476 | G37*
477 | G36*
478 | G01X6617Y15294D02*
479 | G01X6617Y15807D01*
480 | G01X7011Y15807D01*
481 | G01X7011Y15294D01*
482 | G01X6617Y15294D01*
483 | G37*
484 | G36*
485 | G01X6617Y14192D02*
486 | G01X6617Y14705D01*
487 | G01X7011Y14705D01*
488 | G01X7011Y14192D01*
489 | G01X6617Y14192D01*
490 | G37*
491 | G36*
492 | G01X5987Y14192D02*
493 | G01X5987Y14705D01*
494 | G01X6381Y14705D01*
495 | G01X6381Y14192D01*
496 | G01X5987Y14192D01*
497 | G37*
498 | G36*
499 | G01X5987Y15294D02*
500 | G01X5987Y15807D01*
501 | G01X6381Y15807D01*
502 | G01X6381Y15294D01*
503 | G01X5987Y15294D01*
504 | G37*
505 | G36*
506 | G01X6617Y17794D02*
507 | G01X6617Y18307D01*
508 | G01X7011Y18307D01*
509 | G01X7011Y17794D01*
510 | G01X6617Y17794D01*
511 | G37*
512 | G36*
513 | G01X6617Y16692D02*
514 | G01X6617Y17205D01*
515 | G01X7011Y17205D01*
516 | G01X7011Y16692D01*
517 | G01X6617Y16692D01*
518 | G37*
519 | G36*
520 | G01X5987Y16692D02*
521 | G01X5987Y17205D01*
522 | G01X6381Y17205D01*
523 | G01X6381Y16692D01*
524 | G01X5987Y16692D01*
525 | G37*
526 | G36*
527 | G01X5987Y17794D02*
528 | G01X5987Y18307D01*
529 | G01X6381Y18307D01*
530 | G01X6381Y17794D01*
531 | G01X5987Y17794D01*
532 | G37*
533 | G36*
534 | G01X6617Y20294D02*
535 | G01X6617Y20807D01*
536 | G01X7011Y20807D01*
537 | G01X7011Y20294D01*
538 | G01X6617Y20294D01*
539 | G37*
540 | G36*
541 | G01X6617Y19192D02*
542 | G01X6617Y19705D01*
543 | G01X7011Y19705D01*
544 | G01X7011Y19192D01*
545 | G01X6617Y19192D01*
546 | G37*
547 | G36*
548 | G01X5987Y19192D02*
549 | G01X5987Y19705D01*
550 | G01X6381Y19705D01*
551 | G01X6381Y19192D01*
552 | G01X5987Y19192D01*
553 | G37*
554 | G36*
555 | G01X5987Y20294D02*
556 | G01X5987Y20807D01*
557 | G01X6381Y20807D01*
558 | G01X6381Y20294D01*
559 | G01X5987Y20294D01*
560 | G37*
561 | G54D23*
562 | G01X5350Y46851D03*
563 | G01X5350Y46248D03*
564 | G01X6050Y46851D03*
565 | G01X6050Y46248D03*
566 | G54D24*
567 | G01X6648Y48400D03*
568 | G01X7251Y48400D03*
569 | G01X6648Y49400D03*
570 | G01X7251Y49400D03*
571 | G54D23*
572 | G01X10900Y63598D03*
573 | G01X10900Y64201D03*
574 | G01X10900Y58098D03*
575 | G01X10900Y58701D03*
576 | G54D26*
577 | G01X5019Y63819D03*
578 | G01X5019Y63559D03*
579 | G01X5019Y63309D03*
580 | G01X5019Y63050D03*
581 | G01X5019Y62800D03*
582 | G01X5019Y62540D03*
583 | G01X5019Y62280D03*
584 | G01X5019Y62030D03*
585 | G01X5019Y61769D03*
586 | G01X5019Y61519D03*
587 | G01X5019Y61259D03*
588 | G01X5019Y61000D03*
589 | G01X5019Y60750D03*
590 | G01X5019Y60490D03*
591 | G01X5019Y60240D03*
592 | G01X5019Y59980D03*
593 | G01X7979Y59980D03*
594 | G01X7979Y60240D03*
595 | G01X7979Y60490D03*
596 | G01X7979Y60750D03*
597 | G01X7979Y61000D03*
598 | G01X7979Y61259D03*
599 | G01X7979Y61519D03*
600 | G01X7979Y61769D03*
601 | G01X7979Y62030D03*
602 | G01X7979Y62280D03*
603 | G01X7979Y62540D03*
604 | G01X7979Y62800D03*
605 | G54D27*
606 | G01X6499Y61899D03*
607 | G54D26*
608 | G01X7979Y63050D03*
609 | G01X7979Y63309D03*
610 | G01X7979Y63559D03*
611 | G01X7979Y63819D03*
612 | G01X5019Y58219D03*
613 | G01X5019Y57959D03*
614 | G01X5019Y57709D03*
615 | G01X5019Y57450D03*
616 | G01X5019Y57200D03*
617 | G01X5019Y56940D03*
618 | G01X5019Y56680D03*
619 | G01X5019Y56430D03*
620 | G01X5019Y56169D03*
621 | G01X5019Y55919D03*
622 | G01X5019Y55659D03*
623 | G01X5019Y55400D03*
624 | G01X5019Y55150D03*
625 | G01X5019Y54890D03*
626 | G01X5019Y54640D03*
627 | G01X5019Y54380D03*
628 | G01X7979Y54380D03*
629 | G01X7979Y54640D03*
630 | G01X7979Y54890D03*
631 | G01X7979Y55150D03*
632 | G01X7979Y55400D03*
633 | G01X7979Y55659D03*
634 | G01X7979Y55919D03*
635 | G01X7979Y56169D03*
636 | G01X7979Y56430D03*
637 | G01X7979Y56680D03*
638 | G01X7979Y56940D03*
639 | G01X7979Y57200D03*
640 | G54D27*
641 | G01X6499Y56299D03*
642 | G54D26*
643 | G01X7979Y57450D03*
644 | G01X7979Y57709D03*
645 | G01X7979Y57959D03*
646 | G01X7979Y58219D03*
647 | M00*
648 | M02*
649 |
--------------------------------------------------------------------------------
/gerber/Gerber_TopSilkLayer.GTO:
--------------------------------------------------------------------------------
1 | G04 Layer: TopSilkLayer*
2 | G04 EasyEDA v6.3.43, 2020-06-07T13:11:06+08:00*
3 | G04 57be81840bc34c5ebe362b8f785087f4,10*
4 | G04 Gerber Generator version 0.2*
5 | G04 Scale: 100 percent, Rotated: No, Reflected: No *
6 | G04 Dimensions in inches *
7 | G04 leading zeros omitted , absolute positions ,2 integer and 4 decimal *
8 | %FSLAX24Y24*%
9 | %MOIN*%
10 | G90*
11 | G70D02*
12 |
13 | %ADD10C,0.010000*%
14 | %ADD32C,0.004724*%
15 | %ADD33C,0.007000*%
16 | %ADD34C,0.005080*%
17 | %ADD35C,0.009842*%
18 | %ADD36C,0.006000*%
19 |
20 | %LPD*%
21 | G54D10*
22 | G01X3350Y73475D02*
23 | G01X3350Y64815D01*
24 | G01X9650Y64815D01*
25 | G01X9650Y73475D01*
26 | G01X3350Y73475D01*
27 | G01X5948Y22500D02*
28 | G01X5948Y21791D01*
29 | G01X7051Y21791D01*
30 | G01X7051Y23208D01*
31 | G01X5948Y23208D01*
32 | G01X5948Y22500D01*
33 | G54D32*
34 | G01X7322Y44207D02*
35 | G01X8802Y44207D01*
36 | G01X8802Y44704D01*
37 | G01X6436Y46892D02*
38 | G01X8802Y46892D01*
39 | G01X8802Y46396D01*
40 | G54D33*
41 | G01X4800Y44901D02*
42 | G01X4600Y44900D01*
43 | G01X4600Y45350D01*
44 | G01X4800Y45350D01*
45 | G01X3000Y48300D02*
46 | G01X3000Y44300D01*
47 | G01X4800Y44300D01*
48 | G01X4800Y48300D01*
49 | G01X3000Y48300D01*
50 | G01X3000Y48300D01*
51 | G01X4800Y47700D02*
52 | G01X4600Y47700D01*
53 | G01X4600Y47300D01*
54 | G01X4800Y47300D01*
55 | G54D34*
56 | G01X10736Y65076D02*
57 | G01X11063Y65076D01*
58 | G01X11051Y65523D02*
59 | G01X10736Y65523D01*
60 | G01X11063Y65625D02*
61 | G01X11063Y64975D01*
62 | G01X11063Y64975D02*
63 | G01X10736Y64975D01*
64 | G01X10736Y64975D02*
65 | G01X10736Y65625D01*
66 | G01X10736Y65625D02*
67 | G01X11063Y65625D01*
68 | G01X10736Y66476D02*
69 | G01X11063Y66476D01*
70 | G01X11051Y66923D02*
71 | G01X10736Y66923D01*
72 | G01X11063Y67025D02*
73 | G01X11063Y66375D01*
74 | G01X11063Y66375D02*
75 | G01X10736Y66375D01*
76 | G01X10736Y66375D02*
77 | G01X10736Y67025D01*
78 | G01X10736Y67025D02*
79 | G01X11063Y67025D01*
80 | G01X9963Y54723D02*
81 | G01X9636Y54723D01*
82 | G01X9648Y54276D02*
83 | G01X9963Y54276D01*
84 | G01X9636Y54175D02*
85 | G01X9636Y54825D01*
86 | G01X9636Y54825D02*
87 | G01X9963Y54825D01*
88 | G01X9963Y54825D02*
89 | G01X9963Y54175D01*
90 | G01X9963Y54175D02*
91 | G01X9636Y54175D01*
92 | G01X3623Y48936D02*
93 | G01X3623Y49263D01*
94 | G01X3176Y49252D02*
95 | G01X3176Y48936D01*
96 | G01X3075Y49263D02*
97 | G01X3725Y49263D01*
98 | G01X3725Y49263D02*
99 | G01X3725Y48936D01*
100 | G01X3725Y48936D02*
101 | G01X3075Y48936D01*
102 | G01X3075Y48936D02*
103 | G01X3075Y49263D01*
104 | G01X9063Y50223D02*
105 | G01X8736Y50223D01*
106 | G01X8748Y49776D02*
107 | G01X9063Y49776D01*
108 | G01X8736Y49675D02*
109 | G01X8736Y50325D01*
110 | G01X8736Y50325D02*
111 | G01X9063Y50325D01*
112 | G01X9063Y50325D02*
113 | G01X9063Y49675D01*
114 | G01X9063Y49675D02*
115 | G01X8736Y49675D01*
116 | G01X3363Y54923D02*
117 | G01X3036Y54923D01*
118 | G01X3048Y54476D02*
119 | G01X3363Y54476D01*
120 | G01X3036Y54375D02*
121 | G01X3036Y55025D01*
122 | G01X3036Y55025D02*
123 | G01X3363Y55025D01*
124 | G01X3363Y55025D02*
125 | G01X3363Y54375D01*
126 | G01X3363Y54375D02*
127 | G01X3036Y54375D01*
128 | G01X1936Y68796D02*
129 | G01X2263Y68796D01*
130 | G01X2251Y69244D02*
131 | G01X1936Y69244D01*
132 | G01X2263Y69344D02*
133 | G01X2263Y68694D01*
134 | G01X2263Y68694D02*
135 | G01X1936Y68694D01*
136 | G01X1936Y68694D02*
137 | G01X1936Y69344D01*
138 | G01X1936Y69344D02*
139 | G01X2263Y69344D01*
140 | G54D35*
141 | G01X10390Y52789D02*
142 | G01X10390Y51215D01*
143 | G01X9208Y51215D01*
144 | G01X9208Y52789D01*
145 | G01X10390Y52789D01*
146 | G01X10194Y52586D02*
147 | G01X10194Y51405D01*
148 | G01X9406Y51405D01*
149 | G01X9406Y52586D01*
150 | G01X10194Y52586D01*
151 | G01X2609Y51210D02*
152 | G01X2609Y52784D01*
153 | G01X3791Y52784D01*
154 | G01X3791Y51210D01*
155 | G01X2609Y51210D01*
156 | G01X2805Y51413D02*
157 | G01X2805Y52594D01*
158 | G01X3593Y52594D01*
159 | G01X3593Y51413D01*
160 | G01X2805Y51413D01*
161 | G54D10*
162 | G01X6212Y50788D02*
163 | G01X6212Y52379D01*
164 | G01X6610Y52379D01*
165 | G01X6618Y52375D02*
166 | G01X6968Y52107D01*
167 | G01X6968Y51044D01*
168 | G01X6645Y50788D01*
169 | G01X6212Y50788D01*
170 | G54D34*
171 | G01X6723Y53236D02*
172 | G01X6723Y53563D01*
173 | G01X6276Y53552D02*
174 | G01X6276Y53236D01*
175 | G01X6175Y53563D02*
176 | G01X6825Y53563D01*
177 | G01X6825Y53563D02*
178 | G01X6825Y53236D01*
179 | G01X6825Y53236D02*
180 | G01X6175Y53236D01*
181 | G01X6175Y53236D02*
182 | G01X6175Y53563D01*
183 | G54D10*
184 | G01X5948Y25000D02*
185 | G01X5948Y24291D01*
186 | G01X7051Y24291D01*
187 | G01X7051Y25708D01*
188 | G01X5948Y25708D01*
189 | G01X5948Y25000D01*
190 | G01X5948Y27500D02*
191 | G01X5948Y26791D01*
192 | G01X7051Y26791D01*
193 | G01X7051Y28208D01*
194 | G01X5948Y28208D01*
195 | G01X5948Y27500D01*
196 | G01X5948Y30000D02*
197 | G01X5948Y29291D01*
198 | G01X7051Y29291D01*
199 | G01X7051Y30708D01*
200 | G01X5948Y30708D01*
201 | G01X5948Y30000D01*
202 | G01X5948Y10000D02*
203 | G01X5948Y9291D01*
204 | G01X7051Y9291D01*
205 | G01X7051Y10708D01*
206 | G01X5948Y10708D01*
207 | G01X5948Y10000D01*
208 | G01X5948Y7500D02*
209 | G01X5948Y6791D01*
210 | G01X7051Y6791D01*
211 | G01X7051Y8208D01*
212 | G01X5948Y8208D01*
213 | G01X5948Y7500D01*
214 | G01X5948Y5000D02*
215 | G01X5948Y4291D01*
216 | G01X7051Y4291D01*
217 | G01X7051Y5708D01*
218 | G01X5948Y5708D01*
219 | G01X5948Y5000D01*
220 | G01X5948Y2500D02*
221 | G01X5948Y1791D01*
222 | G01X7051Y1791D01*
223 | G01X7051Y3208D01*
224 | G01X5948Y3208D01*
225 | G01X5948Y2500D01*
226 | G01X5948Y40000D02*
227 | G01X5948Y39291D01*
228 | G01X7051Y39291D01*
229 | G01X7051Y40708D01*
230 | G01X5948Y40708D01*
231 | G01X5948Y40000D01*
232 | G01X5948Y37500D02*
233 | G01X5948Y36791D01*
234 | G01X7051Y36791D01*
235 | G01X7051Y38208D01*
236 | G01X5948Y38208D01*
237 | G01X5948Y37500D01*
238 | G01X5948Y35000D02*
239 | G01X5948Y34291D01*
240 | G01X7051Y34291D01*
241 | G01X7051Y35708D01*
242 | G01X5948Y35708D01*
243 | G01X5948Y35000D01*
244 | G01X5948Y32500D02*
245 | G01X5948Y31791D01*
246 | G01X7051Y31791D01*
247 | G01X7051Y33208D01*
248 | G01X5948Y33208D01*
249 | G01X5948Y32500D01*
250 | G01X5948Y12500D02*
251 | G01X5948Y11791D01*
252 | G01X7051Y11791D01*
253 | G01X7051Y13208D01*
254 | G01X5948Y13208D01*
255 | G01X5948Y12500D01*
256 | G01X5948Y15000D02*
257 | G01X5948Y14291D01*
258 | G01X7051Y14291D01*
259 | G01X7051Y15708D01*
260 | G01X5948Y15708D01*
261 | G01X5948Y15000D01*
262 | G01X5948Y17500D02*
263 | G01X5948Y16791D01*
264 | G01X7051Y16791D01*
265 | G01X7051Y18208D01*
266 | G01X5948Y18208D01*
267 | G01X5948Y17500D01*
268 | G01X5948Y20000D02*
269 | G01X5948Y19291D01*
270 | G01X7051Y19291D01*
271 | G01X7051Y20708D01*
272 | G01X5948Y20708D01*
273 | G01X5948Y20000D01*
274 | G54D34*
275 | G01X5513Y46773D02*
276 | G01X5186Y46773D01*
277 | G01X5198Y46326D02*
278 | G01X5513Y46326D01*
279 | G01X5186Y46225D02*
280 | G01X5186Y46875D01*
281 | G01X5186Y46875D02*
282 | G01X5513Y46875D01*
283 | G01X5513Y46875D02*
284 | G01X5513Y46225D01*
285 | G01X5513Y46225D02*
286 | G01X5186Y46225D01*
287 | G01X6213Y46773D02*
288 | G01X5886Y46773D01*
289 | G01X5898Y46326D02*
290 | G01X6213Y46326D01*
291 | G01X5886Y46225D02*
292 | G01X5886Y46875D01*
293 | G01X5886Y46875D02*
294 | G01X6213Y46875D01*
295 | G01X6213Y46875D02*
296 | G01X6213Y46225D01*
297 | G01X6213Y46225D02*
298 | G01X5886Y46225D01*
299 | G01X6726Y48563D02*
300 | G01X6726Y48236D01*
301 | G01X7173Y48248D02*
302 | G01X7173Y48563D01*
303 | G01X7275Y48236D02*
304 | G01X6625Y48236D01*
305 | G01X6625Y48236D02*
306 | G01X6625Y48563D01*
307 | G01X6625Y48563D02*
308 | G01X7275Y48563D01*
309 | G01X7275Y48563D02*
310 | G01X7275Y48236D01*
311 | G01X6726Y49563D02*
312 | G01X6726Y49236D01*
313 | G01X7173Y49248D02*
314 | G01X7173Y49563D01*
315 | G01X7275Y49236D02*
316 | G01X6625Y49236D01*
317 | G01X6625Y49236D02*
318 | G01X6625Y49563D01*
319 | G01X6625Y49563D02*
320 | G01X7275Y49563D01*
321 | G01X7275Y49563D02*
322 | G01X7275Y49236D01*
323 | G01X10736Y63676D02*
324 | G01X11063Y63676D01*
325 | G01X11051Y64123D02*
326 | G01X10736Y64123D01*
327 | G01X11063Y64225D02*
328 | G01X11063Y63575D01*
329 | G01X11063Y63575D02*
330 | G01X10736Y63575D01*
331 | G01X10736Y63575D02*
332 | G01X10736Y64225D01*
333 | G01X10736Y64225D02*
334 | G01X11063Y64225D01*
335 | G01X10736Y58176D02*
336 | G01X11063Y58176D01*
337 | G01X11051Y58623D02*
338 | G01X10736Y58623D01*
339 | G01X11063Y58725D02*
340 | G01X11063Y58075D01*
341 | G01X11063Y58075D02*
342 | G01X10736Y58075D01*
343 | G01X10736Y58075D02*
344 | G01X10736Y58725D01*
345 | G01X10736Y58725D02*
346 | G01X11063Y58725D01*
347 | G54D10*
348 | G01X7840Y64069D02*
349 | G01X7840Y59730D01*
350 | G01X7840Y59730D02*
351 | G01X5159Y59730D01*
352 | G01X5159Y59730D02*
353 | G01X5159Y64069D01*
354 | G01X5159Y64069D02*
355 | G01X7840Y64069D01*
356 | G01X7840Y58469D02*
357 | G01X7840Y54130D01*
358 | G01X7840Y54130D02*
359 | G01X5159Y54130D01*
360 | G01X5159Y54130D02*
361 | G01X5159Y58469D01*
362 | G01X5159Y58469D02*
363 | G01X7840Y58469D01*
364 | G54D36*
365 | G01X10084Y69234D02*
366 | G01X10390Y69234D01*
367 | G01X10453Y69255D01*
368 | G01X10494Y69296D01*
369 | G01X10513Y69358D01*
370 | G01X10513Y69398D01*
371 | G01X10494Y69459D01*
372 | G01X10453Y69501D01*
373 | G01X10390Y69521D01*
374 | G01X10084Y69521D01*
375 | G01X10186Y69677D02*
376 | G01X10165Y69677D01*
377 | G01X10125Y69696D01*
378 | G01X10105Y69717D01*
379 | G01X10084Y69759D01*
380 | G01X10084Y69840D01*
381 | G01X10105Y69881D01*
382 | G01X10125Y69902D01*
383 | G01X10165Y69921D01*
384 | G01X10207Y69921D01*
385 | G01X10248Y69902D01*
386 | G01X10309Y69861D01*
387 | G01X10513Y69656D01*
388 | G01X10513Y69942D01*
389 | G01X5418Y22500D02*
390 | G01X5848Y22500D01*
391 | G01X5848Y22500D02*
392 | G01X5848Y22744D01*
393 | G01X5418Y22880D02*
394 | G01X5848Y22880D01*
395 | G01X5418Y22880D02*
396 | G01X5418Y23146D01*
397 | G01X5623Y22880D02*
398 | G01X5623Y23044D01*
399 | G01X5848Y22880D02*
400 | G01X5848Y23146D01*
401 | G01X5418Y23280D02*
402 | G01X5848Y23280D01*
403 | G01X5418Y23280D02*
404 | G01X5418Y23425D01*
405 | G01X5439Y23486D01*
406 | G01X5480Y23527D01*
407 | G01X5521Y23546D01*
408 | G01X5582Y23567D01*
409 | G01X5684Y23567D01*
410 | G01X5746Y23546D01*
411 | G01X5787Y23527D01*
412 | G01X5827Y23486D01*
413 | G01X5848Y23425D01*
414 | G01X5848Y23280D01*
415 | G01X5500Y23703D02*
416 | G01X5480Y23744D01*
417 | G01X5418Y23805D01*
418 | G01X5848Y23805D01*
419 | G01X7990Y47421D02*
420 | G01X7990Y47115D01*
421 | G01X8010Y47054D01*
422 | G01X8051Y47013D01*
423 | G01X8113Y46992D01*
424 | G01X8154Y46992D01*
425 | G01X8215Y47013D01*
426 | G01X8256Y47054D01*
427 | G01X8276Y47115D01*
428 | G01X8276Y47421D01*
429 | G01X8452Y47421D02*
430 | G01X8677Y47421D01*
431 | G01X8555Y47259D01*
432 | G01X8616Y47259D01*
433 | G01X8657Y47238D01*
434 | G01X8677Y47217D01*
435 | G01X8698Y47157D01*
436 | G01X8698Y47115D01*
437 | G01X8677Y47054D01*
438 | G01X8636Y47013D01*
439 | G01X8575Y46992D01*
440 | G01X8514Y46992D01*
441 | G01X8452Y47013D01*
442 | G01X8432Y47034D01*
443 | G01X8411Y47075D01*
444 | G01X4105Y48829D02*
445 | G01X4105Y48502D01*
446 | G01X4084Y48440D01*
447 | G01X4063Y48419D01*
448 | G01X4023Y48400D01*
449 | G01X3982Y48400D01*
450 | G01X3940Y48419D01*
451 | G01X3919Y48440D01*
452 | G01X3900Y48502D01*
453 | G01X3900Y48542D01*
454 | G01X4240Y48748D02*
455 | G01X4280Y48767D01*
456 | G01X4342Y48829D01*
457 | G01X4342Y48400D01*
458 | G01X11138Y65300D02*
459 | G01X11567Y65300D01*
460 | G01X11138Y65300D02*
461 | G01X11138Y65484D01*
462 | G01X11159Y65544D01*
463 | G01X11178Y65565D01*
464 | G01X11219Y65586D01*
465 | G01X11261Y65586D01*
466 | G01X11301Y65565D01*
467 | G01X11323Y65544D01*
468 | G01X11342Y65484D01*
469 | G01X11342Y65300D01*
470 | G01X11342Y65442D02*
471 | G01X11567Y65586D01*
472 | G01X11240Y65742D02*
473 | G01X11219Y65742D01*
474 | G01X11178Y65761D01*
475 | G01X11159Y65783D01*
476 | G01X11138Y65823D01*
477 | G01X11138Y65905D01*
478 | G01X11159Y65946D01*
479 | G01X11178Y65967D01*
480 | G01X11219Y65986D01*
481 | G01X11261Y65986D01*
482 | G01X11301Y65967D01*
483 | G01X11363Y65926D01*
484 | G01X11567Y65721D01*
485 | G01X11567Y66008D01*
486 | G01X11138Y66700D02*
487 | G01X11567Y66700D01*
488 | G01X11138Y66700D02*
489 | G01X11138Y66884D01*
490 | G01X11159Y66944D01*
491 | G01X11178Y66965D01*
492 | G01X11219Y66986D01*
493 | G01X11261Y66986D01*
494 | G01X11301Y66965D01*
495 | G01X11323Y66944D01*
496 | G01X11342Y66884D01*
497 | G01X11342Y66700D01*
498 | G01X11342Y66842D02*
499 | G01X11567Y66986D01*
500 | G01X11138Y67161D02*
501 | G01X11138Y67386D01*
502 | G01X11301Y67265D01*
503 | G01X11301Y67326D01*
504 | G01X11323Y67367D01*
505 | G01X11342Y67386D01*
506 | G01X11403Y67408D01*
507 | G01X11444Y67408D01*
508 | G01X11507Y67386D01*
509 | G01X11548Y67346D01*
510 | G01X11567Y67284D01*
511 | G01X11567Y67223D01*
512 | G01X11548Y67161D01*
513 | G01X11526Y67142D01*
514 | G01X11486Y67121D01*
515 | G01X9071Y54500D02*
516 | G01X9500Y54500D01*
517 | G01X9071Y54500D02*
518 | G01X9071Y54684D01*
519 | G01X9090Y54744D01*
520 | G01X9111Y54765D01*
521 | G01X9151Y54786D01*
522 | G01X9192Y54786D01*
523 | G01X9234Y54765D01*
524 | G01X9255Y54744D01*
525 | G01X9275Y54684D01*
526 | G01X9275Y54500D01*
527 | G01X9275Y54642D02*
528 | G01X9500Y54786D01*
529 | G01X9071Y55126D02*
530 | G01X9357Y54921D01*
531 | G01X9357Y55228D01*
532 | G01X9071Y55126D02*
533 | G01X9500Y55126D01*
534 | G01X3400Y49829D02*
535 | G01X3400Y49400D01*
536 | G01X3400Y49829D02*
537 | G01X3584Y49829D01*
538 | G01X3644Y49809D01*
539 | G01X3665Y49788D01*
540 | G01X3686Y49748D01*
541 | G01X3686Y49707D01*
542 | G01X3665Y49665D01*
543 | G01X3644Y49644D01*
544 | G01X3584Y49625D01*
545 | G01X3400Y49625D01*
546 | G01X3542Y49625D02*
547 | G01X3686Y49400D01*
548 | G01X4067Y49829D02*
549 | G01X3861Y49829D01*
550 | G01X3842Y49644D01*
551 | G01X3861Y49665D01*
552 | G01X3923Y49686D01*
553 | G01X3984Y49686D01*
554 | G01X4046Y49665D01*
555 | G01X4086Y49625D01*
556 | G01X4107Y49563D01*
557 | G01X4107Y49523D01*
558 | G01X4086Y49461D01*
559 | G01X4046Y49419D01*
560 | G01X3984Y49400D01*
561 | G01X3923Y49400D01*
562 | G01X3861Y49419D01*
563 | G01X3842Y49440D01*
564 | G01X3821Y49482D01*
565 | G01X8171Y50000D02*
566 | G01X8600Y50000D01*
567 | G01X8171Y50000D02*
568 | G01X8171Y50184D01*
569 | G01X8190Y50244D01*
570 | G01X8211Y50265D01*
571 | G01X8251Y50286D01*
572 | G01X8292Y50286D01*
573 | G01X8334Y50265D01*
574 | G01X8355Y50244D01*
575 | G01X8375Y50184D01*
576 | G01X8375Y50000D01*
577 | G01X8375Y50142D02*
578 | G01X8600Y50286D01*
579 | G01X8232Y50667D02*
580 | G01X8190Y50646D01*
581 | G01X8171Y50584D01*
582 | G01X8171Y50544D01*
583 | G01X8190Y50482D01*
584 | G01X8251Y50442D01*
585 | G01X8355Y50421D01*
586 | G01X8457Y50421D01*
587 | G01X8538Y50442D01*
588 | G01X8580Y50482D01*
589 | G01X8600Y50544D01*
590 | G01X8600Y50565D01*
591 | G01X8580Y50626D01*
592 | G01X8538Y50667D01*
593 | G01X8476Y50686D01*
594 | G01X8457Y50686D01*
595 | G01X8396Y50667D01*
596 | G01X8355Y50626D01*
597 | G01X8334Y50565D01*
598 | G01X8334Y50544D01*
599 | G01X8355Y50482D01*
600 | G01X8396Y50442D01*
601 | G01X8457Y50421D01*
602 | G01X2471Y54700D02*
603 | G01X2900Y54700D01*
604 | G01X2471Y54700D02*
605 | G01X2471Y54884D01*
606 | G01X2490Y54944D01*
607 | G01X2511Y54965D01*
608 | G01X2551Y54986D01*
609 | G01X2592Y54986D01*
610 | G01X2634Y54965D01*
611 | G01X2655Y54944D01*
612 | G01X2675Y54884D01*
613 | G01X2675Y54700D01*
614 | G01X2675Y54842D02*
615 | G01X2900Y54986D01*
616 | G01X2471Y55407D02*
617 | G01X2900Y55203D01*
618 | G01X2471Y55121D02*
619 | G01X2471Y55407D01*
620 | G01X2338Y69019D02*
621 | G01X2767Y69019D01*
622 | G01X2338Y69019D02*
623 | G01X2338Y69204D01*
624 | G01X2359Y69265D01*
625 | G01X2378Y69286D01*
626 | G01X2419Y69306D01*
627 | G01X2461Y69306D01*
628 | G01X2501Y69286D01*
629 | G01X2523Y69265D01*
630 | G01X2542Y69204D01*
631 | G01X2542Y69019D01*
632 | G01X2542Y69163D02*
633 | G01X2767Y69306D01*
634 | G01X2419Y69440D02*
635 | G01X2400Y69482D01*
636 | G01X2338Y69544D01*
637 | G01X2767Y69544D01*
638 | G01X10571Y52095D02*
639 | G01X11000Y52095D01*
640 | G01X10571Y52381D02*
641 | G01X10857Y52095D01*
642 | G01X10755Y52197D02*
643 | G01X11000Y52381D01*
644 | G01X10571Y52516D02*
645 | G01X11000Y52516D01*
646 | G01X10571Y52516D02*
647 | G01X10571Y52782D01*
648 | G01X10775Y52516D02*
649 | G01X10775Y52680D01*
650 | G01X11000Y52516D02*
651 | G01X11000Y52782D01*
652 | G01X10571Y52917D02*
653 | G01X10775Y53081D01*
654 | G01X11000Y53081D01*
655 | G01X10571Y53245D02*
656 | G01X10775Y53081D01*
657 | G01X11144Y53380D02*
658 | G01X11144Y53748D01*
659 | G01X10571Y53883D02*
660 | G01X11000Y53883D01*
661 | G01X10571Y53883D02*
662 | G01X10571Y54149D01*
663 | G01X10775Y53883D02*
664 | G01X10775Y54046D01*
665 | G01X10571Y54284D02*
666 | G01X11000Y54284D01*
667 | G01X11000Y54284D02*
668 | G01X11000Y54529D01*
669 | G01X10571Y54828D02*
670 | G01X11000Y54664D01*
671 | G01X10571Y54828D02*
672 | G01X11000Y54991D01*
673 | G01X10857Y54725D02*
674 | G01X10857Y54930D01*
675 | G01X10632Y55413D02*
676 | G01X10591Y55372D01*
677 | G01X10571Y55310D01*
678 | G01X10571Y55229D01*
679 | G01X10591Y55167D01*
680 | G01X10632Y55126D01*
681 | G01X10673Y55126D01*
682 | G01X10714Y55147D01*
683 | G01X10734Y55167D01*
684 | G01X10755Y55208D01*
685 | G01X10796Y55331D01*
686 | G01X10816Y55372D01*
687 | G01X10837Y55392D01*
688 | G01X10878Y55413D01*
689 | G01X10939Y55413D01*
690 | G01X10980Y55372D01*
691 | G01X11000Y55310D01*
692 | G01X11000Y55229D01*
693 | G01X10980Y55167D01*
694 | G01X10939Y55126D01*
695 | G01X10571Y55548D02*
696 | G01X11000Y55548D01*
697 | G01X10571Y55834D02*
698 | G01X11000Y55834D01*
699 | G01X10775Y55548D02*
700 | G01X10775Y55834D01*
701 | G01X1937Y51904D02*
702 | G01X2366Y51904D01*
703 | G01X1937Y52190D02*
704 | G01X2223Y51904D01*
705 | G01X2121Y52006D02*
706 | G01X2366Y52190D01*
707 | G01X1937Y52325D02*
708 | G01X2366Y52325D01*
709 | G01X1937Y52325D02*
710 | G01X1937Y52591D01*
711 | G01X2141Y52325D02*
712 | G01X2141Y52489D01*
713 | G01X2366Y52325D02*
714 | G01X2366Y52591D01*
715 | G01X1937Y52726D02*
716 | G01X2141Y52890D01*
717 | G01X2366Y52890D01*
718 | G01X1937Y53054D02*
719 | G01X2141Y52890D01*
720 | G01X2510Y53189D02*
721 | G01X2510Y53557D01*
722 | G01X1937Y53692D02*
723 | G01X2366Y53692D01*
724 | G01X1937Y53692D02*
725 | G01X1937Y53876D01*
726 | G01X1957Y53937D01*
727 | G01X1978Y53958D01*
728 | G01X2019Y53978D01*
729 | G01X2060Y53978D01*
730 | G01X2100Y53958D01*
731 | G01X2121Y53937D01*
732 | G01X2141Y53876D01*
733 | G01X2141Y53692D01*
734 | G01X2141Y53835D02*
735 | G01X2366Y53978D01*
736 | G01X1998Y54399D02*
737 | G01X1957Y54359D01*
738 | G01X1937Y54297D01*
739 | G01X1937Y54215D01*
740 | G01X1957Y54154D01*
741 | G01X1998Y54113D01*
742 | G01X2039Y54113D01*
743 | G01X2080Y54134D01*
744 | G01X2100Y54154D01*
745 | G01X2121Y54195D01*
746 | G01X2162Y54318D01*
747 | G01X2182Y54359D01*
748 | G01X2203Y54379D01*
749 | G01X2244Y54399D01*
750 | G01X2305Y54399D01*
751 | G01X2346Y54359D01*
752 | G01X2366Y54297D01*
753 | G01X2366Y54215D01*
754 | G01X2346Y54154D01*
755 | G01X2305Y54113D01*
756 | G01X1937Y54678D02*
757 | G01X2366Y54678D01*
758 | G01X1937Y54534D02*
759 | G01X1937Y54821D01*
760 | G01X5682Y51500D02*
761 | G01X5990Y51500D01*
762 | G01X6051Y51519D01*
763 | G01X6092Y51561D01*
764 | G01X6113Y51623D01*
765 | G01X6113Y51663D01*
766 | G01X6092Y51725D01*
767 | G01X6051Y51765D01*
768 | G01X5990Y51786D01*
769 | G01X5682Y51786D01*
770 | G01X5682Y52126D02*
771 | G01X5969Y51921D01*
772 | G01X5969Y52228D01*
773 | G01X5682Y52126D02*
774 | G01X6113Y52126D01*
775 | G01X6500Y54129D02*
776 | G01X6500Y53700D01*
777 | G01X6500Y54129D02*
778 | G01X6684Y54129D01*
779 | G01X6744Y54109D01*
780 | G01X6765Y54088D01*
781 | G01X6786Y54048D01*
782 | G01X6786Y54007D01*
783 | G01X6765Y53965D01*
784 | G01X6744Y53944D01*
785 | G01X6684Y53925D01*
786 | G01X6500Y53925D01*
787 | G01X6642Y53925D02*
788 | G01X6786Y53700D01*
789 | G01X7023Y54129D02*
790 | G01X6961Y54109D01*
791 | G01X6942Y54067D01*
792 | G01X6942Y54027D01*
793 | G01X6961Y53986D01*
794 | G01X7003Y53965D01*
795 | G01X7084Y53944D01*
796 | G01X7146Y53925D01*
797 | G01X7186Y53884D01*
798 | G01X7207Y53842D01*
799 | G01X7207Y53782D01*
800 | G01X7186Y53740D01*
801 | G01X7167Y53719D01*
802 | G01X7105Y53700D01*
803 | G01X7023Y53700D01*
804 | G01X6961Y53719D01*
805 | G01X6942Y53740D01*
806 | G01X6921Y53782D01*
807 | G01X6921Y53842D01*
808 | G01X6942Y53884D01*
809 | G01X6982Y53925D01*
810 | G01X7044Y53944D01*
811 | G01X7126Y53965D01*
812 | G01X7167Y53986D01*
813 | G01X7186Y54027D01*
814 | G01X7186Y54067D01*
815 | G01X7167Y54109D01*
816 | G01X7105Y54129D01*
817 | G01X7023Y54129D01*
818 | G01X5418Y25000D02*
819 | G01X5848Y25000D01*
820 | G01X5848Y25000D02*
821 | G01X5848Y25244D01*
822 | G01X5418Y25380D02*
823 | G01X5848Y25380D01*
824 | G01X5418Y25380D02*
825 | G01X5418Y25646D01*
826 | G01X5623Y25380D02*
827 | G01X5623Y25544D01*
828 | G01X5848Y25380D02*
829 | G01X5848Y25646D01*
830 | G01X5418Y25780D02*
831 | G01X5848Y25780D01*
832 | G01X5418Y25780D02*
833 | G01X5418Y25925D01*
834 | G01X5439Y25986D01*
835 | G01X5480Y26027D01*
836 | G01X5521Y26046D01*
837 | G01X5582Y26067D01*
838 | G01X5684Y26067D01*
839 | G01X5746Y26046D01*
840 | G01X5787Y26027D01*
841 | G01X5827Y25986D01*
842 | G01X5848Y25925D01*
843 | G01X5848Y25780D01*
844 | G01X5521Y26223D02*
845 | G01X5500Y26223D01*
846 | G01X5459Y26244D01*
847 | G01X5439Y26263D01*
848 | G01X5418Y26305D01*
849 | G01X5418Y26386D01*
850 | G01X5439Y26428D01*
851 | G01X5459Y26448D01*
852 | G01X5500Y26469D01*
853 | G01X5541Y26469D01*
854 | G01X5582Y26448D01*
855 | G01X5643Y26407D01*
856 | G01X5848Y26203D01*
857 | G01X5848Y26488D01*
858 | G01X5418Y27500D02*
859 | G01X5848Y27500D01*
860 | G01X5848Y27500D02*
861 | G01X5848Y27744D01*
862 | G01X5418Y27880D02*
863 | G01X5848Y27880D01*
864 | G01X5418Y27880D02*
865 | G01X5418Y28146D01*
866 | G01X5623Y27880D02*
867 | G01X5623Y28044D01*
868 | G01X5848Y27880D02*
869 | G01X5848Y28146D01*
870 | G01X5418Y28280D02*
871 | G01X5848Y28280D01*
872 | G01X5418Y28280D02*
873 | G01X5418Y28425D01*
874 | G01X5439Y28486D01*
875 | G01X5480Y28527D01*
876 | G01X5521Y28546D01*
877 | G01X5582Y28567D01*
878 | G01X5684Y28567D01*
879 | G01X5746Y28546D01*
880 | G01X5787Y28527D01*
881 | G01X5827Y28486D01*
882 | G01X5848Y28425D01*
883 | G01X5848Y28280D01*
884 | G01X5418Y28744D02*
885 | G01X5418Y28969D01*
886 | G01X5582Y28846D01*
887 | G01X5582Y28907D01*
888 | G01X5602Y28948D01*
889 | G01X5623Y28969D01*
890 | G01X5684Y28988D01*
891 | G01X5725Y28988D01*
892 | G01X5787Y28969D01*
893 | G01X5827Y28928D01*
894 | G01X5848Y28865D01*
895 | G01X5848Y28805D01*
896 | G01X5827Y28744D01*
897 | G01X5807Y28723D01*
898 | G01X5766Y28703D01*
899 | G01X5418Y30000D02*
900 | G01X5848Y30000D01*
901 | G01X5848Y30000D02*
902 | G01X5848Y30244D01*
903 | G01X5418Y30380D02*
904 | G01X5848Y30380D01*
905 | G01X5418Y30380D02*
906 | G01X5418Y30646D01*
907 | G01X5623Y30380D02*
908 | G01X5623Y30544D01*
909 | G01X5848Y30380D02*
910 | G01X5848Y30646D01*
911 | G01X5418Y30780D02*
912 | G01X5848Y30780D01*
913 | G01X5418Y30780D02*
914 | G01X5418Y30925D01*
915 | G01X5439Y30986D01*
916 | G01X5480Y31027D01*
917 | G01X5521Y31046D01*
918 | G01X5582Y31067D01*
919 | G01X5684Y31067D01*
920 | G01X5746Y31046D01*
921 | G01X5787Y31027D01*
922 | G01X5827Y30986D01*
923 | G01X5848Y30925D01*
924 | G01X5848Y30780D01*
925 | G01X5418Y31407D02*
926 | G01X5705Y31203D01*
927 | G01X5705Y31509D01*
928 | G01X5418Y31407D02*
929 | G01X5848Y31407D01*
930 | G01X5418Y10000D02*
931 | G01X5848Y10000D01*
932 | G01X5848Y10000D02*
933 | G01X5848Y10244D01*
934 | G01X5418Y10380D02*
935 | G01X5848Y10380D01*
936 | G01X5418Y10380D02*
937 | G01X5418Y10646D01*
938 | G01X5623Y10380D02*
939 | G01X5623Y10544D01*
940 | G01X5848Y10380D02*
941 | G01X5848Y10646D01*
942 | G01X5418Y10780D02*
943 | G01X5848Y10780D01*
944 | G01X5418Y10780D02*
945 | G01X5418Y10925D01*
946 | G01X5439Y10986D01*
947 | G01X5480Y11026D01*
948 | G01X5521Y11046D01*
949 | G01X5582Y11067D01*
950 | G01X5684Y11067D01*
951 | G01X5746Y11046D01*
952 | G01X5787Y11026D01*
953 | G01X5827Y10986D01*
954 | G01X5848Y10925D01*
955 | G01X5848Y10780D01*
956 | G01X5418Y11448D02*
957 | G01X5418Y11244D01*
958 | G01X5602Y11223D01*
959 | G01X5582Y11244D01*
960 | G01X5562Y11305D01*
961 | G01X5562Y11365D01*
962 | G01X5582Y11428D01*
963 | G01X5623Y11469D01*
964 | G01X5684Y11488D01*
965 | G01X5725Y11488D01*
966 | G01X5787Y11469D01*
967 | G01X5827Y11428D01*
968 | G01X5848Y11365D01*
969 | G01X5848Y11305D01*
970 | G01X5827Y11244D01*
971 | G01X5807Y11223D01*
972 | G01X5766Y11203D01*
973 | G01X5418Y7500D02*
974 | G01X5848Y7500D01*
975 | G01X5848Y7500D02*
976 | G01X5848Y7744D01*
977 | G01X5418Y7880D02*
978 | G01X5848Y7880D01*
979 | G01X5418Y7880D02*
980 | G01X5418Y8146D01*
981 | G01X5623Y7880D02*
982 | G01X5623Y8044D01*
983 | G01X5848Y7880D02*
984 | G01X5848Y8146D01*
985 | G01X5418Y8280D02*
986 | G01X5848Y8280D01*
987 | G01X5418Y8280D02*
988 | G01X5418Y8425D01*
989 | G01X5439Y8486D01*
990 | G01X5480Y8526D01*
991 | G01X5521Y8546D01*
992 | G01X5582Y8567D01*
993 | G01X5684Y8567D01*
994 | G01X5746Y8546D01*
995 | G01X5787Y8526D01*
996 | G01X5827Y8486D01*
997 | G01X5848Y8425D01*
998 | G01X5848Y8280D01*
999 | G01X5480Y8948D02*
1000 | G01X5439Y8928D01*
1001 | G01X5418Y8865D01*
1002 | G01X5418Y8825D01*
1003 | G01X5439Y8763D01*
1004 | G01X5500Y8723D01*
1005 | G01X5602Y8703D01*
1006 | G01X5705Y8703D01*
1007 | G01X5787Y8723D01*
1008 | G01X5827Y8763D01*
1009 | G01X5848Y8825D01*
1010 | G01X5848Y8846D01*
1011 | G01X5827Y8907D01*
1012 | G01X5787Y8948D01*
1013 | G01X5725Y8969D01*
1014 | G01X5705Y8969D01*
1015 | G01X5643Y8948D01*
1016 | G01X5602Y8907D01*
1017 | G01X5582Y8846D01*
1018 | G01X5582Y8825D01*
1019 | G01X5602Y8763D01*
1020 | G01X5643Y8723D01*
1021 | G01X5705Y8703D01*
1022 | G01X5418Y5000D02*
1023 | G01X5848Y5000D01*
1024 | G01X5848Y5000D02*
1025 | G01X5848Y5244D01*
1026 | G01X5418Y5380D02*
1027 | G01X5848Y5380D01*
1028 | G01X5418Y5380D02*
1029 | G01X5418Y5646D01*
1030 | G01X5623Y5380D02*
1031 | G01X5623Y5544D01*
1032 | G01X5848Y5380D02*
1033 | G01X5848Y5646D01*
1034 | G01X5418Y5780D02*
1035 | G01X5848Y5780D01*
1036 | G01X5418Y5780D02*
1037 | G01X5418Y5925D01*
1038 | G01X5439Y5986D01*
1039 | G01X5480Y6026D01*
1040 | G01X5521Y6046D01*
1041 | G01X5582Y6067D01*
1042 | G01X5684Y6067D01*
1043 | G01X5746Y6046D01*
1044 | G01X5787Y6026D01*
1045 | G01X5827Y5986D01*
1046 | G01X5848Y5925D01*
1047 | G01X5848Y5780D01*
1048 | G01X5418Y6488D02*
1049 | G01X5848Y6284D01*
1050 | G01X5418Y6203D02*
1051 | G01X5418Y6488D01*
1052 | G01X5418Y2500D02*
1053 | G01X5848Y2500D01*
1054 | G01X5848Y2500D02*
1055 | G01X5848Y2744D01*
1056 | G01X5418Y2880D02*
1057 | G01X5848Y2880D01*
1058 | G01X5418Y2880D02*
1059 | G01X5418Y3146D01*
1060 | G01X5623Y2880D02*
1061 | G01X5623Y3044D01*
1062 | G01X5848Y2880D02*
1063 | G01X5848Y3146D01*
1064 | G01X5418Y3280D02*
1065 | G01X5848Y3280D01*
1066 | G01X5418Y3280D02*
1067 | G01X5418Y3425D01*
1068 | G01X5439Y3486D01*
1069 | G01X5480Y3526D01*
1070 | G01X5521Y3546D01*
1071 | G01X5582Y3567D01*
1072 | G01X5684Y3567D01*
1073 | G01X5746Y3546D01*
1074 | G01X5787Y3526D01*
1075 | G01X5827Y3486D01*
1076 | G01X5848Y3425D01*
1077 | G01X5848Y3280D01*
1078 | G01X5418Y3805D02*
1079 | G01X5439Y3744D01*
1080 | G01X5480Y3723D01*
1081 | G01X5521Y3723D01*
1082 | G01X5562Y3744D01*
1083 | G01X5582Y3784D01*
1084 | G01X5602Y3865D01*
1085 | G01X5623Y3928D01*
1086 | G01X5664Y3969D01*
1087 | G01X5705Y3988D01*
1088 | G01X5766Y3988D01*
1089 | G01X5807Y3969D01*
1090 | G01X5827Y3948D01*
1091 | G01X5848Y3886D01*
1092 | G01X5848Y3805D01*
1093 | G01X5827Y3744D01*
1094 | G01X5807Y3723D01*
1095 | G01X5766Y3703D01*
1096 | G01X5705Y3703D01*
1097 | G01X5664Y3723D01*
1098 | G01X5623Y3763D01*
1099 | G01X5602Y3825D01*
1100 | G01X5582Y3907D01*
1101 | G01X5562Y3948D01*
1102 | G01X5521Y3969D01*
1103 | G01X5480Y3969D01*
1104 | G01X5439Y3948D01*
1105 | G01X5418Y3886D01*
1106 | G01X5418Y3805D01*
1107 | G01X5418Y40000D02*
1108 | G01X5848Y40000D01*
1109 | G01X5848Y40000D02*
1110 | G01X5848Y40244D01*
1111 | G01X5418Y40380D02*
1112 | G01X5848Y40380D01*
1113 | G01X5418Y40380D02*
1114 | G01X5418Y40646D01*
1115 | G01X5623Y40380D02*
1116 | G01X5623Y40544D01*
1117 | G01X5848Y40380D02*
1118 | G01X5848Y40646D01*
1119 | G01X5418Y40780D02*
1120 | G01X5848Y40780D01*
1121 | G01X5418Y40780D02*
1122 | G01X5418Y40925D01*
1123 | G01X5439Y40986D01*
1124 | G01X5480Y41027D01*
1125 | G01X5521Y41046D01*
1126 | G01X5582Y41067D01*
1127 | G01X5684Y41067D01*
1128 | G01X5746Y41046D01*
1129 | G01X5787Y41027D01*
1130 | G01X5827Y40986D01*
1131 | G01X5848Y40925D01*
1132 | G01X5848Y40780D01*
1133 | G01X5562Y41469D02*
1134 | G01X5623Y41448D01*
1135 | G01X5664Y41407D01*
1136 | G01X5684Y41346D01*
1137 | G01X5684Y41325D01*
1138 | G01X5664Y41263D01*
1139 | G01X5623Y41223D01*
1140 | G01X5562Y41203D01*
1141 | G01X5541Y41203D01*
1142 | G01X5480Y41223D01*
1143 | G01X5439Y41263D01*
1144 | G01X5418Y41325D01*
1145 | G01X5418Y41346D01*
1146 | G01X5439Y41407D01*
1147 | G01X5480Y41448D01*
1148 | G01X5562Y41469D01*
1149 | G01X5664Y41469D01*
1150 | G01X5766Y41448D01*
1151 | G01X5827Y41407D01*
1152 | G01X5848Y41346D01*
1153 | G01X5848Y41305D01*
1154 | G01X5827Y41244D01*
1155 | G01X5787Y41223D01*
1156 | G01X5418Y37500D02*
1157 | G01X5848Y37500D01*
1158 | G01X5848Y37500D02*
1159 | G01X5848Y37744D01*
1160 | G01X5418Y37880D02*
1161 | G01X5848Y37880D01*
1162 | G01X5418Y37880D02*
1163 | G01X5418Y38146D01*
1164 | G01X5623Y37880D02*
1165 | G01X5623Y38044D01*
1166 | G01X5848Y37880D02*
1167 | G01X5848Y38146D01*
1168 | G01X5418Y38280D02*
1169 | G01X5848Y38280D01*
1170 | G01X5418Y38280D02*
1171 | G01X5418Y38425D01*
1172 | G01X5439Y38486D01*
1173 | G01X5480Y38527D01*
1174 | G01X5521Y38546D01*
1175 | G01X5582Y38567D01*
1176 | G01X5684Y38567D01*
1177 | G01X5746Y38546D01*
1178 | G01X5787Y38527D01*
1179 | G01X5827Y38486D01*
1180 | G01X5848Y38425D01*
1181 | G01X5848Y38280D01*
1182 | G01X5500Y38703D02*
1183 | G01X5480Y38744D01*
1184 | G01X5418Y38805D01*
1185 | G01X5848Y38805D01*
1186 | G01X5418Y39063D02*
1187 | G01X5439Y39001D01*
1188 | G01X5500Y38959D01*
1189 | G01X5602Y38940D01*
1190 | G01X5664Y38940D01*
1191 | G01X5766Y38959D01*
1192 | G01X5827Y39001D01*
1193 | G01X5848Y39063D01*
1194 | G01X5848Y39104D01*
1195 | G01X5827Y39165D01*
1196 | G01X5766Y39205D01*
1197 | G01X5664Y39226D01*
1198 | G01X5602Y39226D01*
1199 | G01X5500Y39205D01*
1200 | G01X5439Y39165D01*
1201 | G01X5418Y39104D01*
1202 | G01X5418Y39063D01*
1203 | G01X5418Y35000D02*
1204 | G01X5848Y35000D01*
1205 | G01X5848Y35000D02*
1206 | G01X5848Y35244D01*
1207 | G01X5418Y35380D02*
1208 | G01X5848Y35380D01*
1209 | G01X5418Y35380D02*
1210 | G01X5418Y35646D01*
1211 | G01X5623Y35380D02*
1212 | G01X5623Y35544D01*
1213 | G01X5848Y35380D02*
1214 | G01X5848Y35646D01*
1215 | G01X5418Y35780D02*
1216 | G01X5848Y35780D01*
1217 | G01X5418Y35780D02*
1218 | G01X5418Y35925D01*
1219 | G01X5439Y35986D01*
1220 | G01X5480Y36027D01*
1221 | G01X5521Y36046D01*
1222 | G01X5582Y36067D01*
1223 | G01X5684Y36067D01*
1224 | G01X5746Y36046D01*
1225 | G01X5787Y36027D01*
1226 | G01X5827Y35986D01*
1227 | G01X5848Y35925D01*
1228 | G01X5848Y35780D01*
1229 | G01X5500Y36203D02*
1230 | G01X5480Y36244D01*
1231 | G01X5418Y36305D01*
1232 | G01X5848Y36305D01*
1233 | G01X5500Y36440D02*
1234 | G01X5480Y36480D01*
1235 | G01X5418Y36542D01*
1236 | G01X5848Y36542D01*
1237 | G01X5418Y32500D02*
1238 | G01X5848Y32500D01*
1239 | G01X5848Y32500D02*
1240 | G01X5848Y32744D01*
1241 | G01X5418Y32880D02*
1242 | G01X5848Y32880D01*
1243 | G01X5418Y32880D02*
1244 | G01X5418Y33146D01*
1245 | G01X5623Y32880D02*
1246 | G01X5623Y33044D01*
1247 | G01X5848Y32880D02*
1248 | G01X5848Y33146D01*
1249 | G01X5418Y33280D02*
1250 | G01X5848Y33280D01*
1251 | G01X5418Y33280D02*
1252 | G01X5418Y33425D01*
1253 | G01X5439Y33486D01*
1254 | G01X5480Y33527D01*
1255 | G01X5521Y33546D01*
1256 | G01X5582Y33567D01*
1257 | G01X5684Y33567D01*
1258 | G01X5746Y33546D01*
1259 | G01X5787Y33527D01*
1260 | G01X5827Y33486D01*
1261 | G01X5848Y33425D01*
1262 | G01X5848Y33280D01*
1263 | G01X5500Y33703D02*
1264 | G01X5480Y33744D01*
1265 | G01X5418Y33805D01*
1266 | G01X5848Y33805D01*
1267 | G01X5521Y33959D02*
1268 | G01X5500Y33959D01*
1269 | G01X5459Y33980D01*
1270 | G01X5439Y34001D01*
1271 | G01X5418Y34042D01*
1272 | G01X5418Y34123D01*
1273 | G01X5439Y34165D01*
1274 | G01X5459Y34184D01*
1275 | G01X5500Y34205D01*
1276 | G01X5541Y34205D01*
1277 | G01X5582Y34184D01*
1278 | G01X5643Y34144D01*
1279 | G01X5848Y33940D01*
1280 | G01X5848Y34226D01*
1281 | G01X5418Y12500D02*
1282 | G01X5848Y12500D01*
1283 | G01X5848Y12500D02*
1284 | G01X5848Y12744D01*
1285 | G01X5418Y12880D02*
1286 | G01X5848Y12880D01*
1287 | G01X5418Y12880D02*
1288 | G01X5418Y13146D01*
1289 | G01X5623Y12880D02*
1290 | G01X5623Y13044D01*
1291 | G01X5848Y12880D02*
1292 | G01X5848Y13146D01*
1293 | G01X5418Y13280D02*
1294 | G01X5848Y13280D01*
1295 | G01X5418Y13280D02*
1296 | G01X5418Y13425D01*
1297 | G01X5439Y13486D01*
1298 | G01X5480Y13526D01*
1299 | G01X5521Y13546D01*
1300 | G01X5582Y13567D01*
1301 | G01X5684Y13567D01*
1302 | G01X5746Y13546D01*
1303 | G01X5787Y13526D01*
1304 | G01X5827Y13486D01*
1305 | G01X5848Y13425D01*
1306 | G01X5848Y13280D01*
1307 | G01X5500Y13703D02*
1308 | G01X5480Y13744D01*
1309 | G01X5418Y13805D01*
1310 | G01X5848Y13805D01*
1311 | G01X5418Y13980D02*
1312 | G01X5418Y14205D01*
1313 | G01X5582Y14082D01*
1314 | G01X5582Y14144D01*
1315 | G01X5602Y14184D01*
1316 | G01X5623Y14205D01*
1317 | G01X5684Y14226D01*
1318 | G01X5725Y14226D01*
1319 | G01X5787Y14205D01*
1320 | G01X5827Y14165D01*
1321 | G01X5848Y14103D01*
1322 | G01X5848Y14042D01*
1323 | G01X5827Y13980D01*
1324 | G01X5807Y13959D01*
1325 | G01X5766Y13940D01*
1326 | G01X5418Y15000D02*
1327 | G01X5848Y15000D01*
1328 | G01X5848Y15000D02*
1329 | G01X5848Y15244D01*
1330 | G01X5418Y15380D02*
1331 | G01X5848Y15380D01*
1332 | G01X5418Y15380D02*
1333 | G01X5418Y15646D01*
1334 | G01X5623Y15380D02*
1335 | G01X5623Y15544D01*
1336 | G01X5848Y15380D02*
1337 | G01X5848Y15646D01*
1338 | G01X5418Y15780D02*
1339 | G01X5848Y15780D01*
1340 | G01X5418Y15780D02*
1341 | G01X5418Y15925D01*
1342 | G01X5439Y15986D01*
1343 | G01X5480Y16026D01*
1344 | G01X5521Y16046D01*
1345 | G01X5582Y16067D01*
1346 | G01X5684Y16067D01*
1347 | G01X5746Y16046D01*
1348 | G01X5787Y16026D01*
1349 | G01X5827Y15986D01*
1350 | G01X5848Y15925D01*
1351 | G01X5848Y15780D01*
1352 | G01X5500Y16203D02*
1353 | G01X5480Y16244D01*
1354 | G01X5418Y16305D01*
1355 | G01X5848Y16305D01*
1356 | G01X5418Y16644D02*
1357 | G01X5705Y16440D01*
1358 | G01X5705Y16746D01*
1359 | G01X5418Y16644D02*
1360 | G01X5848Y16644D01*
1361 | G01X5418Y17500D02*
1362 | G01X5848Y17500D01*
1363 | G01X5848Y17500D02*
1364 | G01X5848Y17744D01*
1365 | G01X5418Y17880D02*
1366 | G01X5848Y17880D01*
1367 | G01X5418Y17880D02*
1368 | G01X5418Y18146D01*
1369 | G01X5623Y17880D02*
1370 | G01X5623Y18044D01*
1371 | G01X5848Y17880D02*
1372 | G01X5848Y18146D01*
1373 | G01X5418Y18280D02*
1374 | G01X5848Y18280D01*
1375 | G01X5418Y18280D02*
1376 | G01X5418Y18425D01*
1377 | G01X5439Y18486D01*
1378 | G01X5480Y18527D01*
1379 | G01X5521Y18546D01*
1380 | G01X5582Y18567D01*
1381 | G01X5684Y18567D01*
1382 | G01X5746Y18546D01*
1383 | G01X5787Y18527D01*
1384 | G01X5827Y18486D01*
1385 | G01X5848Y18425D01*
1386 | G01X5848Y18280D01*
1387 | G01X5500Y18703D02*
1388 | G01X5480Y18744D01*
1389 | G01X5418Y18805D01*
1390 | G01X5848Y18805D01*
1391 | G01X5418Y19184D02*
1392 | G01X5418Y18980D01*
1393 | G01X5602Y18959D01*
1394 | G01X5582Y18980D01*
1395 | G01X5562Y19042D01*
1396 | G01X5562Y19103D01*
1397 | G01X5582Y19165D01*
1398 | G01X5623Y19205D01*
1399 | G01X5684Y19226D01*
1400 | G01X5725Y19226D01*
1401 | G01X5787Y19205D01*
1402 | G01X5827Y19165D01*
1403 | G01X5848Y19103D01*
1404 | G01X5848Y19042D01*
1405 | G01X5827Y18980D01*
1406 | G01X5807Y18959D01*
1407 | G01X5766Y18940D01*
1408 | G01X5418Y20000D02*
1409 | G01X5848Y20000D01*
1410 | G01X5848Y20000D02*
1411 | G01X5848Y20244D01*
1412 | G01X5418Y20380D02*
1413 | G01X5848Y20380D01*
1414 | G01X5418Y20380D02*
1415 | G01X5418Y20646D01*
1416 | G01X5623Y20380D02*
1417 | G01X5623Y20544D01*
1418 | G01X5848Y20380D02*
1419 | G01X5848Y20646D01*
1420 | G01X5418Y20780D02*
1421 | G01X5848Y20780D01*
1422 | G01X5418Y20780D02*
1423 | G01X5418Y20925D01*
1424 | G01X5439Y20986D01*
1425 | G01X5480Y21027D01*
1426 | G01X5521Y21046D01*
1427 | G01X5582Y21067D01*
1428 | G01X5684Y21067D01*
1429 | G01X5746Y21046D01*
1430 | G01X5787Y21027D01*
1431 | G01X5827Y20986D01*
1432 | G01X5848Y20925D01*
1433 | G01X5848Y20780D01*
1434 | G01X5500Y21203D02*
1435 | G01X5480Y21244D01*
1436 | G01X5418Y21305D01*
1437 | G01X5848Y21305D01*
1438 | G01X5480Y21684D02*
1439 | G01X5439Y21665D01*
1440 | G01X5418Y21603D01*
1441 | G01X5418Y21563D01*
1442 | G01X5439Y21501D01*
1443 | G01X5500Y21459D01*
1444 | G01X5602Y21440D01*
1445 | G01X5705Y21440D01*
1446 | G01X5787Y21459D01*
1447 | G01X5827Y21501D01*
1448 | G01X5848Y21563D01*
1449 | G01X5848Y21582D01*
1450 | G01X5827Y21644D01*
1451 | G01X5787Y21684D01*
1452 | G01X5725Y21705D01*
1453 | G01X5705Y21705D01*
1454 | G01X5643Y21684D01*
1455 | G01X5602Y21644D01*
1456 | G01X5582Y21582D01*
1457 | G01X5582Y21563D01*
1458 | G01X5602Y21501D01*
1459 | G01X5643Y21459D01*
1460 | G01X5705Y21440D01*
1461 | G01X4723Y46857D02*
1462 | G01X4682Y46836D01*
1463 | G01X4640Y46794D01*
1464 | G01X4621Y46755D01*
1465 | G01X4621Y46673D01*
1466 | G01X4640Y46632D01*
1467 | G01X4682Y46590D01*
1468 | G01X4723Y46569D01*
1469 | G01X4784Y46550D01*
1470 | G01X4886Y46550D01*
1471 | G01X4948Y46569D01*
1472 | G01X4988Y46590D01*
1473 | G01X5030Y46632D01*
1474 | G01X5050Y46673D01*
1475 | G01X5050Y46755D01*
1476 | G01X5030Y46794D01*
1477 | G01X4988Y46836D01*
1478 | G01X4948Y46857D01*
1479 | G01X4701Y46992D02*
1480 | G01X4682Y47032D01*
1481 | G01X4621Y47094D01*
1482 | G01X5050Y47094D01*
1483 | G01X5423Y46857D02*
1484 | G01X5382Y46836D01*
1485 | G01X5340Y46794D01*
1486 | G01X5321Y46755D01*
1487 | G01X5321Y46673D01*
1488 | G01X5340Y46632D01*
1489 | G01X5382Y46590D01*
1490 | G01X5423Y46569D01*
1491 | G01X5484Y46550D01*
1492 | G01X5586Y46550D01*
1493 | G01X5648Y46569D01*
1494 | G01X5688Y46590D01*
1495 | G01X5730Y46632D01*
1496 | G01X5750Y46673D01*
1497 | G01X5750Y46755D01*
1498 | G01X5730Y46794D01*
1499 | G01X5688Y46836D01*
1500 | G01X5648Y46857D01*
1501 | G01X5423Y47011D02*
1502 | G01X5401Y47011D01*
1503 | G01X5361Y47032D01*
1504 | G01X5340Y47053D01*
1505 | G01X5321Y47094D01*
1506 | G01X5321Y47176D01*
1507 | G01X5340Y47217D01*
1508 | G01X5361Y47236D01*
1509 | G01X5401Y47257D01*
1510 | G01X5442Y47257D01*
1511 | G01X5484Y47236D01*
1512 | G01X5546Y47196D01*
1513 | G01X5750Y46992D01*
1514 | G01X5750Y47278D01*
1515 | G01X7257Y48059D02*
1516 | G01X7236Y48100D01*
1517 | G01X7194Y48140D01*
1518 | G01X7155Y48161D01*
1519 | G01X7073Y48161D01*
1520 | G01X7032Y48140D01*
1521 | G01X6990Y48100D01*
1522 | G01X6969Y48059D01*
1523 | G01X6950Y47998D01*
1524 | G01X6950Y47896D01*
1525 | G01X6969Y47834D01*
1526 | G01X6990Y47792D01*
1527 | G01X7032Y47752D01*
1528 | G01X7073Y47732D01*
1529 | G01X7155Y47732D01*
1530 | G01X7194Y47752D01*
1531 | G01X7236Y47792D01*
1532 | G01X7257Y47834D01*
1533 | G01X7432Y48161D02*
1534 | G01X7657Y48161D01*
1535 | G01X7534Y47998D01*
1536 | G01X7596Y47998D01*
1537 | G01X7636Y47977D01*
1538 | G01X7657Y47957D01*
1539 | G01X7678Y47896D01*
1540 | G01X7678Y47855D01*
1541 | G01X7657Y47792D01*
1542 | G01X7617Y47752D01*
1543 | G01X7555Y47732D01*
1544 | G01X7494Y47732D01*
1545 | G01X7432Y47752D01*
1546 | G01X7411Y47773D01*
1547 | G01X7392Y47813D01*
1548 | G01X7286Y49057D02*
1549 | G01X7265Y49098D01*
1550 | G01X7225Y49139D01*
1551 | G01X7184Y49159D01*
1552 | G01X7103Y49159D01*
1553 | G01X7061Y49139D01*
1554 | G01X7021Y49098D01*
1555 | G01X7000Y49057D01*
1556 | G01X6980Y48996D01*
1557 | G01X6980Y48894D01*
1558 | G01X7000Y48832D01*
1559 | G01X7021Y48791D01*
1560 | G01X7061Y48750D01*
1561 | G01X7103Y48730D01*
1562 | G01X7184Y48730D01*
1563 | G01X7225Y48750D01*
1564 | G01X7265Y48791D01*
1565 | G01X7286Y48832D01*
1566 | G01X7626Y49159D02*
1567 | G01X7421Y48873D01*
1568 | G01X7728Y48873D01*
1569 | G01X7626Y49159D02*
1570 | G01X7626Y48730D01*
1571 | G01X11340Y63092D02*
1572 | G01X11769Y63092D01*
1573 | G01X11340Y63092D02*
1574 | G01X11340Y63277D01*
1575 | G01X11360Y63338D01*
1576 | G01X11380Y63359D01*
1577 | G01X11421Y63379D01*
1578 | G01X11462Y63379D01*
1579 | G01X11503Y63359D01*
1580 | G01X11524Y63338D01*
1581 | G01X11544Y63277D01*
1582 | G01X11544Y63092D01*
1583 | G01X11544Y63236D02*
1584 | G01X11769Y63379D01*
1585 | G01X11340Y63513D02*
1586 | G01X11769Y63513D01*
1587 | G01X11340Y63513D02*
1588 | G01X11340Y63698D01*
1589 | G01X11360Y63759D01*
1590 | G01X11380Y63780D01*
1591 | G01X11421Y63801D01*
1592 | G01X11462Y63801D01*
1593 | G01X11503Y63780D01*
1594 | G01X11524Y63759D01*
1595 | G01X11544Y63698D01*
1596 | G01X11544Y63513D01*
1597 | G01X11544Y63657D02*
1598 | G01X11769Y63801D01*
1599 | G01X11340Y63936D02*
1600 | G01X11769Y63936D01*
1601 | G01X11340Y63936D02*
1602 | G01X11340Y64202D01*
1603 | G01X11544Y63936D02*
1604 | G01X11544Y64098D01*
1605 | G01X11769Y63936D02*
1606 | G01X11769Y64202D01*
1607 | G01X11340Y64336D02*
1608 | G01X11769Y64336D01*
1609 | G01X11340Y64336D02*
1610 | G01X11340Y64603D01*
1611 | G01X11544Y64336D02*
1612 | G01X11544Y64500D01*
1613 | G01X11421Y64738D02*
1614 | G01X11401Y64778D01*
1615 | G01X11340Y64840D01*
1616 | G01X11769Y64840D01*
1617 | G01X11138Y58400D02*
1618 | G01X11567Y58400D01*
1619 | G01X11138Y58400D02*
1620 | G01X11138Y58584D01*
1621 | G01X11159Y58644D01*
1622 | G01X11178Y58665D01*
1623 | G01X11219Y58686D01*
1624 | G01X11261Y58686D01*
1625 | G01X11301Y58665D01*
1626 | G01X11323Y58644D01*
1627 | G01X11342Y58584D01*
1628 | G01X11342Y58400D01*
1629 | G01X11342Y58542D02*
1630 | G01X11567Y58686D01*
1631 | G01X11138Y58821D02*
1632 | G01X11567Y58821D01*
1633 | G01X11138Y58821D02*
1634 | G01X11138Y59005D01*
1635 | G01X11159Y59067D01*
1636 | G01X11178Y59086D01*
1637 | G01X11219Y59107D01*
1638 | G01X11261Y59107D01*
1639 | G01X11301Y59086D01*
1640 | G01X11323Y59067D01*
1641 | G01X11342Y59005D01*
1642 | G01X11342Y58821D01*
1643 | G01X11342Y58965D02*
1644 | G01X11567Y59107D01*
1645 | G01X11138Y59242D02*
1646 | G01X11567Y59242D01*
1647 | G01X11138Y59242D02*
1648 | G01X11138Y59509D01*
1649 | G01X11342Y59242D02*
1650 | G01X11342Y59405D01*
1651 | G01X11567Y59242D02*
1652 | G01X11567Y59509D01*
1653 | G01X11138Y59644D02*
1654 | G01X11567Y59644D01*
1655 | G01X11138Y59644D02*
1656 | G01X11138Y59909D01*
1657 | G01X11342Y59644D02*
1658 | G01X11342Y59807D01*
1659 | G01X11240Y60065D02*
1660 | G01X11219Y60065D01*
1661 | G01X11178Y60084D01*
1662 | G01X11159Y60105D01*
1663 | G01X11138Y60146D01*
1664 | G01X11138Y60229D01*
1665 | G01X11159Y60269D01*
1666 | G01X11178Y60290D01*
1667 | G01X11219Y60309D01*
1668 | G01X11261Y60309D01*
1669 | G01X11301Y60290D01*
1670 | G01X11363Y60248D01*
1671 | G01X11567Y60044D01*
1672 | G01X11567Y60330D01*
1673 | G01X8373Y61900D02*
1674 | G01X8680Y61900D01*
1675 | G01X8740Y61919D01*
1676 | G01X8782Y61961D01*
1677 | G01X8803Y62023D01*
1678 | G01X8803Y62063D01*
1679 | G01X8782Y62125D01*
1680 | G01X8740Y62165D01*
1681 | G01X8680Y62186D01*
1682 | G01X8373Y62186D01*
1683 | G01X8455Y62321D02*
1684 | G01X8434Y62361D01*
1685 | G01X8373Y62423D01*
1686 | G01X8803Y62423D01*
1687 | G01X8373Y56300D02*
1688 | G01X8680Y56300D01*
1689 | G01X8740Y56319D01*
1690 | G01X8782Y56361D01*
1691 | G01X8803Y56423D01*
1692 | G01X8803Y56463D01*
1693 | G01X8782Y56525D01*
1694 | G01X8740Y56565D01*
1695 | G01X8680Y56586D01*
1696 | G01X8373Y56586D01*
1697 | G01X8373Y56967D02*
1698 | G01X8373Y56761D01*
1699 | G01X8557Y56742D01*
1700 | G01X8536Y56761D01*
1701 | G01X8515Y56823D01*
1702 | G01X8515Y56884D01*
1703 | G01X8536Y56946D01*
1704 | G01X8578Y56986D01*
1705 | G01X8638Y57007D01*
1706 | G01X8680Y57007D01*
1707 | G01X8740Y56986D01*
1708 | G01X8782Y56946D01*
1709 | G01X8803Y56884D01*
1710 | G01X8803Y56823D01*
1711 | G01X8782Y56761D01*
1712 | G01X8761Y56742D01*
1713 | G01X8721Y56721D01*
1714 | G54D10*
1715 | G75*
1716 | G01X6894Y22500D02*
1717 | G03X6894Y22500I-394J0D01*
1718 | G01*
1719 | G75*
1720 | G01X7130Y23445D02*
1721 | G03X7130Y23445I-39J0D01*
1722 | G01*
1723 | G75*
1724 | G01X10045Y52002D02*
1725 | G03X10045Y52002I-246J0D01*
1726 | G01*
1727 | G75*
1728 | G01X3447Y51998D02*
1729 | G03X3447Y51998I-246J0D01*
1730 | G01*
1731 | G75*
1732 | G01X6894Y25000D02*
1733 | G03X6894Y25000I-394J0D01*
1734 | G01*
1735 | G75*
1736 | G01X7130Y25945D02*
1737 | G03X7130Y25945I-39J0D01*
1738 | G01*
1739 | G75*
1740 | G01X6894Y27500D02*
1741 | G03X6894Y27500I-394J0D01*
1742 | G01*
1743 | G75*
1744 | G01X7130Y28445D02*
1745 | G03X7130Y28445I-39J0D01*
1746 | G01*
1747 | G75*
1748 | G01X6894Y30000D02*
1749 | G03X6894Y30000I-394J0D01*
1750 | G01*
1751 | G75*
1752 | G01X7130Y30945D02*
1753 | G03X7130Y30945I-39J0D01*
1754 | G01*
1755 | G75*
1756 | G01X6894Y10000D02*
1757 | G03X6894Y10000I-394J0D01*
1758 | G01*
1759 | G75*
1760 | G01X7130Y10945D02*
1761 | G03X7130Y10945I-39J0D01*
1762 | G01*
1763 | G75*
1764 | G01X6894Y7500D02*
1765 | G03X6894Y7500I-394J0D01*
1766 | G01*
1767 | G75*
1768 | G01X7130Y8445D02*
1769 | G03X7130Y8445I-39J0D01*
1770 | G01*
1771 | G75*
1772 | G01X6894Y5000D02*
1773 | G03X6894Y5000I-394J0D01*
1774 | G01*
1775 | G75*
1776 | G01X7130Y5945D02*
1777 | G03X7130Y5945I-39J0D01*
1778 | G01*
1779 | G75*
1780 | G01X6894Y2500D02*
1781 | G03X6894Y2500I-394J0D01*
1782 | G01*
1783 | G75*
1784 | G01X7130Y3445D02*
1785 | G03X7130Y3445I-39J0D01*
1786 | G01*
1787 | G75*
1788 | G01X6894Y40000D02*
1789 | G03X6894Y40000I-394J0D01*
1790 | G01*
1791 | G75*
1792 | G01X7130Y40945D02*
1793 | G03X7130Y40945I-39J0D01*
1794 | G01*
1795 | G75*
1796 | G01X6894Y37500D02*
1797 | G03X6894Y37500I-394J0D01*
1798 | G01*
1799 | G75*
1800 | G01X7130Y38445D02*
1801 | G03X7130Y38445I-39J0D01*
1802 | G01*
1803 | G75*
1804 | G01X6894Y35000D02*
1805 | G03X6894Y35000I-394J0D01*
1806 | G01*
1807 | G75*
1808 | G01X7130Y35945D02*
1809 | G03X7130Y35945I-39J0D01*
1810 | G01*
1811 | G75*
1812 | G01X6894Y32500D02*
1813 | G03X6894Y32500I-394J0D01*
1814 | G01*
1815 | G75*
1816 | G01X7130Y33445D02*
1817 | G03X7130Y33445I-39J0D01*
1818 | G01*
1819 | G75*
1820 | G01X6894Y12500D02*
1821 | G03X6894Y12500I-394J0D01*
1822 | G01*
1823 | G75*
1824 | G01X7130Y13445D02*
1825 | G03X7130Y13445I-39J0D01*
1826 | G01*
1827 | G75*
1828 | G01X6894Y15000D02*
1829 | G03X6894Y15000I-394J0D01*
1830 | G01*
1831 | G75*
1832 | G01X7130Y15945D02*
1833 | G03X7130Y15945I-39J0D01*
1834 | G01*
1835 | G75*
1836 | G01X6894Y17500D02*
1837 | G03X6894Y17500I-394J0D01*
1838 | G01*
1839 | G75*
1840 | G01X7130Y18445D02*
1841 | G03X7130Y18445I-39J0D01*
1842 | G01*
1843 | G75*
1844 | G01X6894Y20000D02*
1845 | G03X6894Y20000I-394J0D01*
1846 | G01*
1847 | G75*
1848 | G01X7130Y20945D02*
1849 | G03X7130Y20945I-39J0D01*
1850 | G01*
1851 | G75*
1852 | G01X5610Y63690D02*
1853 | G03X5610Y63690I-130J0D01*
1854 | G01*
1855 | G75*
1856 | G01X5610Y58090D02*
1857 | G03X5610Y58090I-130J0D01*
1858 | G01*
1859 | M00*
1860 | M02*
1861 |
--------------------------------------------------------------------------------
/gerber/Gerber_TopSolderMaskLayer.GTS:
--------------------------------------------------------------------------------
1 | G04 Layer: TopSolderMaskLayer*
2 | G04 EasyEDA v6.3.43, 2020-06-07T13:11:06+08:00*
3 | G04 57be81840bc34c5ebe362b8f785087f4,10*
4 | G04 Gerber Generator version 0.2*
5 | G04 Scale: 100 percent, Rotated: No, Reflected: No *
6 | G04 Dimensions in inches *
7 | G04 leading zeros omitted , absolute positions ,2 integer and 4 decimal *
8 | %FSLAX24Y24*%
9 | %MOIN*%
10 | G90*
11 | G70D02*
12 |
13 | %ADD37C,0.067060*%
14 | %ADD38C,0.047370*%
15 | %ADD44R,0.048000X0.044000*%
16 | %ADD48R,0.078900X0.019800*%
17 |
18 | %LPD*%
19 | G54D37*
20 | G01X4040Y45887D02*
21 | G01X4159Y45887D01*
22 | G01X4040Y46674D02*
23 | G01X4159Y46674D01*
24 | G01X4040Y47462D02*
25 | G01X4159Y47462D01*
26 | G54D38*
27 | G01X6553Y51600D02*
28 | G01X6446Y51600D01*
29 | G01X6553Y52100D02*
30 | G01X6446Y52100D01*
31 | G36*
32 | G01X9213Y65205D02*
33 | G01X9213Y65684D01*
34 | G01X10086Y65684D01*
35 | G01X10086Y65205D01*
36 | G01X9213Y65205D01*
37 | G37*
38 | G36*
39 | G01X9213Y65984D02*
40 | G01X9213Y66463D01*
41 | G01X10086Y66463D01*
42 | G01X10086Y65984D01*
43 | G01X9213Y65984D01*
44 | G37*
45 | G36*
46 | G01X9213Y66775D02*
47 | G01X9213Y67254D01*
48 | G01X10086Y67254D01*
49 | G01X10086Y66775D01*
50 | G01X9213Y66775D01*
51 | G37*
52 | G36*
53 | G01X9213Y67565D02*
54 | G01X9213Y68044D01*
55 | G01X10086Y68044D01*
56 | G01X10086Y67565D01*
57 | G01X9213Y67565D01*
58 | G37*
59 | G36*
60 | G01X9213Y68355D02*
61 | G01X9213Y68834D01*
62 | G01X10086Y68834D01*
63 | G01X10086Y68355D01*
64 | G01X9213Y68355D01*
65 | G37*
66 | G36*
67 | G01X9213Y69134D02*
68 | G01X9213Y69613D01*
69 | G01X10086Y69613D01*
70 | G01X10086Y69134D01*
71 | G01X9213Y69134D01*
72 | G37*
73 | G36*
74 | G01X9213Y69925D02*
75 | G01X9213Y70404D01*
76 | G01X10086Y70404D01*
77 | G01X10086Y69925D01*
78 | G01X9213Y69925D01*
79 | G37*
80 | G36*
81 | G01X9213Y70715D02*
82 | G01X9213Y71194D01*
83 | G01X10086Y71194D01*
84 | G01X10086Y70715D01*
85 | G01X9213Y70715D01*
86 | G37*
87 | G36*
88 | G01X2913Y70715D02*
89 | G01X2913Y71194D01*
90 | G01X3786Y71194D01*
91 | G01X3786Y70715D01*
92 | G01X2913Y70715D01*
93 | G37*
94 | G36*
95 | G01X2913Y69925D02*
96 | G01X2913Y70404D01*
97 | G01X3786Y70404D01*
98 | G01X3786Y69925D01*
99 | G01X2913Y69925D01*
100 | G37*
101 | G36*
102 | G01X2913Y69134D02*
103 | G01X2913Y69613D01*
104 | G01X3786Y69613D01*
105 | G01X3786Y69134D01*
106 | G01X2913Y69134D01*
107 | G37*
108 | G36*
109 | G01X2913Y68355D02*
110 | G01X2913Y68834D01*
111 | G01X3786Y68834D01*
112 | G01X3786Y68355D01*
113 | G01X2913Y68355D01*
114 | G37*
115 | G36*
116 | G01X2913Y67565D02*
117 | G01X2913Y68044D01*
118 | G01X3786Y68044D01*
119 | G01X3786Y67565D01*
120 | G01X2913Y67565D01*
121 | G37*
122 | G36*
123 | G01X2913Y66775D02*
124 | G01X2913Y67254D01*
125 | G01X3786Y67254D01*
126 | G01X3786Y66775D01*
127 | G01X2913Y66775D01*
128 | G37*
129 | G36*
130 | G01X2913Y65984D02*
131 | G01X2913Y66463D01*
132 | G01X3786Y66463D01*
133 | G01X3786Y65984D01*
134 | G01X2913Y65984D01*
135 | G37*
136 | G36*
137 | G01X2913Y65205D02*
138 | G01X2913Y65684D01*
139 | G01X3786Y65684D01*
140 | G01X3786Y65205D01*
141 | G01X2913Y65205D01*
142 | G37*
143 | G36*
144 | G01X6578Y22755D02*
145 | G01X6578Y23346D01*
146 | G01X7051Y23346D01*
147 | G01X7051Y22755D01*
148 | G01X6578Y22755D01*
149 | G37*
150 | G36*
151 | G01X6578Y21653D02*
152 | G01X6578Y22244D01*
153 | G01X7051Y22244D01*
154 | G01X7051Y21653D01*
155 | G01X6578Y21653D01*
156 | G37*
157 | G36*
158 | G01X5948Y21653D02*
159 | G01X5948Y22244D01*
160 | G01X6421Y22244D01*
161 | G01X6421Y21653D01*
162 | G01X5948Y21653D01*
163 | G37*
164 | G36*
165 | G01X5948Y22755D02*
166 | G01X5948Y23346D01*
167 | G01X6421Y23346D01*
168 | G01X6421Y22755D01*
169 | G01X5948Y22755D01*
170 | G37*
171 | G36*
172 | G01X8855Y44761D02*
173 | G01X8855Y46338D01*
174 | G01X9723Y46338D01*
175 | G01X9723Y44761D01*
176 | G01X8855Y44761D01*
177 | G37*
178 | G36*
179 | G01X6376Y45215D02*
180 | G01X6376Y45884D01*
181 | G01X7242Y45884D01*
182 | G01X7242Y45215D01*
183 | G01X6376Y45215D01*
184 | G37*
185 | G36*
186 | G01X6376Y44309D02*
187 | G01X6376Y44980D01*
188 | G01X7242Y44980D01*
189 | G01X7242Y44309D01*
190 | G01X6376Y44309D01*
191 | G37*
192 | G36*
193 | G01X6376Y46119D02*
194 | G01X6376Y46790D01*
195 | G01X7242Y46790D01*
196 | G01X7242Y46119D01*
197 | G01X6376Y46119D01*
198 | G37*
199 | G36*
200 | G01X3705Y44765D02*
201 | G01X3705Y45434D01*
202 | G01X4494Y45434D01*
203 | G01X4494Y44765D01*
204 | G01X3705Y44765D01*
205 | G37*
206 | G36*
207 | G01X10659Y64779D02*
208 | G01X10659Y65219D01*
209 | G01X11140Y65219D01*
210 | G01X11140Y64779D01*
211 | G01X10659Y64779D01*
212 | G37*
213 | G36*
214 | G01X10659Y65380D02*
215 | G01X10659Y65821D01*
216 | G01X11140Y65821D01*
217 | G01X11140Y65380D01*
218 | G01X10659Y65380D01*
219 | G37*
220 | G36*
221 | G01X10659Y66179D02*
222 | G01X10659Y66619D01*
223 | G01X11140Y66619D01*
224 | G01X11140Y66179D01*
225 | G01X10659Y66179D01*
226 | G37*
227 | G36*
228 | G01X10659Y66781D02*
229 | G01X10659Y67221D01*
230 | G01X11140Y67221D01*
231 | G01X11140Y66781D01*
232 | G01X10659Y66781D01*
233 | G37*
234 | G54D44*
235 | G01X9800Y54801D03*
236 | G01X9800Y54198D03*
237 | G36*
238 | G01X3480Y48859D02*
239 | G01X3480Y49340D01*
240 | G01X3921Y49340D01*
241 | G01X3921Y48859D01*
242 | G01X3480Y48859D01*
243 | G37*
244 | G36*
245 | G01X2878Y48859D02*
246 | G01X2878Y49340D01*
247 | G01X3319Y49340D01*
248 | G01X3319Y48859D01*
249 | G01X2878Y48859D01*
250 | G37*
251 | G01X8900Y50301D03*
252 | G01X8900Y49698D03*
253 | G01X3200Y55001D03*
254 | G01X3200Y54398D03*
255 | G36*
256 | G01X1859Y68498D02*
257 | G01X1859Y68938D01*
258 | G01X2340Y68938D01*
259 | G01X2340Y68498D01*
260 | G01X1859Y68498D01*
261 | G37*
262 | G36*
263 | G01X1859Y69101D02*
264 | G01X1859Y69540D01*
265 | G01X2340Y69540D01*
266 | G01X2340Y69101D01*
267 | G01X1859Y69101D01*
268 | G37*
269 | G36*
270 | G01X9484Y52650D02*
271 | G01X9484Y53517D01*
272 | G01X10115Y53517D01*
273 | G01X10115Y52650D01*
274 | G01X9484Y52650D01*
275 | G37*
276 | G36*
277 | G01X9484Y50482D02*
278 | G01X9484Y51351D01*
279 | G01X10115Y51351D01*
280 | G01X10115Y50482D01*
281 | G01X9484Y50482D01*
282 | G37*
283 | G36*
284 | G01X2884Y50482D02*
285 | G01X2884Y51350D01*
286 | G01X3515Y51350D01*
287 | G01X3515Y50482D01*
288 | G01X2884Y50482D01*
289 | G37*
290 | G36*
291 | G01X2884Y52648D02*
292 | G01X2884Y53517D01*
293 | G01X3515Y53517D01*
294 | G01X3515Y52648D01*
295 | G01X2884Y52648D01*
296 | G37*
297 | G36*
298 | G01X6209Y50863D02*
299 | G01X6209Y51336D01*
300 | G01X6790Y51336D01*
301 | G01X6790Y50863D01*
302 | G01X6209Y50863D01*
303 | G37*
304 | G36*
305 | G01X6580Y53159D02*
306 | G01X6580Y53640D01*
307 | G01X7021Y53640D01*
308 | G01X7021Y53159D01*
309 | G01X6580Y53159D01*
310 | G37*
311 | G36*
312 | G01X5978Y53159D02*
313 | G01X5978Y53640D01*
314 | G01X6419Y53640D01*
315 | G01X6419Y53159D01*
316 | G01X5978Y53159D01*
317 | G37*
318 | G36*
319 | G01X6578Y25255D02*
320 | G01X6578Y25846D01*
321 | G01X7051Y25846D01*
322 | G01X7051Y25255D01*
323 | G01X6578Y25255D01*
324 | G37*
325 | G36*
326 | G01X6578Y24153D02*
327 | G01X6578Y24744D01*
328 | G01X7051Y24744D01*
329 | G01X7051Y24153D01*
330 | G01X6578Y24153D01*
331 | G37*
332 | G36*
333 | G01X5948Y24153D02*
334 | G01X5948Y24744D01*
335 | G01X6421Y24744D01*
336 | G01X6421Y24153D01*
337 | G01X5948Y24153D01*
338 | G37*
339 | G36*
340 | G01X5948Y25255D02*
341 | G01X5948Y25846D01*
342 | G01X6421Y25846D01*
343 | G01X6421Y25255D01*
344 | G01X5948Y25255D01*
345 | G37*
346 | G36*
347 | G01X6578Y27755D02*
348 | G01X6578Y28346D01*
349 | G01X7051Y28346D01*
350 | G01X7051Y27755D01*
351 | G01X6578Y27755D01*
352 | G37*
353 | G36*
354 | G01X6578Y26653D02*
355 | G01X6578Y27244D01*
356 | G01X7051Y27244D01*
357 | G01X7051Y26653D01*
358 | G01X6578Y26653D01*
359 | G37*
360 | G36*
361 | G01X5948Y26653D02*
362 | G01X5948Y27244D01*
363 | G01X6421Y27244D01*
364 | G01X6421Y26653D01*
365 | G01X5948Y26653D01*
366 | G37*
367 | G36*
368 | G01X5948Y27755D02*
369 | G01X5948Y28346D01*
370 | G01X6421Y28346D01*
371 | G01X6421Y27755D01*
372 | G01X5948Y27755D01*
373 | G37*
374 | G36*
375 | G01X6578Y30255D02*
376 | G01X6578Y30846D01*
377 | G01X7051Y30846D01*
378 | G01X7051Y30255D01*
379 | G01X6578Y30255D01*
380 | G37*
381 | G36*
382 | G01X6578Y29153D02*
383 | G01X6578Y29744D01*
384 | G01X7051Y29744D01*
385 | G01X7051Y29153D01*
386 | G01X6578Y29153D01*
387 | G37*
388 | G36*
389 | G01X5948Y29153D02*
390 | G01X5948Y29744D01*
391 | G01X6421Y29744D01*
392 | G01X6421Y29153D01*
393 | G01X5948Y29153D01*
394 | G37*
395 | G36*
396 | G01X5948Y30255D02*
397 | G01X5948Y30846D01*
398 | G01X6421Y30846D01*
399 | G01X6421Y30255D01*
400 | G01X5948Y30255D01*
401 | G37*
402 | G36*
403 | G01X6578Y10255D02*
404 | G01X6578Y10846D01*
405 | G01X7051Y10846D01*
406 | G01X7051Y10255D01*
407 | G01X6578Y10255D01*
408 | G37*
409 | G36*
410 | G01X6578Y9153D02*
411 | G01X6578Y9744D01*
412 | G01X7051Y9744D01*
413 | G01X7051Y9153D01*
414 | G01X6578Y9153D01*
415 | G37*
416 | G36*
417 | G01X5948Y9153D02*
418 | G01X5948Y9744D01*
419 | G01X6421Y9744D01*
420 | G01X6421Y9153D01*
421 | G01X5948Y9153D01*
422 | G37*
423 | G36*
424 | G01X5948Y10255D02*
425 | G01X5948Y10846D01*
426 | G01X6421Y10846D01*
427 | G01X6421Y10255D01*
428 | G01X5948Y10255D01*
429 | G37*
430 | G36*
431 | G01X6578Y7755D02*
432 | G01X6578Y8346D01*
433 | G01X7051Y8346D01*
434 | G01X7051Y7755D01*
435 | G01X6578Y7755D01*
436 | G37*
437 | G36*
438 | G01X6578Y6653D02*
439 | G01X6578Y7244D01*
440 | G01X7051Y7244D01*
441 | G01X7051Y6653D01*
442 | G01X6578Y6653D01*
443 | G37*
444 | G36*
445 | G01X5948Y6653D02*
446 | G01X5948Y7244D01*
447 | G01X6421Y7244D01*
448 | G01X6421Y6653D01*
449 | G01X5948Y6653D01*
450 | G37*
451 | G36*
452 | G01X5948Y7755D02*
453 | G01X5948Y8346D01*
454 | G01X6421Y8346D01*
455 | G01X6421Y7755D01*
456 | G01X5948Y7755D01*
457 | G37*
458 | G36*
459 | G01X6578Y5255D02*
460 | G01X6578Y5846D01*
461 | G01X7051Y5846D01*
462 | G01X7051Y5255D01*
463 | G01X6578Y5255D01*
464 | G37*
465 | G36*
466 | G01X6578Y4153D02*
467 | G01X6578Y4744D01*
468 | G01X7051Y4744D01*
469 | G01X7051Y4153D01*
470 | G01X6578Y4153D01*
471 | G37*
472 | G36*
473 | G01X5948Y4153D02*
474 | G01X5948Y4744D01*
475 | G01X6421Y4744D01*
476 | G01X6421Y4153D01*
477 | G01X5948Y4153D01*
478 | G37*
479 | G36*
480 | G01X5948Y5255D02*
481 | G01X5948Y5846D01*
482 | G01X6421Y5846D01*
483 | G01X6421Y5255D01*
484 | G01X5948Y5255D01*
485 | G37*
486 | G36*
487 | G01X6578Y2755D02*
488 | G01X6578Y3346D01*
489 | G01X7051Y3346D01*
490 | G01X7051Y2755D01*
491 | G01X6578Y2755D01*
492 | G37*
493 | G36*
494 | G01X6578Y1653D02*
495 | G01X6578Y2244D01*
496 | G01X7051Y2244D01*
497 | G01X7051Y1653D01*
498 | G01X6578Y1653D01*
499 | G37*
500 | G36*
501 | G01X5948Y1653D02*
502 | G01X5948Y2244D01*
503 | G01X6421Y2244D01*
504 | G01X6421Y1653D01*
505 | G01X5948Y1653D01*
506 | G37*
507 | G36*
508 | G01X5948Y2755D02*
509 | G01X5948Y3346D01*
510 | G01X6421Y3346D01*
511 | G01X6421Y2755D01*
512 | G01X5948Y2755D01*
513 | G37*
514 | G36*
515 | G01X6578Y40255D02*
516 | G01X6578Y40846D01*
517 | G01X7051Y40846D01*
518 | G01X7051Y40255D01*
519 | G01X6578Y40255D01*
520 | G37*
521 | G36*
522 | G01X6578Y39153D02*
523 | G01X6578Y39744D01*
524 | G01X7051Y39744D01*
525 | G01X7051Y39153D01*
526 | G01X6578Y39153D01*
527 | G37*
528 | G36*
529 | G01X5948Y39153D02*
530 | G01X5948Y39744D01*
531 | G01X6421Y39744D01*
532 | G01X6421Y39153D01*
533 | G01X5948Y39153D01*
534 | G37*
535 | G36*
536 | G01X5948Y40255D02*
537 | G01X5948Y40846D01*
538 | G01X6421Y40846D01*
539 | G01X6421Y40255D01*
540 | G01X5948Y40255D01*
541 | G37*
542 | G36*
543 | G01X6578Y37755D02*
544 | G01X6578Y38346D01*
545 | G01X7051Y38346D01*
546 | G01X7051Y37755D01*
547 | G01X6578Y37755D01*
548 | G37*
549 | G36*
550 | G01X6578Y36653D02*
551 | G01X6578Y37244D01*
552 | G01X7051Y37244D01*
553 | G01X7051Y36653D01*
554 | G01X6578Y36653D01*
555 | G37*
556 | G36*
557 | G01X5948Y36653D02*
558 | G01X5948Y37244D01*
559 | G01X6421Y37244D01*
560 | G01X6421Y36653D01*
561 | G01X5948Y36653D01*
562 | G37*
563 | G36*
564 | G01X5948Y37755D02*
565 | G01X5948Y38346D01*
566 | G01X6421Y38346D01*
567 | G01X6421Y37755D01*
568 | G01X5948Y37755D01*
569 | G37*
570 | G36*
571 | G01X6578Y35255D02*
572 | G01X6578Y35846D01*
573 | G01X7051Y35846D01*
574 | G01X7051Y35255D01*
575 | G01X6578Y35255D01*
576 | G37*
577 | G36*
578 | G01X6578Y34153D02*
579 | G01X6578Y34744D01*
580 | G01X7051Y34744D01*
581 | G01X7051Y34153D01*
582 | G01X6578Y34153D01*
583 | G37*
584 | G36*
585 | G01X5948Y34153D02*
586 | G01X5948Y34744D01*
587 | G01X6421Y34744D01*
588 | G01X6421Y34153D01*
589 | G01X5948Y34153D01*
590 | G37*
591 | G36*
592 | G01X5948Y35255D02*
593 | G01X5948Y35846D01*
594 | G01X6421Y35846D01*
595 | G01X6421Y35255D01*
596 | G01X5948Y35255D01*
597 | G37*
598 | G36*
599 | G01X6578Y32755D02*
600 | G01X6578Y33346D01*
601 | G01X7051Y33346D01*
602 | G01X7051Y32755D01*
603 | G01X6578Y32755D01*
604 | G37*
605 | G36*
606 | G01X6578Y31653D02*
607 | G01X6578Y32244D01*
608 | G01X7051Y32244D01*
609 | G01X7051Y31653D01*
610 | G01X6578Y31653D01*
611 | G37*
612 | G36*
613 | G01X5948Y31653D02*
614 | G01X5948Y32244D01*
615 | G01X6421Y32244D01*
616 | G01X6421Y31653D01*
617 | G01X5948Y31653D01*
618 | G37*
619 | G36*
620 | G01X5948Y32755D02*
621 | G01X5948Y33346D01*
622 | G01X6421Y33346D01*
623 | G01X6421Y32755D01*
624 | G01X5948Y32755D01*
625 | G37*
626 | G36*
627 | G01X6578Y12755D02*
628 | G01X6578Y13346D01*
629 | G01X7051Y13346D01*
630 | G01X7051Y12755D01*
631 | G01X6578Y12755D01*
632 | G37*
633 | G36*
634 | G01X6578Y11653D02*
635 | G01X6578Y12244D01*
636 | G01X7051Y12244D01*
637 | G01X7051Y11653D01*
638 | G01X6578Y11653D01*
639 | G37*
640 | G36*
641 | G01X5948Y11653D02*
642 | G01X5948Y12244D01*
643 | G01X6421Y12244D01*
644 | G01X6421Y11653D01*
645 | G01X5948Y11653D01*
646 | G37*
647 | G36*
648 | G01X5948Y12755D02*
649 | G01X5948Y13346D01*
650 | G01X6421Y13346D01*
651 | G01X6421Y12755D01*
652 | G01X5948Y12755D01*
653 | G37*
654 | G36*
655 | G01X6578Y15255D02*
656 | G01X6578Y15846D01*
657 | G01X7051Y15846D01*
658 | G01X7051Y15255D01*
659 | G01X6578Y15255D01*
660 | G37*
661 | G36*
662 | G01X6578Y14153D02*
663 | G01X6578Y14744D01*
664 | G01X7051Y14744D01*
665 | G01X7051Y14153D01*
666 | G01X6578Y14153D01*
667 | G37*
668 | G36*
669 | G01X5948Y14153D02*
670 | G01X5948Y14744D01*
671 | G01X6421Y14744D01*
672 | G01X6421Y14153D01*
673 | G01X5948Y14153D01*
674 | G37*
675 | G36*
676 | G01X5948Y15255D02*
677 | G01X5948Y15846D01*
678 | G01X6421Y15846D01*
679 | G01X6421Y15255D01*
680 | G01X5948Y15255D01*
681 | G37*
682 | G36*
683 | G01X6578Y17755D02*
684 | G01X6578Y18346D01*
685 | G01X7051Y18346D01*
686 | G01X7051Y17755D01*
687 | G01X6578Y17755D01*
688 | G37*
689 | G36*
690 | G01X6578Y16653D02*
691 | G01X6578Y17244D01*
692 | G01X7051Y17244D01*
693 | G01X7051Y16653D01*
694 | G01X6578Y16653D01*
695 | G37*
696 | G36*
697 | G01X5948Y16653D02*
698 | G01X5948Y17244D01*
699 | G01X6421Y17244D01*
700 | G01X6421Y16653D01*
701 | G01X5948Y16653D01*
702 | G37*
703 | G36*
704 | G01X5948Y17755D02*
705 | G01X5948Y18346D01*
706 | G01X6421Y18346D01*
707 | G01X6421Y17755D01*
708 | G01X5948Y17755D01*
709 | G37*
710 | G36*
711 | G01X6578Y20255D02*
712 | G01X6578Y20846D01*
713 | G01X7051Y20846D01*
714 | G01X7051Y20255D01*
715 | G01X6578Y20255D01*
716 | G37*
717 | G36*
718 | G01X6578Y19153D02*
719 | G01X6578Y19744D01*
720 | G01X7051Y19744D01*
721 | G01X7051Y19153D01*
722 | G01X6578Y19153D01*
723 | G37*
724 | G36*
725 | G01X5948Y19153D02*
726 | G01X5948Y19744D01*
727 | G01X6421Y19744D01*
728 | G01X6421Y19153D01*
729 | G01X5948Y19153D01*
730 | G37*
731 | G36*
732 | G01X5948Y20255D02*
733 | G01X5948Y20846D01*
734 | G01X6421Y20846D01*
735 | G01X6421Y20255D01*
736 | G01X5948Y20255D01*
737 | G37*
738 | G01X5350Y46851D03*
739 | G01X5350Y46248D03*
740 | G01X6050Y46851D03*
741 | G01X6050Y46248D03*
742 | G36*
743 | G01X6428Y48159D02*
744 | G01X6428Y48640D01*
745 | G01X6869Y48640D01*
746 | G01X6869Y48159D01*
747 | G01X6428Y48159D01*
748 | G37*
749 | G36*
750 | G01X7030Y48159D02*
751 | G01X7030Y48640D01*
752 | G01X7471Y48640D01*
753 | G01X7471Y48159D01*
754 | G01X7030Y48159D01*
755 | G37*
756 | G36*
757 | G01X6428Y49159D02*
758 | G01X6428Y49640D01*
759 | G01X6869Y49640D01*
760 | G01X6869Y49159D01*
761 | G01X6428Y49159D01*
762 | G37*
763 | G36*
764 | G01X7030Y49159D02*
765 | G01X7030Y49640D01*
766 | G01X7471Y49640D01*
767 | G01X7471Y49159D01*
768 | G01X7030Y49159D01*
769 | G37*
770 | G36*
771 | G01X10659Y63379D02*
772 | G01X10659Y63819D01*
773 | G01X11140Y63819D01*
774 | G01X11140Y63379D01*
775 | G01X10659Y63379D01*
776 | G37*
777 | G36*
778 | G01X10659Y63980D02*
779 | G01X10659Y64421D01*
780 | G01X11140Y64421D01*
781 | G01X11140Y63980D01*
782 | G01X10659Y63980D01*
783 | G37*
784 | G36*
785 | G01X10659Y57879D02*
786 | G01X10659Y58319D01*
787 | G01X11140Y58319D01*
788 | G01X11140Y57879D01*
789 | G01X10659Y57879D01*
790 | G37*
791 | G36*
792 | G01X10659Y58480D02*
793 | G01X10659Y58921D01*
794 | G01X11140Y58921D01*
795 | G01X11140Y58480D01*
796 | G01X10659Y58480D01*
797 | G37*
798 | G36*
799 | G01X4625Y63721D02*
800 | G01X4625Y63919D01*
801 | G01X5413Y63919D01*
802 | G01X5413Y63721D01*
803 | G01X4625Y63721D01*
804 | G37*
805 | G36*
806 | G01X4625Y63461D02*
807 | G01X4625Y63659D01*
808 | G01X5413Y63659D01*
809 | G01X5413Y63461D01*
810 | G01X4625Y63461D01*
811 | G37*
812 | G36*
813 | G01X4625Y63211D02*
814 | G01X4625Y63409D01*
815 | G01X5413Y63409D01*
816 | G01X5413Y63211D01*
817 | G01X4625Y63211D01*
818 | G37*
819 | G36*
820 | G01X4625Y62951D02*
821 | G01X4625Y63148D01*
822 | G01X5413Y63148D01*
823 | G01X5413Y62951D01*
824 | G01X4625Y62951D01*
825 | G37*
826 | G36*
827 | G01X4625Y62701D02*
828 | G01X4625Y62898D01*
829 | G01X5413Y62898D01*
830 | G01X5413Y62701D01*
831 | G01X4625Y62701D01*
832 | G37*
833 | G36*
834 | G01X4625Y62440D02*
835 | G01X4625Y62638D01*
836 | G01X5413Y62638D01*
837 | G01X5413Y62440D01*
838 | G01X4625Y62440D01*
839 | G37*
840 | G36*
841 | G01X4625Y62180D02*
842 | G01X4625Y62379D01*
843 | G01X5413Y62379D01*
844 | G01X5413Y62180D01*
845 | G01X4625Y62180D01*
846 | G37*
847 | G36*
848 | G01X4625Y61930D02*
849 | G01X4625Y62129D01*
850 | G01X5413Y62129D01*
851 | G01X5413Y61930D01*
852 | G01X4625Y61930D01*
853 | G37*
854 | G36*
855 | G01X4625Y61671D02*
856 | G01X4625Y61869D01*
857 | G01X5413Y61869D01*
858 | G01X5413Y61671D01*
859 | G01X4625Y61671D01*
860 | G37*
861 | G36*
862 | G01X4625Y61421D02*
863 | G01X4625Y61619D01*
864 | G01X5413Y61619D01*
865 | G01X5413Y61421D01*
866 | G01X4625Y61421D01*
867 | G37*
868 | G36*
869 | G01X4625Y61161D02*
870 | G01X4625Y61359D01*
871 | G01X5413Y61359D01*
872 | G01X5413Y61161D01*
873 | G01X4625Y61161D01*
874 | G37*
875 | G36*
876 | G01X4625Y60901D02*
877 | G01X4625Y61098D01*
878 | G01X5413Y61098D01*
879 | G01X5413Y60901D01*
880 | G01X4625Y60901D01*
881 | G37*
882 | G36*
883 | G01X4625Y60651D02*
884 | G01X4625Y60848D01*
885 | G01X5413Y60848D01*
886 | G01X5413Y60651D01*
887 | G01X4625Y60651D01*
888 | G37*
889 | G36*
890 | G01X4625Y60390D02*
891 | G01X4625Y60588D01*
892 | G01X5413Y60588D01*
893 | G01X5413Y60390D01*
894 | G01X4625Y60390D01*
895 | G37*
896 | G36*
897 | G01X4625Y60140D02*
898 | G01X4625Y60338D01*
899 | G01X5413Y60338D01*
900 | G01X5413Y60140D01*
901 | G01X4625Y60140D01*
902 | G37*
903 | G36*
904 | G01X4625Y59880D02*
905 | G01X4625Y60079D01*
906 | G01X5413Y60079D01*
907 | G01X5413Y59880D01*
908 | G01X4625Y59880D01*
909 | G37*
910 | G54D48*
911 | G01X7979Y59980D03*
912 | G01X7979Y60240D03*
913 | G01X7979Y60490D03*
914 | G01X7979Y60750D03*
915 | G01X7979Y61000D03*
916 | G01X7979Y61259D03*
917 | G01X7979Y61519D03*
918 | G01X7979Y61769D03*
919 | G01X7979Y62030D03*
920 | G01X7979Y62280D03*
921 | G01X7979Y62540D03*
922 | G01X7979Y62800D03*
923 | G36*
924 | G01X5436Y59694D02*
925 | G01X5436Y64105D01*
926 | G01X7563Y64105D01*
927 | G01X7563Y59694D01*
928 | G01X5436Y59694D01*
929 | G37*
930 | G01X7979Y63050D03*
931 | G01X7979Y63309D03*
932 | G01X7979Y63559D03*
933 | G01X7979Y63819D03*
934 | G36*
935 | G01X4625Y58121D02*
936 | G01X4625Y58319D01*
937 | G01X5413Y58319D01*
938 | G01X5413Y58121D01*
939 | G01X4625Y58121D01*
940 | G37*
941 | G36*
942 | G01X4625Y57861D02*
943 | G01X4625Y58059D01*
944 | G01X5413Y58059D01*
945 | G01X5413Y57861D01*
946 | G01X4625Y57861D01*
947 | G37*
948 | G36*
949 | G01X4625Y57611D02*
950 | G01X4625Y57809D01*
951 | G01X5413Y57809D01*
952 | G01X5413Y57611D01*
953 | G01X4625Y57611D01*
954 | G37*
955 | G36*
956 | G01X4625Y57351D02*
957 | G01X4625Y57548D01*
958 | G01X5413Y57548D01*
959 | G01X5413Y57351D01*
960 | G01X4625Y57351D01*
961 | G37*
962 | G36*
963 | G01X4625Y57101D02*
964 | G01X4625Y57298D01*
965 | G01X5413Y57298D01*
966 | G01X5413Y57101D01*
967 | G01X4625Y57101D01*
968 | G37*
969 | G36*
970 | G01X4625Y56840D02*
971 | G01X4625Y57038D01*
972 | G01X5413Y57038D01*
973 | G01X5413Y56840D01*
974 | G01X4625Y56840D01*
975 | G37*
976 | G36*
977 | G01X4625Y56580D02*
978 | G01X4625Y56779D01*
979 | G01X5413Y56779D01*
980 | G01X5413Y56580D01*
981 | G01X4625Y56580D01*
982 | G37*
983 | G36*
984 | G01X4625Y56330D02*
985 | G01X4625Y56529D01*
986 | G01X5413Y56529D01*
987 | G01X5413Y56330D01*
988 | G01X4625Y56330D01*
989 | G37*
990 | G36*
991 | G01X4625Y56071D02*
992 | G01X4625Y56269D01*
993 | G01X5413Y56269D01*
994 | G01X5413Y56071D01*
995 | G01X4625Y56071D01*
996 | G37*
997 | G36*
998 | G01X4625Y55821D02*
999 | G01X4625Y56019D01*
1000 | G01X5413Y56019D01*
1001 | G01X5413Y55821D01*
1002 | G01X4625Y55821D01*
1003 | G37*
1004 | G36*
1005 | G01X4625Y55561D02*
1006 | G01X4625Y55759D01*
1007 | G01X5413Y55759D01*
1008 | G01X5413Y55561D01*
1009 | G01X4625Y55561D01*
1010 | G37*
1011 | G36*
1012 | G01X4625Y55301D02*
1013 | G01X4625Y55498D01*
1014 | G01X5413Y55498D01*
1015 | G01X5413Y55301D01*
1016 | G01X4625Y55301D01*
1017 | G37*
1018 | G36*
1019 | G01X4625Y55051D02*
1020 | G01X4625Y55248D01*
1021 | G01X5413Y55248D01*
1022 | G01X5413Y55051D01*
1023 | G01X4625Y55051D01*
1024 | G37*
1025 | G36*
1026 | G01X4625Y54790D02*
1027 | G01X4625Y54988D01*
1028 | G01X5413Y54988D01*
1029 | G01X5413Y54790D01*
1030 | G01X4625Y54790D01*
1031 | G37*
1032 | G36*
1033 | G01X4625Y54540D02*
1034 | G01X4625Y54738D01*
1035 | G01X5413Y54738D01*
1036 | G01X5413Y54540D01*
1037 | G01X4625Y54540D01*
1038 | G37*
1039 | G36*
1040 | G01X4625Y54280D02*
1041 | G01X4625Y54479D01*
1042 | G01X5413Y54479D01*
1043 | G01X5413Y54280D01*
1044 | G01X4625Y54280D01*
1045 | G37*
1046 | G01X7979Y54380D03*
1047 | G01X7979Y54640D03*
1048 | G01X7979Y54890D03*
1049 | G01X7979Y55150D03*
1050 | G01X7979Y55400D03*
1051 | G01X7979Y55659D03*
1052 | G01X7979Y55919D03*
1053 | G01X7979Y56169D03*
1054 | G01X7979Y56430D03*
1055 | G01X7979Y56680D03*
1056 | G01X7979Y56940D03*
1057 | G01X7979Y57200D03*
1058 | G36*
1059 | G01X5436Y54094D02*
1060 | G01X5436Y58505D01*
1061 | G01X7563Y58505D01*
1062 | G01X7563Y54094D01*
1063 | G01X5436Y54094D01*
1064 | G37*
1065 | G01X7979Y57450D03*
1066 | G01X7979Y57709D03*
1067 | G01X7979Y57959D03*
1068 | G01X7979Y58219D03*
1069 | M00*
1070 | M02*
1071 |
--------------------------------------------------------------------------------
/gerber/ReadOnly.Mechanical:
--------------------------------------------------------------------------------
1 | G04 Layer: Mechanical*
2 | G04 EasyEDA v6.3.43, 2020-06-07T13:11:06+08:00*
3 | G04 57be81840bc34c5ebe362b8f785087f4,10*
4 | G04 Gerber Generator version 0.2*
5 | G04 Scale: 100 percent, Rotated: No, Reflected: No *
6 | G04 Dimensions in inches *
7 | G04 leading zeros omitted , absolute positions ,2 integer and 4 decimal *
8 | %FSLAX24Y24*%
9 | %MOIN*%
10 | G90*
11 | G70D02*
12 |
13 | %ADD50C,0.001968*%
14 |
15 | %LPD*%
16 | G54D50*
17 | G01X6318Y44132D02*
18 | G01X9782Y44132D01*
19 | G01X9782Y46967D01*
20 | G01X6318Y46967D01*
21 | G01X6318Y44132D01*
22 | M00*
23 | M02*
24 |
--------------------------------------------------------------------------------
/images/pcb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jj11hh/ESP_POV/ce073f029351238938e96c31526725af726515d7/images/pcb.png
--------------------------------------------------------------------------------
/images/pic1.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jj11hh/ESP_POV/ce073f029351238938e96c31526725af726515d7/images/pic1.webp
--------------------------------------------------------------------------------
/images/pic2.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jj11hh/ESP_POV/ce073f029351238938e96c31526725af726515d7/images/pic2.webp
--------------------------------------------------------------------------------
/images/test.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jj11hh/ESP_POV/ce073f029351238938e96c31526725af726515d7/images/test.jpeg
--------------------------------------------------------------------------------
/images/ui.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jj11hh/ESP_POV/ce073f029351238938e96c31526725af726515d7/images/ui.jpeg
--------------------------------------------------------------------------------
/src/ESP_POV.ino:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | //#include
4 | #include
5 | #include
6 | #include
7 | #include
8 | #include
9 | #include
10 |
11 | #include "display.h"
12 | #include "common.h"
13 | #include "EspTLC5947.h"
14 | #include "msgQueue.h"
15 | #include "keyEvent.h"
16 | #include "game.h"
17 |
18 | IPAddress ip(192,168,1,1);
19 | IPAddress gateway(192,168,1,0);
20 | IPAddress subnet(255,255,255,0);
21 | AsyncWebServer server(80);
22 | AsyncWebSocket ws("/ws");
23 | uint8_t keyState = 0;
24 | MsgQueue keyQueue;
25 | AsyncUDP udpServer;
26 |
27 | const unsigned int localUdpPort = 4210;
28 | char incomingPacket[255];
29 |
30 | void setupWiFi(){
31 | Serial.println("connecting wifi");
32 | //WiFi.mode(WIFI_STA);
33 | WiFi.softAPConfig(ip, gateway, subnet);
34 | WiFi.softAP("POV Display");
35 | ip = WiFi.softAPIP();
36 | //WiFi.begin("HTC U11", "wp980425");
37 | delay(500);
38 | yield();
39 | /*
40 | Serial.println("Connecting ...");
41 | int cnt = 0;
42 | while(WiFi.status() != WL_CONNECTED){
43 | delay(500);
44 | if (cnt < 10){
45 | tlc_clear(data_array, TLC_NUM);
46 | tlc_setpwm(data_array, TLC_NUM, led_map[3 * (cnt % LEDNUM)], 100);
47 | tlc_write(data_array, TLC_NUM, LATCH_PIN, -1);
48 | }
49 | if (cnt == 10){
50 | WiFi.beginSmartConfig();
51 | Serial.println("Starting SmartConfig.");
52 | }
53 | if (cnt >= 10){
54 | tlc_clear(data_array, TLC_NUM);
55 | tlc_setpwm(data_array, TLC_NUM, led_map[3 * (cnt % LEDNUM) + 2], 100);
56 | tlc_write(data_array, TLC_NUM, LATCH_PIN, -1);
57 | if(WiFi.smartConfigDone()){
58 | Serial.println("SmartConfig Success");
59 | break;
60 | }
61 | Serial.print(".");
62 | }
63 | ++ cnt;
64 | }
65 | Serial.println(" connected");
66 | Serial.print("Connected to ");
67 | Serial.println(WiFi.SSID()); // Tell us what network we're connected to
68 | */
69 | Serial.print("IP address:\t");
70 | Serial.println(ip); // Send the IP address of the ESP8266 to the computer
71 | //ip = WiFi.localIP();
72 | }
73 |
74 | void onWsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len){
75 | if(type == WS_EVT_CONNECT){
76 | //Serial.printf("ws[%s][%u] connect\n", server->url(), client->id());
77 | client->ping();
78 | } else if(type == WS_EVT_DISCONNECT){
79 | //Serial.printf("ws[%s][%u] disconnect: %u\n", server->url(), client->id());
80 | } else if(type == WS_EVT_ERROR){
81 | //Serial.printf("ws[%s][%u] error(%u): %s\n", server->url(), client->id(), *((uint16_t*)arg), (char*)data);
82 | } else if(type == WS_EVT_PONG){
83 | //Serial.printf("ws[%s][%u] pong[%u]: %s\n", server->url(), client->id(), len, (len)?(char*)data:"");
84 | } else if(type == WS_EVT_DATA){
85 | AwsFrameInfo * info = (AwsFrameInfo*)arg;
86 | if(info->final && info->index == 0 && info->len == len){
87 | //the whole message is in a single frame and we got all of it's data
88 | //Serial.printf("ws[%s][%u] %s-message[%llu]: ", server->url(), client->id(), (info->opcode == WS_TEXT)?"text":"binary", info->len);
89 | if (len){
90 | keyState = data[len - 1];
91 | keyQueue.enQueue(keyState);
92 | //Serial.println((int)keyState);
93 | }
94 | }
95 | }
96 | }
97 |
98 |
99 | void setupServer(){
100 | SPIFFS.begin();
101 | ws.onEvent(onWsEvent);
102 | server.addHandler(&ws);
103 | server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
104 | //Serial.println("Serving /");
105 | request->send(SPIFFS, "/index.html");
106 | });
107 | server.on("/upload_image", HTTP_POST, [](AsyncWebServerRequest *request){
108 | //Serial.println("Uploading Image...");
109 | request->send(200);
110 | }, NULL,
111 | [](AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total){
112 | //Serial.printf("Reading %zu, index %zu\n", len, index);
113 | for(size_t i = index; i < index + len; i++){
114 | if (i < SCANLINE * SUBPIXEL_NUM)
115 | pov_buf_bg[i] = data[i - index];
116 | pov_buf[i] = data[i - index];
117 | }
118 | });
119 | server.on("/upload_gamma", HTTP_POST, [](AsyncWebServerRequest *request){
120 | //Serial.println("Uploading Gamma...");
121 | request->send(200);
122 | }, NULL,
123 | [](AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total){
124 | //Serial.printf("Reading %zu, index %zu\n", len, index);
125 | for(size_t i = index; i < index + len; i++){
126 | if(i < 256)
127 | gamma8[i] = data[i - index];
128 | }
129 | });
130 | server.on("/upload_brightness", HTTP_POST, [](AsyncWebServerRequest *request){
131 | //Serial.println("Uploading Brightness...");
132 | request->send(200);
133 | }, NULL,
134 | [](AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total){
135 | //Serial.printf("Reading %zu, index %zu\n", len, index);
136 | if (index == 0)
137 | brightness = data[0];
138 | });
139 | server.on("/upload_rotate", HTTP_POST, [](AsyncWebServerRequest *request){
140 | //Serial.println("Uploading Rotate...");
141 | request->send(200);
142 | }, NULL,
143 | [](AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total){
144 | //Serial.printf("Reading %zu, index %zu\n", len, index);
145 | if (index == 0)
146 | scanRotate = data[0];
147 | });
148 |
149 | server.begin();
150 |
151 | if (udpServer.listen(4210)){
152 | //Serial.print("UDP Listening on IP: ");
153 | //Serial.println(WiFi.localIP());
154 | udpServer.onPacket([](AsyncUDPPacket packet) {
155 | char pack[16];
156 | int i;
157 | for (i = 0; i < 15 && i < packet.length(); i ++){
158 | pack[i] = packet.data()[i];
159 | }
160 | pack[4] = 0;
161 | //Serial.print("UDP received ");
162 | //Serial.println(pack);
163 | if (String("PING") == pack){
164 | packet.printf("PONG");
165 | }
166 | });
167 | }
168 | }
169 |
170 | void setup()
171 | {
172 | Serial.begin(74880);
173 | Serial.println("HELLO");
174 | setupDisplay();
175 | setupWiFi();
176 | setupServer();
177 |
178 | drawText5x7(8, SCANLINE / 2 - 5, ip.toString().c_str(), Color(255, 0, 255));
179 | commitBg();
180 | }
181 |
182 | void reRender() {
183 | static SQ15x16 lastTheta = 0;
184 | static SQ15x16 theta = 0;
185 | static bool dirty = true;
186 | static bool draw = false;
187 | static bool inGame = false;
188 | static GameState game;
189 | static KeyEvent keyEvent;
190 |
191 | if (inGame){
192 | if (game.update()){
193 | return;
194 | }
195 | else{
196 | game.exit();
197 | keyEvent.lastKey = keyState;
198 | inGame = false;
199 | dirty = false;
200 | }
201 | }
202 |
203 | if (dirty){
204 | clearCircle(11, lastTheta, 3);
205 | if (draw)
206 | fillCircle(11, theta, 3, Color(0, 255, 255));
207 | dirty = false;
208 | }
209 |
210 | keyEvent.onKeyDown([](uint8_t key, uint32_t keyState){
211 | switch (key){
212 | case KEY_UP:
213 | lastTheta = theta;
214 | theta += 0.1;
215 | dirty = true;
216 | break;
217 | case KEY_DOWN:
218 | lastTheta = theta;
219 | theta -= 0.1;
220 | dirty = true;
221 | break;
222 | case KEY_LEFT:
223 | scanRotate += 1;
224 | break;
225 | case KEY_RIGHT:
226 | scanRotate -= 1;
227 | break;
228 | }
229 | });
230 |
231 | keyEvent.onKeyDownEdge([](uint8_t key, uint32_t keyState){
232 | switch (key){
233 | case KEY_A:
234 | draw = !draw;
235 | if (draw)
236 | dirty = true;
237 | }
238 | });
239 | keyEvent.onKeyUpEdge([](uint8_t key, uint32_t keyState){
240 | switch (key){
241 | case KEY_B:
242 | game.enter();
243 | keyEvent.brk();
244 | inGame = true;
245 | }
246 | });
247 | keyEvent.update(&keyQueue);
248 | }
249 |
250 | void loop(){
251 | static uint32_t tick = 0;
252 | pov_update();
253 | if (millis() - tick > 33){
254 | tick = millis();
255 | reRender();
256 | }
257 | }
258 |
--------------------------------------------------------------------------------
/src/EspTLC5947.cpp:
--------------------------------------------------------------------------------
1 | #include "EspTLC5947.h"
2 | #include
3 | #include
4 |
5 | inline void SPI_setDataBits(uint16_t bits) {
6 | const uint32_t mask = ~((SPIMMOSI << SPILMOSI) | (SPIMMISO << SPILMISO));
7 | bits--;
8 | SPI1U1 = ((SPI1U1 & mask) | ((bits << SPILMOSI) | (bits << SPILMISO)));
9 | }
10 |
11 | void tlc_write(volatile uint32_t* pwmbuffer, uint32_t numdrivers, int8_t latch_pin, int8_t blank_pin) {
12 | //if (latch_pin > 0) digitalWrite(latch_pin, 0);
13 | for (int i = 0; i < numdrivers; i ++){
14 | while(SPI1CMD & SPIBUSY);
15 | SPI_setDataBits(24 * 12);
16 |
17 | uint32_t * fifoPtr = (uint32_t*)&SPI1W0;
18 |
19 | for (uint8_t j = 0; j < TLC_WORD; j ++) {
20 | fifoPtr[j] = pwmbuffer[i * TLC_WORD + j];
21 | }
22 | __sync_synchronize();
23 | SPI1CMD |= SPIBUSY;
24 |
25 | }
26 | // Latch
27 | while(SPI1CMD & SPIBUSY);
28 | if (latch_pin >= 0) GPOS = (1 << latch_pin);
29 | if (blank_pin >= 0) GPOS = (1 << blank_pin);
30 | if (blank_pin >= 0) GPOC = (1 << blank_pin);
31 | if (latch_pin >= 0) GPOC = (1 << latch_pin);
32 | }
33 |
34 | void tlc_setpwm(volatile uint32_t* pwmbuffer, uint8_t numdrivers, uint16_t chan, uint16_t pwm) {
35 | if (pwm > 4095) pwm = 4095;
36 | if (chan >= 24 * numdrivers) return;
37 |
38 | chan = numdrivers * TLC_CHAN - chan - 1;
39 |
40 | volatile uint8_t* buf = (volatile uint8_t *) pwmbuffer;
41 | if (chan % 2 == 0){
42 | uint32_t index = chan * 3 / 2;
43 | buf[index] = pwm >> 4;
44 | buf[index + 1] &= 0x0F;
45 | buf[index + 1] |= pwm << 4;
46 | }
47 | else {
48 | uint32_t index = (chan - 1) * 3 / 2 + 1;
49 | buf[index] &= 0xF0;
50 | buf[index] |= pwm >> 8;
51 | buf[index + 1] = pwm;
52 | }
53 | }
54 |
55 | uint16_t tlc_getpwm(volatile uint32_t* pwmbuffer, uint8_t numdrivers, uint16_t chan){
56 | uint16_t pwm;
57 | volatile uint8_t* buf = (volatile uint8_t *) pwmbuffer;
58 | if (chan >= 24 * numdrivers) return 0;
59 | if (chan % 2 == 0){
60 | uint32_t index = chan * 3 / 2;
61 | //buf[index] = pwm >> 4;
62 | //buf[index + 1] &= 0x0F;
63 | //buf[index + 1] |= (pwm << 4) & 0xF0;
64 | pwm = buf[index] << 4;
65 | pwm |= buf[index + 1] >> 4;
66 | }
67 | else {
68 | uint32_t index = (chan - 1) * 3 / 2 + 1;
69 | //buf[index] &= 0xF0;
70 | //buf[index] |= pwm >> 8;
71 | //buf[index + 1] = pwm;
72 | pwm = buf[index] << 8;
73 | pwm |= buf[index + 1];
74 | }
75 | }
76 |
77 | void tlc_clear(volatile uint32_t* pwmbuffer, uint8_t numdrivers){
78 | for (int i = 0; i < numdrivers; i ++){
79 | for (uint8_t j = 0; j < TLC_WORD; j ++) {
80 | pwmbuffer[i * TLC_WORD + j] = 0;
81 | }
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/src/EspTLC5947.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 | #include
3 |
4 | #define TLC_BYTE 36
5 | #define TLC_BIT 36 * 8
6 | #define TLC_WORD 9
7 | #define TLC_CHAN 24
8 |
9 | void tlc_setpwm(volatile uint32_t* pwmbuffer, uint8_t numdrivers, uint16_t chan, uint16_t pwm);
10 | uint16_t tlc_getpwm(volatile uint32_t* pwmbuffer, uint8_t numdrivers, uint16_t chan);
11 | void tlc_write(volatile uint32_t* pwmbuffer, uint32_t numdrivers, int8_t latch_pin, int8_t blank_pin);
12 | void tlc_clear(volatile uint32_t* pwmbuffer, uint8_t numdrivers);
13 |
--------------------------------------------------------------------------------
/src/FixedPointsMath.cpp:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include "FixedPointsMath.h"
4 |
5 | static const SQ15x16 sineTable[256] = {
6 | 0.0 ,
7 | 0.006159946638138647 ,
8 | 0.012319659535238442 ,
9 | 0.018478904959129905 ,
10 | 0.02463744919538197 ,
11 | 0.030795058556170353 ,
12 | 0.03695149938914489 ,
13 | 0.04310653808629557 ,
14 | 0.04925994109281685 ,
15 | 0.05541147491596995 ,
16 | 0.061560906133942835 ,
17 | 0.06770800140470745 ,
18 | 0.07385252747487396 ,
19 | 0.07999425118854163 ,
20 | 0.08613293949614599 ,
21 | 0.09226835946330199 ,
22 | 0.0984002782796427 ,
23 | 0.10452846326765346 ,
24 | 0.11065268189150083 ,
25 | 0.1167727017658563 ,
26 | 0.12288829066471411 ,
27 | 0.12899921653020327 ,
28 | 0.13510524748139296 ,
29 | 0.14120615182309137 ,
30 | 0.1473016980546375 ,
31 | 0.15339165487868536 ,
32 | 0.1594757912099808 ,
33 | 0.16555387618412995 ,
34 | 0.1716256791663596 ,
35 | 0.1776909697602686 ,
36 | 0.18374951781657034 ,
37 | 0.18980109344182575 ,
38 | 0.19584546700716696 ,
39 | 0.20188240915701025 ,
40 | 0.20791169081775931 ,
41 | 0.21393308320649745 ,
42 | 0.2199463578396686 ,
43 | 0.22595128654174768 ,
44 | 0.23194764145389815 ,
45 | 0.23793519504261879 ,
46 | 0.24391372010837714 ,
47 | 0.24988298979423082 ,
48 | 0.2558427775944356 ,
49 | 0.2617928573630403 ,
50 | 0.2677330033224679 ,
51 | 0.27366299007208283 ,
52 | 0.2795825925967438 ,
53 | 0.28549158627534205 ,
54 | 0.2913897468893246 ,
55 | 0.2972768506312027 ,
56 | 0.30315267411304353 ,
57 | 0.3090169943749474 ,
58 | 0.31486958889350786 ,
59 | 0.32071023559025513 ,
60 | 0.3265387128400833 ,
61 | 0.3323547994796597 ,
62 | 0.33815827481581706 ,
63 | 0.3439489186339281 ,
64 | 0.34972651120626114 ,
65 | 0.35549083330031805 ,
66 | 0.3612416661871529 ,
67 | 0.36697879164967206 ,
68 | 0.37270199199091397 ,
69 | 0.3784110500423103 ,
70 | 0.38410574917192586 ,
71 | 0.38978587329267933 ,
72 | 0.3954512068705425 ,
73 | 0.4011015349327188 ,
74 | 0.40673664307580015 ,
75 | 0.41235631747390344 ,
76 | 0.41796034488678346 ,
77 | 0.4235485126679243 ,
78 | 0.42912060877260894 ,
79 | 0.4346764217659649 ,
80 | 0.44021574083098736 ,
81 | 0.44573835577653825 ,
82 | 0.45124405704532283 ,
83 | 0.4567326357218406 ,
84 | 0.4622038835403132 ,
85 | 0.4676575928925868 ,
86 | 0.47309355683601007 ,
87 | 0.4785115691012865 ,
88 | 0.4839114241003016 ,
89 | 0.48929291693392357 ,
90 | 0.4946558433997788 ,
91 | 0.49999999999999994 ,
92 | 0.5053251839489481 ,
93 | 0.510631193180907 ,
94 | 0.5159178263577511 ,
95 | 0.521184882876585 ,
96 | 0.5264321628773557 ,
97 | 0.531659467250436 ,
98 | 0.53686659764418 ,
99 | 0.5420533564724492 ,
100 | 0.5472195469221112 ,
101 | 0.5523649729605058 ,
102 | 0.5574894393428855 ,
103 | 0.562592751619823 ,
104 | 0.5676747161445902 ,
105 | 0.5727351400805052 ,
106 | 0.5777738314082511 ,
107 | 0.5827905989331609 ,
108 | 0.5877852522924731 ,
109 | 0.5927576019625549 ,
110 | 0.5977074592660936 ,
111 | 0.6026346363792563 ,
112 | 0.6075389463388169 ,
113 | 0.61242020304925 ,
114 | 0.6172782212897929 ,
115 | 0.6221128167214739 ,
116 | 0.6269238058941065 ,
117 | 0.6317110062532509 ,
118 | 0.6364742361471414 ,
119 | 0.6412133148335782 ,
120 | 0.6459280624867874 ,
121 | 0.650618300204242 ,
122 | 0.6552838500134536 ,
123 | 0.6599245348787226 ,
124 | 0.664540178707858 ,
125 | 0.6691306063588582 ,
126 | 0.6736956436465572 ,
127 | 0.6782351173492339 ,
128 | 0.6827488552151855 ,
129 | 0.6872366859692627 ,
130 | 0.6916984393193699 ,
131 | 0.6961339459629265 ,
132 | 0.700543037593291 ,
133 | 0.7049255469061472 ,
134 | 0.7092813076058534 ,
135 | 0.7136101544117522 ,
136 | 0.7179119230644418 ,
137 | 0.7221864503320092 ,
138 | 0.7264335740162241 ,
139 | 0.7306531329586932 ,
140 | 0.7348449670469757 ,
141 | 0.7390089172206591 ,
142 | 0.7431448254773941 ,
143 | 0.7472525348788909 ,
144 | 0.7513318895568732 ,
145 | 0.7553827347189936 ,
146 | 0.7594049166547072 ,
147 | 0.763398282741103 ,
148 | 0.7673626814486969 ,
149 | 0.7712979623471806 ,
150 | 0.7752039761111298 ,
151 | 0.7790805745256704 ,
152 | 0.7829276104921027 ,
153 | 0.7867449380334831 ,
154 | 0.7905324123001634 ,
155 | 0.7942898895752861 ,
156 | 0.7980172272802395 ,
157 | 0.8017142839800667 ,
158 | 0.8053809193888326 ,
159 | 0.8090169943749475 ,
160 | 0.8126223709664456 ,
161 | 0.8161969123562216 ,
162 | 0.8197404829072211 ,
163 | 0.8232529481575872 ,
164 | 0.8267341748257635 ,
165 | 0.8301840308155506 ,
166 | 0.8336023852211195 ,
167 | 0.8369891083319778 ,
168 | 0.8403440716378927 ,
169 | 0.8436671478337662 ,
170 | 0.8469582108244671 ,
171 | 0.8502171357296141 ,
172 | 0.8534437988883159 ,
173 | 0.8566380778638627 ,
174 | 0.8597998514483723 ,
175 | 0.8629289996673897 ,
176 | 0.8660254037844386 ,
177 | 0.8690889463055282 ,
178 | 0.8721195109836108 ,
179 | 0.8751169828229927 ,
180 | 0.8780812480836979 ,
181 | 0.8810121942857845 ,
182 | 0.883909710213612 ,
183 | 0.8867736859200619 ,
184 | 0.8896040127307095 ,
185 | 0.8924005832479478 ,
186 | 0.8951632913550623 ,
187 | 0.897892032220258 ,
188 | 0.9005867023006374 ,
189 | 0.9032471993461288 ,
190 | 0.9058734224033671 ,
191 | 0.9084652718195236 ,
192 | 0.9110226492460882 ,
193 | 0.9135454576426009 ,
194 | 0.9160336012803335 ,
195 | 0.918486985745923 ,
196 | 0.9209055179449536 ,
197 | 0.9232891061054893 ,
198 | 0.9256376597815562 ,
199 | 0.9279510898565746 ,
200 | 0.9302293085467402 ,
201 | 0.9324722294043558 ,
202 | 0.9346797673211107 ,
203 | 0.9368518385313106 ,
204 | 0.9389883606150565 ,
205 | 0.9410892525013715 ,
206 | 0.9431544344712774 ,
207 | 0.9451838281608196 ,
208 | 0.9471773565640402 ,
209 | 0.9491349440359013 ,
210 | 0.9510565162951535 ,
211 | 0.9529420004271565 ,
212 | 0.9547913248866443 ,
213 | 0.9566044195004407 ,
214 | 0.9583812154701222 ,
215 | 0.9601216453746281 ,
216 | 0.961825643172819 ,
217 | 0.9634931442059831 ,
218 | 0.965124085200289 ,
219 | 0.9667184042691874 ,
220 | 0.9682760409157589 ,
221 | 0.9697969360350095 ,
222 | 0.9712810319161138 ,
223 | 0.9727282722446048 ,
224 | 0.9741386021045101 ,
225 | 0.9755119679804366 ,
226 | 0.9768483177596007 ,
227 | 0.9781476007338057 ,
228 | 0.9794097676013659 ,
229 | 0.9806347704689777 ,
230 | 0.9818225628535369 ,
231 | 0.9829730996839018 ,
232 | 0.9840863373026044 ,
233 | 0.9851622334675064 ,
234 | 0.9862007473534026 ,
235 | 0.987201839553569 ,
236 | 0.9881654720812594 ,
237 | 0.989091608371146 ,
238 | 0.989980213280707 ,
239 | 0.9908312530915603 ,
240 | 0.9916446955107427 ,
241 | 0.9924205096719357 ,
242 | 0.9931586661366362 ,
243 | 0.9938591368952737 ,
244 | 0.9945218953682733 ,
245 | 0.9951469164070644 ,
246 | 0.9957341762950345 ,
247 | 0.9962836527484294 ,
248 | 0.9967953249171991 ,
249 | 0.997269173385788 ,
250 | 0.9977051801738729 ,
251 | 0.9981033287370441 ,
252 | 0.9984636039674339 ,
253 | 0.99878599219429 ,
254 | 0.9990704811844932 ,
255 | 0.9993170601430229 ,
256 | 0.9995257197133659 ,
257 | 0.9996964519778716 ,
258 | 0.9998292504580527 ,
259 | 0.9999241101148306 ,
260 | 0.9999810273487268 ,
261 | 1.0
262 | };
263 |
264 | SQ15x16 sinfp(SQ15x16 a)
265 | {
266 | bool flip = false;
267 | if (a < 0) {
268 | flip = !flip;
269 | a = -a;
270 | }
271 |
272 | a = modfp(a, (2 * SQ15x16::Pi));
273 | if (a > SQ15x16::Pi){
274 | flip = !flip;
275 | a -= SQ15x16::Pi;
276 | }
277 | if (a > SQ15x16::Pi / 2){
278 | a = (-a) + SQ15x16::Pi;
279 | }
280 | int index = ((2 * a / SQ15x16::Pi) * 255).getInteger();
281 | if (flip)
282 | return -sineTable[index];
283 | else
284 | return sineTable[index];
285 | }
286 |
287 | SQ15x16 atan2fp(SQ15x16 y, SQ15x16 x)
288 | {
289 | if (x != 0){
290 | if (absfp(x) > absfp(y)){
291 | const SQ15x16 z = y / x;
292 | if (x > 0){
293 | return atanfp(z);
294 | }
295 | else if (y >= 0.0){
296 | return atanfp(z) + SQ15x16::Pi;
297 | }
298 | else {
299 | return atanfp(z) - SQ15x16::Pi;
300 | }
301 | }
302 | else {
303 | const SQ15x16 z = x / y;
304 | if (y > 0){
305 | return -atanfp(z) + (SQ15x16::Pi/2);
306 | }
307 | else{
308 | return -atanfp(z) - (SQ15x16::Pi/2);
309 | }
310 | }
311 | }
312 | else{
313 | if (y > 0){
314 | return SQ15x16::Pi / 2;
315 | }
316 | else if (y < 0){
317 | return - SQ15x16::Pi / 2;
318 | }
319 | }
320 |
321 | return 0;
322 | }
323 |
--------------------------------------------------------------------------------
/src/FixedPointsMath.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 | #include
3 | #include
4 |
5 | inline SQ15x16 modfp(SQ15x16 x, SQ15x16 y)
6 | {
7 | return x - (x/y).getInteger() * y;
8 | }
9 |
10 | inline SQ15x16 minfp(SQ15x16 x, SQ15x16 y)
11 | {
12 | return x > y ? y : x;
13 | }
14 |
15 | inline SQ15x16 maxfp(SQ15x16 x, SQ15x16 y)
16 | {
17 | return x < y ? y : x;
18 | }
19 |
20 | inline SQ15x16 absfp(SQ15x16 x)
21 | {
22 | return x < 0 ? -x : x;
23 | }
24 |
25 | SQ15x16 sinfp(SQ15x16 a);
26 |
27 | inline SQ15x16 cosfp(SQ15x16 a)
28 | {
29 | return sinfp(a + SQ15x16::Pi / 2);
30 | }
31 |
32 | SQ15x16 atan2fp(SQ15x16 y, SQ15x16 x);
33 |
34 | inline SQ15x16 sqrtfp(SQ15x16 x)
35 | {
36 | SQ15x16 k = 8;
37 | k = (k + x/k)/2;
38 | k = (k + x/k)/2;
39 | k = (k + x/k)/2;
40 | k = (k + x/k)/2;
41 | k = (k + x/k)/2;
42 | return k;
43 | }
44 |
45 | inline SQ15x16 atanfp(SQ15x16 z){
46 | const SQ15x16 n1 = 0.97239411;
47 | const SQ15x16 n2 = -0.19194795;
48 | return (n1 + n2 * z * z) * z;
49 | }
50 |
51 | inline SQ15x16 uipowfp(SQ15x16 x, uint32_t n){
52 | SQ15x16 r = x;
53 | for (uint32_t i = 1; i < n; i ++){
54 | r *= x;
55 | }
56 | return r;
57 | }
58 |
--------------------------------------------------------------------------------
/src/KeyEvent.cpp:
--------------------------------------------------------------------------------
1 | #include "KeyEvent.h"
2 |
3 | static std::function null_handle = [](uint8_t key, uint32_t keyState){};
4 |
5 | KeyEvent::KeyEvent():lastKey(0), keyDownEdge(null_handle), keyUpEdge(null_handle), keyDown(null_handle), keyUp(null_handle), isBrk(false){}
6 | void KeyEvent::onKeyDownEdge(std::function handle){
7 | keyDownEdge = handle;
8 | }
9 | void KeyEvent::onKeyUpEdge(std::function handle){
10 | keyUpEdge = handle;
11 | }
12 | void KeyEvent::onKeyDown(std::function handle){
13 | keyDown = handle;
14 | }
15 | void KeyEvent::onKeyUp(std::function handle){
16 | keyUp = handle;
17 | }
18 | void KeyEvent::update(MsgQueue * keyQueue){
19 | uint32_t key;
20 | if (!keyQueue->getSize()){
21 | key = lastKey;
22 | for (uint8_t i = 0; i < 6; i ++){
23 | if (key & (1 << i)){
24 | keyDown(1 << i, key);
25 | }
26 | else {
27 | keyUp(1 << i, key);
28 | }
29 | if (isBrk){
30 | isBrk = false;
31 | return;
32 | }
33 | }
34 | }
35 | while(keyQueue->getSize()){
36 | keyQueue->deQueue(&key);
37 | for (uint8_t i = 0; i < 6; i ++){
38 | if (key & (1 << i)){
39 | keyDown(1 << i, key);
40 | if (isBrk){
41 | isBrk = false;
42 | return;
43 | }
44 | if (!(lastKey & (i << i))){
45 | keyDownEdge(1 << i, key);
46 | }
47 | if (isBrk){
48 | isBrk = false;
49 | return;
50 | }
51 | }
52 | else {
53 | keyUp(1 << i, key);
54 | if (isBrk){
55 | isBrk = false;
56 | return;
57 | }
58 | if (lastKey & (i << i)){
59 | keyUpEdge(1 << i, key);
60 | }
61 | if (isBrk){
62 | isBrk = false;
63 | return;
64 | }
65 | }
66 | }
67 | lastKey = key;
68 | }
69 | }
70 |
71 | void KeyEvent::brk(){isBrk = true;}
72 |
--------------------------------------------------------------------------------
/src/KeyEvent.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include
4 | #include "common.h"
5 | #include "msgQueue.h"
6 |
7 | class KeyEvent{
8 | private:
9 | std::function keyDownEdge;
10 | std::function keyUpEdge;
11 | std::function keyDown;
12 | std::function keyUp;
13 | bool isBrk;
14 | public:
15 | uint32_t lastKey;
16 | KeyEvent();
17 | void brk();
18 | void onKeyDownEdge(std::function);
19 | void onKeyUpEdge(std::function);
20 | void onKeyDown(std::function);
21 | void onKeyUp(std::function);
22 | void update(MsgQueue * keyQueue);
23 | };
24 |
--------------------------------------------------------------------------------
/src/common.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #define LATCH_PIN 4
4 | #define BLANK_PIN -1
5 | #define TLC_NUM 2
6 | #define SUBPIXEL_NUM (TLC_NUM * TLC_CHAN)
7 | #define PIXEL_NUM (SUBPIXEL_NUM / 3)
8 | #define LEDNUM 16
9 | #define HALL_PIN 5
10 | #define SCANLINE 128
11 |
12 | #define KEY_UP (1 << 0)
13 | #define KEY_DOWN (1 << 1)
14 | #define KEY_LEFT (1 << 2)
15 | #define KEY_RIGHT (1 << 3)
16 | #define KEY_A (1 << 4)
17 | #define KEY_B (1 << 5)
18 |
19 | #define PMOD(n, M) ((((n) % (M)) + (M)) % (M))
20 |
21 | #define POV_GET_PIXEL(pov, n, s, pc) \
22 | do {\
23 | (pc)->r = (pov)[(s) * SUBPIXEL_NUM + 3 * (n)]; \
24 | (pc)->g = (pov)[(s) * SUBPIXEL_NUM + 3 * (n) + 1]; \
25 | (pc)->b = (pov)[(s) * SUBPIXEL_NUM + 3 * (n) + 2]; \
26 | } while(0)
27 |
28 | #define POV_SET_PIXEL(pov, n, s, c) \
29 | do {\
30 | (pov)[(s) * SUBPIXEL_NUM + 3 * (n) ] = (c).r; \
31 | (pov)[(s) * SUBPIXEL_NUM + 3 * (n) + 1] = (c).g; \
32 | (pov)[(s) * SUBPIXEL_NUM + 3 * (n) + 2] = (c).b; \
33 | } while(0)
34 |
35 | struct Color {
36 | uint8_t r;
37 | uint8_t g;
38 | uint8_t b;
39 |
40 | Color(uint8_t r, uint8_t g, uint8_t b): r(r), g(g), b(b) {}
41 | Color(): r(0), g(0), b(0) {}
42 | };
43 |
--------------------------------------------------------------------------------
/src/data/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | ESP8266 POV LED
6 |
25 |
26 |
27 | ESP8266 POV LED Image Converter
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
亮度
36 |
37 |
--
38 |
39 |
40 |
Gamma
41 |
42 |
--
43 |
44 |
45 |
旋转
46 |
47 |
--
48 |
49 |
50 |
51 |
52 |
53 |
296 |
297 |
298 |
299 |
--------------------------------------------------------------------------------
/src/data/index_static.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | ESP8266 POV LED
6 |
25 |
26 |
27 | ESP8266 POV LED Image Converter
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
亮度
36 |
37 |
--
38 |
39 |
40 |
Gamma
41 |
42 |
--
43 |
44 |
45 |
旋转
46 |
47 |
--
48 |
49 |
50 |
51 |
52 |
53 |
296 |
297 |
298 |
299 |
--------------------------------------------------------------------------------
/src/display.cpp:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 | #include
5 | #include
6 |
7 | #include "EspTLC5947.h"
8 | #include "common.h"
9 | #include "FixedPointsMath.h"
10 | #include "font5x7.h"
11 | #include "display.h"
12 |
13 | static uint8_t init_image[128 * 16 * 3] PROGMEM = {
14 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
15 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
16 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
17 | 255, 200, 35, 255, 199, 35, 57, 45, 8, 191, 191, 191,
18 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
19 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
20 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
21 | 255, 200, 35, 254, 200, 35, 56, 45, 8, 193, 193, 193,
22 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
23 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
24 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
25 | 255, 200, 35, 254, 200, 35, 57, 46, 9, 192, 192, 192,
26 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
27 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
28 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
29 | 255, 200, 35, 254, 199, 35, 57, 46, 8, 191, 191, 191,
30 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
31 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
32 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
33 | 255, 200, 35, 254, 199, 35, 56, 46, 8, 192, 192, 192,
34 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
35 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
36 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
37 | 255, 200, 35, 254, 199, 35, 57, 46, 9, 192, 192, 192,
38 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
39 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
40 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
41 | 255, 200, 35, 254, 200, 35, 56, 46, 8, 192, 192, 192,
42 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
43 | 255, 200, 35, 255, 200, 35, 254, 200, 35, 254, 200, 35,
44 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
45 | 255, 200, 35, 254, 200, 35, 56, 45, 9, 193, 193, 193,
46 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
47 | 255, 200, 35, 255, 200, 35, 254, 200, 35, 243, 194, 34,
48 | 254, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
49 | 255, 200, 35, 254, 199, 35, 55, 44, 8, 191, 191, 191,
50 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
51 | 255, 200, 35, 255, 200, 35, 254, 199, 34, 74, 61, 14,
52 | 247, 194, 34, 255, 200, 35, 255, 200, 35, 255, 200, 35,
53 | 255, 200, 35, 254, 200, 35, 55, 45, 8, 194, 194, 194,
54 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
55 | 255, 200, 35, 255, 200, 35, 251, 198, 34, 12, 10, 3,
56 | 223, 176, 30, 255, 200, 35, 255, 200, 35, 255, 200, 35,
57 | 255, 200, 35, 254, 200, 35, 55, 44, 8, 193, 193, 193,
58 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
59 | 255, 200, 35, 255, 200, 35, 252, 199, 34, 13, 11, 2,
60 | 212, 168, 30, 255, 200, 35, 255, 200, 35, 255, 200, 35,
61 | 255, 200, 35, 254, 200, 35, 55, 45, 8, 193, 193, 193,
62 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
63 | 255, 200, 35, 255, 200, 35, 253, 199, 34, 23, 19, 5,
64 | 202, 160, 29, 255, 200, 35, 255, 200, 35, 255, 200, 35,
65 | 255, 200, 35, 254, 200, 35, 56, 45, 9, 194, 194, 194,
66 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
67 | 255, 200, 35, 255, 200, 35, 254, 200, 35, 31, 26, 6,
68 | 193, 153, 27, 255, 200, 35, 255, 200, 35, 255, 200, 35,
69 | 255, 200, 35, 254, 199, 35, 54, 44, 9, 194, 194, 194,
70 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
71 | 255, 200, 35, 255, 200, 35, 254, 200, 34, 40, 32, 7,
72 | 183, 145, 26, 255, 200, 35, 255, 200, 35, 255, 200, 35,
73 | 255, 200, 35, 254, 199, 35, 56, 45, 9, 195, 195, 195,
74 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
75 | 255, 200, 35, 255, 200, 35, 254, 200, 35, 50, 41, 7,
76 | 175, 139, 25, 255, 200, 35, 255, 200, 35, 255, 200, 35,
77 | 255, 200, 35, 254, 200, 35, 55, 45, 9, 195, 195, 195,
78 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
79 | 255, 200, 35, 255, 200, 35, 254, 199, 35, 59, 47, 9,
80 | 166, 133, 24, 255, 200, 35, 255, 200, 35, 255, 200, 35,
81 | 255, 200, 35, 254, 200, 35, 54, 44, 9, 195, 195, 195,
82 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
83 | 255, 200, 35, 255, 200, 35, 254, 199, 35, 66, 54, 10,
84 | 158, 126, 23, 255, 200, 35, 255, 200, 35, 255, 200, 35,
85 | 255, 200, 35, 254, 199, 35, 54, 44, 9, 196, 196, 196,
86 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
87 | 255, 200, 35, 255, 200, 35, 254, 199, 35, 76, 61, 12,
88 | 149, 119, 22, 255, 200, 35, 255, 200, 35, 255, 200, 35,
89 | 255, 200, 35, 254, 200, 35, 54, 44, 8, 195, 195, 195,
90 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
91 | 255, 200, 35, 255, 200, 35, 254, 199, 35, 81, 66, 12,
92 | 142, 113, 20, 254, 200, 35, 255, 200, 35, 255, 200, 35,
93 | 255, 200, 35, 254, 200, 35, 54, 44, 9, 195, 195, 195,
94 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
95 | 255, 200, 35, 255, 200, 35, 254, 199, 35, 90, 72, 14,
96 | 134, 107, 20, 255, 200, 35, 255, 200, 35, 255, 200, 35,
97 | 255, 200, 35, 254, 199, 35, 54, 44, 8, 195, 195, 195,
98 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
99 | 255, 200, 35, 255, 200, 35, 254, 199, 35, 95, 77, 13,
100 | 128, 103, 19, 254, 200, 35, 255, 200, 35, 255, 200, 35,
101 | 255, 200, 35, 254, 200, 35, 53, 43, 9, 195, 195, 195,
102 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
103 | 255, 200, 35, 255, 200, 35, 254, 200, 35, 103, 82, 15,
104 | 123, 98, 18, 255, 200, 35, 255, 200, 35, 255, 200, 35,
105 | 255, 200, 35, 254, 200, 35, 55, 45, 9, 195, 195, 195,
106 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
107 | 255, 200, 35, 255, 200, 35, 254, 200, 35, 107, 86, 15,
108 | 116, 93, 17, 254, 199, 35, 255, 200, 35, 255, 200, 35,
109 | 255, 200, 35, 254, 200, 35, 55, 44, 8, 194, 194, 194,
110 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
111 | 255, 200, 35, 255, 200, 35, 254, 200, 35, 113, 90, 16,
112 | 112, 89, 16, 254, 200, 35, 255, 200, 35, 255, 200, 35,
113 | 255, 200, 35, 254, 199, 35, 55, 45, 9, 194, 194, 194,
114 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
115 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 119, 94, 17,
116 | 108, 86, 15, 255, 200, 35, 255, 200, 35, 255, 200, 35,
117 | 255, 200, 35, 254, 200, 35, 56, 46, 8, 195, 195, 195,
118 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
119 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 123, 98, 17,
120 | 103, 82, 14, 254, 199, 35, 255, 200, 35, 255, 200, 35,
121 | 255, 200, 35, 254, 199, 35, 54, 44, 9, 194, 194, 194,
122 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
123 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 125, 100, 18,
124 | 99, 79, 13, 254, 199, 35, 255, 200, 35, 255, 200, 35,
125 | 255, 200, 35, 254, 199, 35, 55, 45, 8, 194, 194, 194,
126 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
127 | 255, 200, 35, 255, 200, 35, 254, 200, 35, 128, 102, 18,
128 | 96, 77, 14, 254, 200, 35, 255, 200, 35, 255, 200, 35,
129 | 255, 200, 35, 254, 200, 35, 56, 45, 8, 194, 194, 194,
130 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
131 | 255, 200, 35, 255, 200, 35, 254, 199, 35, 130, 103, 18,
132 | 96, 76, 13, 255, 199, 35, 255, 200, 35, 255, 200, 35,
133 | 255, 200, 35, 254, 200, 35, 56, 45, 8, 193, 193, 193,
134 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
135 | 255, 200, 35, 255, 200, 35, 255, 199, 35, 134, 107, 19,
136 | 91, 72, 13, 255, 199, 35, 255, 200, 35, 255, 200, 35,
137 | 255, 200, 35, 254, 200, 35, 57, 46, 8, 195, 195, 195,
138 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
139 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 134, 107, 19,
140 | 92, 73, 13, 255, 200, 35, 255, 200, 35, 255, 200, 35,
141 | 255, 200, 35, 254, 200, 35, 55, 44, 8, 192, 192, 192,
142 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
143 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 134, 107, 19,
144 | 92, 73, 13, 255, 200, 35, 255, 200, 35, 255, 200, 35,
145 | 255, 200, 35, 254, 200, 35, 55, 44, 8, 191, 191, 191,
146 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
147 | 255, 200, 35, 255, 200, 35, 255, 199, 35, 135, 108, 19,
148 | 90, 71, 13, 255, 199, 35, 255, 200, 35, 255, 200, 35,
149 | 255, 200, 35, 254, 200, 35, 58, 46, 8, 194, 194, 194,
150 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
151 | 255, 200, 35, 255, 200, 35, 254, 199, 35, 134, 106, 19,
152 | 94, 75, 13, 255, 199, 35, 255, 200, 35, 255, 200, 35,
153 | 255, 200, 35, 254, 199, 35, 57, 47, 9, 191, 191, 191,
154 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
155 | 255, 200, 35, 255, 200, 35, 254, 200, 35, 130, 103, 18,
156 | 95, 75, 13, 254, 199, 35, 255, 200, 35, 255, 200, 35,
157 | 255, 200, 35, 254, 200, 35, 58, 47, 8, 192, 192, 192,
158 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
159 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 131, 104, 18,
160 | 94, 75, 13, 254, 199, 35, 255, 200, 35, 255, 200, 35,
161 | 255, 200, 35, 254, 200, 35, 58, 47, 8, 191, 191, 191,
162 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
163 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 128, 102, 18,
164 | 98, 78, 14, 254, 200, 35, 255, 200, 35, 255, 200, 35,
165 | 255, 200, 35, 254, 199, 35, 59, 47, 10, 190, 190, 190,
166 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
167 | 255, 200, 35, 255, 200, 35, 254, 200, 35, 123, 99, 18,
168 | 103, 82, 15, 254, 200, 35, 255, 200, 35, 255, 200, 35,
169 | 255, 200, 35, 254, 200, 35, 59, 48, 8, 190, 190, 190,
170 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
171 | 255, 200, 35, 255, 200, 35, 254, 199, 35, 119, 95, 17,
172 | 106, 84, 15, 254, 200, 35, 255, 200, 35, 255, 200, 35,
173 | 255, 200, 35, 254, 200, 35, 60, 49, 9, 188, 188, 188,
174 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
175 | 255, 200, 35, 255, 200, 35, 254, 200, 35, 114, 91, 16,
176 | 109, 87, 17, 254, 200, 35, 255, 200, 35, 255, 200, 35,
177 | 255, 200, 35, 254, 199, 35, 60, 49, 9, 188, 188, 188,
178 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
179 | 255, 200, 35, 255, 200, 35, 254, 200, 35, 111, 88, 17,
180 | 114, 91, 17, 255, 200, 35, 255, 200, 35, 255, 200, 35,
181 | 255, 200, 35, 254, 200, 35, 62, 50, 10, 188, 188, 188,
182 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
183 | 255, 200, 35, 255, 200, 35, 254, 200, 35, 104, 83, 14,
184 | 119, 95, 18, 254, 200, 35, 255, 200, 35, 255, 200, 35,
185 | 255, 200, 35, 254, 199, 35, 61, 50, 10, 187, 187, 187,
186 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
187 | 255, 200, 35, 255, 200, 35, 254, 200, 35, 98, 79, 15,
188 | 125, 100, 19, 255, 200, 35, 255, 200, 35, 255, 200, 35,
189 | 255, 200, 35, 254, 200, 35, 62, 51, 10, 186, 186, 186,
190 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
191 | 255, 200, 35, 255, 200, 35, 254, 200, 35, 93, 75, 14,
192 | 132, 105, 19, 254, 200, 35, 255, 200, 35, 255, 200, 35,
193 | 255, 200, 35, 254, 200, 35, 63, 51, 10, 187, 187, 187,
194 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
195 | 255, 200, 35, 255, 200, 35, 254, 200, 35, 85, 69, 13,
196 | 140, 112, 20, 255, 200, 35, 255, 200, 35, 255, 200, 35,
197 | 255, 200, 35, 254, 199, 35, 63, 50, 9, 187, 187, 187,
198 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
199 | 255, 200, 35, 255, 200, 35, 254, 199, 35, 77, 62, 11,
200 | 146, 116, 21, 255, 200, 35, 255, 200, 35, 255, 200, 35,
201 | 255, 200, 35, 254, 200, 35, 63, 51, 10, 186, 186, 186,
202 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
203 | 255, 200, 35, 255, 200, 35, 254, 200, 35, 68, 55, 11,
204 | 151, 121, 22, 255, 200, 35, 255, 200, 35, 255, 200, 35,
205 | 255, 200, 35, 254, 200, 35, 65, 52, 11, 185, 185, 185,
206 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
207 | 255, 200, 35, 255, 200, 35, 254, 200, 35, 62, 50, 9,
208 | 162, 128, 23, 254, 200, 35, 255, 200, 35, 255, 200, 35,
209 | 255, 200, 35, 254, 200, 35, 66, 54, 10, 186, 186, 186,
210 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
211 | 255, 200, 35, 255, 200, 35, 254, 199, 35, 54, 44, 9,
212 | 171, 135, 24, 255, 200, 35, 255, 200, 35, 255, 200, 35,
213 | 255, 200, 35, 254, 199, 35, 66, 54, 10, 186, 186, 186,
214 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
215 | 255, 200, 35, 255, 200, 35, 254, 200, 35, 44, 36, 7,
216 | 179, 142, 26, 254, 200, 35, 255, 200, 35, 255, 200, 35,
217 | 255, 200, 35, 254, 200, 35, 66, 54, 11, 184, 184, 184,
218 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
219 | 255, 200, 35, 255, 200, 35, 254, 200, 34, 37, 30, 7,
220 | 188, 149, 27, 255, 200, 35, 255, 200, 35, 255, 200, 35,
221 | 255, 200, 35, 254, 199, 35, 66, 54, 11, 182, 182, 182,
222 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
223 | 255, 200, 35, 255, 200, 35, 254, 200, 35, 27, 22, 5,
224 | 197, 156, 28, 255, 200, 35, 255, 200, 35, 255, 200, 35,
225 | 255, 200, 35, 254, 199, 35, 67, 54, 10, 181, 181, 181,
226 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
227 | 255, 200, 35, 255, 200, 35, 253, 200, 35, 22, 19, 5,
228 | 208, 165, 29, 255, 200, 35, 255, 200, 35, 255, 200, 35,
229 | 255, 200, 35, 254, 200, 35, 67, 55, 11, 180, 180, 180,
230 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
231 | 255, 200, 35, 255, 200, 35, 254, 200, 34, 74, 61, 14,
232 | 239, 188, 33, 255, 200, 35, 255, 200, 35, 255, 200, 35,
233 | 255, 200, 35, 254, 199, 35, 69, 56, 10, 180, 180, 180,
234 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
235 | 255, 200, 35, 255, 200, 35, 254, 200, 35, 241, 192, 33,
236 | 254, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
237 | 255, 200, 35, 254, 199, 35, 70, 56, 10, 179, 179, 179,
238 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
239 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 254, 199, 35,
240 | 254, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
241 | 255, 200, 35, 254, 200, 35, 70, 56, 11, 179, 179, 179,
242 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
243 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
244 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
245 | 255, 200, 35, 254, 199, 35, 70, 56, 10, 178, 178, 178,
246 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
247 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
248 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
249 | 255, 200, 35, 254, 200, 35, 70, 57, 10, 178, 178, 178,
250 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
251 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
252 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
253 | 255, 200, 35, 254, 199, 35, 70, 57, 10, 177, 177, 177,
254 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
255 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
256 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
257 | 255, 200, 35, 255, 199, 35, 70, 57, 10, 177, 177, 177,
258 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
259 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
260 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
261 | 255, 200, 35, 254, 200, 35, 72, 58, 10, 177, 177, 177,
262 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
263 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
264 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
265 | 255, 200, 35, 254, 199, 35, 71, 57, 11, 177, 177, 177,
266 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
267 | 254, 200, 35, 254, 199, 35, 254, 200, 35, 255, 200, 35,
268 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
269 | 255, 200, 35, 255, 199, 35, 72, 58, 10, 175, 175, 175,
270 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
271 | 254, 200, 35, 254, 200, 35, 254, 199, 35, 255, 200, 35,
272 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
273 | 255, 200, 35, 255, 199, 35, 73, 58, 10, 175, 175, 175,
274 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
275 | 254, 200, 35, 206, 167, 29, 247, 196, 34, 255, 200, 35,
276 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
277 | 255, 200, 35, 254, 199, 35, 71, 57, 10, 177, 177, 177,
278 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
279 | 248, 196, 34, 33, 27, 6, 169, 136, 25, 254, 200, 35,
280 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
281 | 255, 200, 35, 254, 199, 35, 72, 58, 10, 177, 177, 177,
282 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
283 | 219, 174, 30, 1, 0, 0, 76, 62, 13, 254, 200, 35,
284 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
285 | 255, 200, 35, 254, 200, 35, 71, 57, 10, 177, 177, 177,
286 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
287 | 181, 145, 25, 0, 0, 0, 13, 11, 3, 245, 194, 34,
288 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
289 | 255, 200, 35, 254, 199, 35, 71, 57, 10, 176, 176, 176,
290 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 254, 200, 35,
291 | 158, 126, 22, 0, 0, 0, 0, 0, 1, 201, 160, 28,
292 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
293 | 255, 200, 35, 254, 199, 35, 71, 57, 11, 177, 177, 177,
294 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 254, 200, 35,
295 | 144, 115, 21, 0, 0, 0, 0, 0, 0, 151, 120, 22,
296 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
297 | 255, 200, 35, 254, 200, 35, 71, 57, 10, 177, 177, 177,
298 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
299 | 138, 110, 19, 0, 0, 0, 0, 0, 0, 106, 85, 15,
300 | 254, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
301 | 255, 200, 35, 254, 199, 35, 71, 57, 10, 178, 178, 178,
302 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
303 | 140, 112, 19, 0, 0, 0, 0, 0, 0, 64, 51, 9,
304 | 254, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
305 | 255, 200, 35, 254, 199, 35, 70, 57, 10, 179, 179, 179,
306 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
307 | 143, 113, 20, 0, 0, 0, 0, 0, 0, 24, 20, 3,
308 | 253, 199, 34, 255, 200, 35, 255, 200, 35, 255, 200, 35,
309 | 255, 200, 35, 254, 199, 35, 70, 57, 10, 179, 179, 179,
310 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
311 | 159, 126, 22, 0, 0, 0, 0, 0, 0, 3, 2, 1,
312 | 241, 190, 33, 255, 200, 35, 255, 200, 35, 255, 200, 35,
313 | 255, 200, 35, 254, 200, 35, 69, 56, 11, 178, 178, 178,
314 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
315 | 179, 142, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0,
316 | 219, 173, 30, 255, 200, 35, 255, 200, 35, 255, 200, 35,
317 | 255, 200, 35, 254, 199, 35, 69, 56, 11, 180, 180, 180,
318 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
319 | 201, 158, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0,
320 | 199, 158, 28, 255, 200, 35, 255, 200, 35, 255, 200, 35,
321 | 255, 200, 35, 254, 200, 35, 68, 55, 10, 180, 180, 180,
322 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
323 | 236, 187, 33, 2, 1, 0, 0, 0, 0, 0, 0, 0,
324 | 191, 151, 27, 255, 200, 35, 255, 200, 35, 255, 200, 35,
325 | 255, 200, 35, 254, 200, 35, 67, 54, 10, 182, 182, 182,
326 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
327 | 254, 200, 34, 30, 25, 4, 0, 0, 0, 0, 0, 0,
328 | 192, 152, 27, 255, 200, 35, 255, 200, 35, 255, 200, 35,
329 | 255, 200, 35, 254, 200, 35, 68, 55, 10, 184, 184, 184,
330 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
331 | 255, 199, 35, 89, 72, 13, 0, 0, 0, 0, 0, 0,
332 | 212, 167, 30, 255, 200, 35, 255, 200, 35, 255, 200, 35,
333 | 255, 200, 35, 254, 200, 35, 68, 55, 9, 184, 184, 184,
334 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
335 | 255, 200, 35, 180, 144, 25, 2, 2, 2, 21, 16, 4,
336 | 245, 194, 34, 255, 200, 35, 255, 200, 35, 255, 200, 35,
337 | 255, 200, 35, 254, 200, 35, 66, 53, 10, 182, 182, 182,
338 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
339 | 255, 200, 35, 251, 198, 34, 115, 94, 18, 153, 123, 22,
340 | 254, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
341 | 255, 200, 35, 254, 199, 35, 66, 53, 10, 184, 184, 184,
342 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
343 | 255, 200, 35, 254, 200, 35, 252, 200, 34, 253, 200, 35,
344 | 254, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
345 | 255, 200, 35, 254, 200, 35, 65, 53, 10, 184, 184, 184,
346 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
347 | 255, 200, 35, 255, 200, 35, 254, 199, 35, 254, 200, 35,
348 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
349 | 255, 200, 35, 254, 200, 35, 65, 53, 10, 184, 184, 184,
350 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
351 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
352 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
353 | 255, 200, 35, 254, 200, 35, 65, 53, 11, 185, 185, 185,
354 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
355 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
356 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
357 | 255, 200, 35, 254, 199, 35, 63, 51, 10, 185, 185, 185,
358 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
359 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
360 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
361 | 255, 200, 35, 254, 200, 35, 63, 51, 10, 186, 186, 186,
362 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
363 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
364 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
365 | 255, 200, 35, 254, 200, 35, 64, 51, 9, 186, 186, 186,
366 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
367 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
368 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
369 | 255, 200, 35, 254, 199, 35, 63, 50, 9, 186, 186, 186,
370 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
371 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
372 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
373 | 255, 200, 35, 254, 199, 35, 62, 50, 10, 188, 188, 188,
374 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
375 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
376 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
377 | 255, 200, 35, 254, 199, 35, 61, 49, 9, 187, 187, 187,
378 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
379 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
380 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
381 | 255, 200, 35, 254, 200, 35, 61, 49, 9, 188, 188, 188,
382 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
383 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
384 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
385 | 255, 200, 35, 254, 200, 35, 61, 49, 8, 189, 189, 189,
386 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
387 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
388 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
389 | 255, 200, 35, 254, 200, 35, 60, 49, 8, 188, 188, 188,
390 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
391 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
392 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
393 | 255, 200, 35, 254, 200, 35, 60, 49, 8, 191, 191, 191,
394 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
395 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
396 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
397 | 255, 200, 35, 254, 199, 35, 58, 47, 8, 189, 189, 189,
398 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
399 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
400 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
401 | 255, 200, 35, 254, 199, 35, 58, 47, 8, 190, 190, 190,
402 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
403 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
404 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
405 | 255, 200, 35, 254, 200, 35, 60, 48, 8, 193, 193, 193,
406 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
407 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
408 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
409 | 255, 200, 35, 254, 200, 35, 59, 47, 8, 190, 190, 190,
410 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
411 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
412 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
413 | 255, 200, 35, 254, 200, 35, 59, 48, 9, 192, 192, 192,
414 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
415 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
416 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
417 | 255, 200, 35, 254, 199, 35, 58, 47, 8, 191, 191, 191,
418 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
419 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
420 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
421 | 255, 200, 35, 254, 200, 35, 57, 46, 8, 191, 191, 191,
422 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
423 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
424 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
425 | 255, 200, 35, 254, 200, 35, 58, 47, 9, 192, 192, 192,
426 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
427 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
428 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
429 | 255, 200, 35, 254, 199, 35, 57, 46, 8, 192, 192, 192,
430 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
431 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
432 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
433 | 255, 200, 35, 254, 200, 35, 57, 46, 9, 192, 192, 192,
434 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
435 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
436 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
437 | 255, 200, 35, 254, 199, 35, 57, 46, 9, 192, 192, 192,
438 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
439 | 254, 199, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
440 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
441 | 255, 200, 35, 254, 200, 35, 56, 45, 9, 193, 193, 193,
442 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
443 | 254, 199, 35, 255, 199, 35, 255, 200, 35, 255, 200, 35,
444 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
445 | 255, 200, 35, 254, 199, 35, 57, 46, 9, 193, 193, 193,
446 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 254, 200, 35,
447 | 241, 194, 34, 254, 199, 35, 255, 200, 35, 255, 200, 35,
448 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
449 | 255, 200, 35, 254, 199, 35, 56, 45, 8, 193, 193, 193,
450 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 254, 200, 35,
451 | 108, 90, 17, 244, 194, 34, 254, 200, 35, 255, 200, 35,
452 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
453 | 255, 200, 35, 254, 199, 35, 56, 46, 9, 193, 193, 193,
454 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 251, 198, 34,
455 | 19, 16, 5, 146, 118, 23, 253, 200, 35, 254, 200, 35,
456 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
457 | 255, 200, 35, 254, 199, 35, 56, 46, 9, 193, 193, 193,
458 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 248, 196, 34,
459 | 8, 7, 2, 16, 14, 6, 195, 157, 28, 254, 200, 35,
460 | 254, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
461 | 255, 200, 35, 254, 200, 35, 55, 45, 8, 193, 193, 193,
462 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 248, 196, 34,
463 | 9, 7, 2, 0, 0, 1, 25, 20, 6, 177, 143, 25,
464 | 252, 199, 34, 254, 199, 35, 255, 200, 35, 255, 200, 35,
465 | 255, 200, 35, 254, 199, 35, 57, 46, 8, 193, 193, 193,
466 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 252, 198, 34,
467 | 25, 21, 4, 0, 0, 0, 0, 0, 0, 6, 5, 2,
468 | 105, 85, 15, 253, 199, 34, 255, 200, 35, 255, 200, 35,
469 | 255, 200, 35, 254, 199, 35, 57, 46, 8, 194, 194, 194,
470 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 254, 200, 35,
471 | 48, 39, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
472 | 2, 2, 2, 232, 184, 32, 255, 200, 35, 255, 200, 35,
473 | 255, 200, 35, 254, 200, 35, 55, 44, 9, 192, 192, 192,
474 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 254, 199, 35,
475 | 86, 70, 12, 29, 24, 6, 82, 68, 14, 23, 19, 5,
476 | 12, 9, 3, 241, 190, 33, 255, 200, 35, 255, 200, 35,
477 | 255, 200, 35, 254, 200, 35, 57, 46, 9, 192, 192, 192,
478 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 254, 199, 35,
479 | 120, 96, 18, 20, 16, 3, 242, 195, 34, 231, 186, 32,
480 | 213, 171, 30, 254, 200, 35, 255, 200, 35, 255, 200, 35,
481 | 255, 200, 35, 254, 199, 35, 57, 46, 9, 192, 192, 192,
482 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 254, 200, 35,
483 | 174, 139, 25, 0, 0, 1, 197, 157, 27, 254, 199, 35,
484 | 254, 200, 35, 254, 200, 35, 255, 200, 35, 255, 200, 35,
485 | 255, 200, 35, 254, 200, 35, 57, 46, 9, 192, 192, 192,
486 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
487 | 221, 176, 30, 3, 3, 2, 127, 103, 19, 254, 199, 35,
488 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
489 | 255, 200, 35, 254, 200, 35, 56, 46, 9, 192, 192, 192,
490 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
491 | 252, 199, 34, 35, 29, 6, 47, 38, 8, 250, 198, 34,
492 | 254, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
493 | 255, 200, 35, 254, 200, 35, 56, 45, 9, 191, 191, 191,
494 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
495 | 254, 200, 35, 108, 86, 16, 2, 2, 1, 197, 158, 27,
496 | 255, 199, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
497 | 255, 200, 35, 254, 199, 35, 58, 47, 9, 192, 192, 192,
498 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
499 | 254, 199, 35, 189, 151, 27, 2, 1, 1, 86, 69, 13,
500 | 254, 199, 34, 255, 200, 35, 255, 200, 35, 255, 200, 35,
501 | 255, 200, 35, 254, 200, 35, 58, 47, 8, 191, 191, 191,
502 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
503 | 255, 200, 35, 248, 196, 34, 46, 37, 7, 4, 3, 2,
504 | 197, 157, 28, 255, 200, 35, 255, 200, 35, 255, 200, 35,
505 | 255, 200, 35, 254, 200, 35, 58, 46, 9, 191, 191, 191,
506 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
507 | 255, 200, 35, 254, 199, 35, 162, 129, 23, 0, 0, 0,
508 | 110, 88, 17, 254, 200, 35, 255, 200, 35, 255, 200, 35,
509 | 255, 200, 35, 254, 200, 35, 57, 46, 8, 191, 191, 191,
510 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
511 | 255, 200, 35, 255, 199, 35, 247, 196, 34, 63, 52, 11,
512 | 118, 93, 17, 254, 199, 35, 255, 200, 35, 255, 200, 35,
513 | 255, 200, 35, 254, 200, 35, 57, 46, 8, 191, 191, 191,
514 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
515 | 255, 200, 35, 255, 200, 35, 254, 199, 35, 221, 177, 31,
516 | 217, 173, 30, 255, 200, 35, 255, 200, 35, 255, 200, 35,
517 | 255, 200, 35, 254, 199, 35, 57, 46, 9, 191, 191, 191,
518 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
519 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 254, 199, 35,
520 | 254, 199, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
521 | 255, 200, 35, 254, 200, 35, 57, 45, 8, 193, 193, 193,
522 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
523 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
524 | 255, 200, 35, 255, 200, 35, 255, 200, 35, 255, 200, 35,
525 | 255, 200, 35, 254, 199, 35, 57, 46, 8, 191, 191, 191,
526 | };
527 |
528 | volatile uint32_t time_last_scanned = 0;
529 | volatile uint32_t last_duration = 0;
530 |
531 | uint8_t brightness = 1;
532 | uint32_t scanRotate = 5 * SCANLINE / 6;
533 | uint32_t data_array[TLC_NUM * TLC_WORD] = {0};
534 | uint8_t pov_buf_bg[SCANLINE * SUBPIXEL_NUM];
535 | uint8_t pov_buf[SCANLINE * SUBPIXEL_NUM];
536 | uint8_t gamma8[256] = {0};
537 |
538 |
539 | static void genGamma8(uint8_t *to, float gamma){
540 | for (int i = 0; i < 256; i ++){
541 | to[i] = round(pow(i / 255.0, gamma) * 255);
542 | }
543 | }
544 |
545 | void setupDisplay(){
546 | SPI.begin();
547 | SPI.setFrequency(40000000);
548 | SPI.setBitOrder(MSBFIRST);
549 | pinMode(LATCH_PIN, OUTPUT);
550 | pinMode(HALL_PIN, INPUT_PULLUP);
551 |
552 | tlc_clear(data_array, TLC_NUM);
553 | tlc_write(data_array, TLC_NUM, LATCH_PIN, -1);
554 |
555 | for (uint32_t i = 0; i < SCANLINE * SUBPIXEL_NUM; i ++)
556 | {
557 | pov_buf_bg[i] = pgm_read_byte(init_image + i);
558 | pov_buf[i] = pov_buf_bg[i];
559 | }
560 |
561 | genGamma8(gamma8, 3.0);
562 | attachInterrupt(digitalPinToInterrupt(HALL_PIN), handleHall, FALLING);
563 | }
564 |
565 |
566 | void ICACHE_RAM_ATTR handleHall(void){
567 | uint32_t time_now = micros();
568 | uint32_t duration = time_now - time_last_scanned;
569 |
570 | last_duration = duration;
571 | time_last_scanned = time_now;
572 | }
573 |
574 | void ICACHE_RAM_ATTR pov_update(){
575 | static uint16_t lastScan = 0;
576 | uint16_t scan = 0;
577 | if (last_duration != 0)
578 | scan = ((micros() - time_last_scanned) * SCANLINE / last_duration);
579 | scan %= SCANLINE;
580 | if (scan == lastScan)
581 | //return 0;
582 | return;
583 | lastScan = scan;
584 | for (uint8_t i = 0; i < TLC_CHAN * 2; i++){
585 | uint32_t line = (scan + scanRotate) % SCANLINE;
586 | uint32_t p = gamma8[pov_buf[line * 2 * TLC_CHAN + i]] * brightness * (i/3 + 1) / LEDNUM;
587 | tlc_setpwm(data_array, TLC_NUM, led_map[i], p);
588 | }
589 | tlc_write(data_array, TLC_NUM, LATCH_PIN, -1);
590 | //return 1;
591 | }
592 |
593 | SQ15x16 polorDistance(SQ15x16 r1, SQ15x16 a1, SQ15x16 r2, SQ15x16 a2){
594 | SQ15x16 da = minfp(absfp(a1-a2), SQ15x16::Pi * 2 -absfp(a1-a2));
595 | return sqrtfp(r1*r1 + r2*r2 - 2*cosfp(da)*r1*r2);
596 | }
597 |
598 | SQ15x16 calcSdfCircle(SQ15x16 r, SQ15x16 theta, SQ15x16 R, SQ15x16 pr, SQ15x16 ptheta){
599 | SQ15x16 diff = polorDistance(pr, ptheta, r, theta) - R;
600 | if (diff < -1){
601 | return 1;
602 | }
603 | if (diff < 0){
604 | return - diff;
605 | }
606 | else {
607 | return 0;
608 | }
609 | }
610 |
611 | void clearCircle(SQ15x16 r, SQ15x16 theta, SQ15x16 R){
612 | SQ15x16 d = r - R;
613 | SQ15x16 angleRange;
614 | int startRing, endRing, startScan, endScan;
615 | if (d >= 0){
616 | startRing = (d - 1).getInteger();
617 | endRing = min((r + R).getInteger() + 1, LEDNUM);
618 | angleRange = atan2fp(R, r);
619 | startScan = (((theta - angleRange) / (2 * SQ15x16::Pi)) * SCANLINE).getInteger() - 1;
620 | endScan = (((theta + angleRange) / (2 * SQ15x16::Pi)) * SCANLINE).getInteger() + 1;
621 | }
622 | else {
623 | startRing = (d - 1).getInteger();
624 | endRing = min((r + R).getInteger() + 1, LEDNUM);
625 | startScan = 0;
626 | endScan = SCANLINE;
627 | }
628 |
629 | for (int i = startRing; i < endRing; i ++){
630 | for (int j = startScan; j < endScan; j ++){
631 | int n = abs(i);
632 | int s = PMOD(j, SCANLINE);
633 | if (n > LEDNUM)
634 | break;
635 | Color c;
636 | POV_GET_PIXEL(pov_buf_bg, n, s, &c);
637 | POV_SET_PIXEL(pov_buf, n, s, c);
638 | }
639 | pov_update();
640 | }
641 | }
642 |
643 | void fillCircle(SQ15x16 r, SQ15x16 theta, SQ15x16 R, Color color){
644 | SQ15x16 d = r - R;
645 | SQ15x16 angleRange;
646 | int startRing, endRing, startScan, endScan;
647 | if (d >= 0){
648 | startRing = (d - 1).getInteger();
649 | endRing = min((r + R).getInteger() + 1, LEDNUM);
650 | angleRange = atan2fp(R, r);
651 | startScan = (((theta - angleRange) / (2 * SQ15x16::Pi)) * SCANLINE).getInteger() - 1;
652 | endScan = (((theta + angleRange) / (2 * SQ15x16::Pi)) * SCANLINE).getInteger() + 1;
653 | }
654 | else {
655 | startRing = (d - 1).getInteger();
656 | endRing = min((r + R).getInteger() + 1, LEDNUM);
657 | startScan = 0;
658 | endScan = SCANLINE;
659 | }
660 | for (int i = startRing; i < endRing; i ++){
661 | for (int j = startScan; j < endScan; j ++){
662 | int n = abs(i);
663 | int s = PMOD(j, SCANLINE);
664 | if (n > LEDNUM)
665 | break;
666 |
667 | SQ15x16 pr = n;
668 | SQ15x16 ptheta = s * 2 * SQ15x16::Pi / SCANLINE;
669 | SQ15x16 sdf = calcSdfCircle(r, theta, R, pr, ptheta);
670 | Color c_ori;
671 | POV_GET_PIXEL(pov_buf, n, s, &c_ori);
672 | c_ori.r = (c_ori.r * (1-sdf)).getInteger(); c_ori.r += (sdf*color.r).getInteger();
673 | c_ori.g = (c_ori.g * (1-sdf)).getInteger(); c_ori.g += (sdf*color.g).getInteger();
674 | c_ori.b = (c_ori.b * (1-sdf)).getInteger(); c_ori.b += (sdf*color.b).getInteger();
675 | POV_SET_PIXEL(pov_buf, n, s, c_ori);
676 | pov_update();
677 | }
678 | }
679 | }
680 |
681 | void clearText5x7(uint32_t r, int32_t s, const char* text, bool flip){
682 | for (uint32_t i = 0; text[i]; i ++){
683 | if (text[i] < ' ' || text[i] >= 128)
684 | continue;
685 | Color c;
686 | for (uint8_t y = 0; y < 7; y ++){
687 | for (uint8_t x = 0; x < 5; x ++){
688 | if (!flip){
689 | if (r + y < LEDNUM){
690 | POV_GET_PIXEL(pov_buf_bg, r+y, PMOD((s+x), SCANLINE), &c);
691 | POV_SET_PIXEL(pov_buf, r+y, PMOD((s+x), SCANLINE), c);
692 | }
693 | }
694 | else{
695 | if (r + y < LEDNUM){
696 | POV_GET_PIXEL(pov_buf_bg, r+y, PMOD((s-x), SCANLINE), &c);
697 | POV_SET_PIXEL(pov_buf, r+y, PMOD((s-x), SCANLINE), c);
698 | }
699 | }
700 | }
701 | }
702 | pov_update();
703 | if (!flip)
704 | s += 6;
705 | else
706 | s -= 6;
707 | }
708 | }
709 |
710 | void drawText5x7(uint32_t r, int32_t s, const char* text, Color color, bool flip){
711 | for (uint32_t i = 0; text[i]; i ++){
712 | if (text[i] < ' ' || text[i] >= 128)
713 | continue;
714 |
715 | for (uint8_t y = 0; y < 7; y ++){
716 | for (uint8_t x = 0; x < 5; x ++){
717 | if (!flip){
718 | if (r + y < LEDNUM && (font5x7[text[i]-32][6 - y] & (1 << (4 - x))))
719 | POV_SET_PIXEL(pov_buf, r+y, PMOD((s+x), SCANLINE), color);
720 | }
721 | else{
722 | if (r + y < LEDNUM && (font5x7[text[i]-32][y] & (1 << (4 - x))))
723 | POV_SET_PIXEL(pov_buf, r+y, PMOD((s-x), SCANLINE), color);
724 | }
725 | }
726 | }
727 | pov_update();
728 |
729 | if (!flip)
730 | s += 6;
731 | else
732 | s -= 6;
733 | }
734 | }
735 |
--------------------------------------------------------------------------------
/src/display.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 | #include "common.h"
3 | #include "EspTLC5947.h"
4 |
5 | const uint8_t led_map[48] = {
6 | 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
7 | 9, 10, 11, 6, 7, 8, 3, 4, 5, 0, 1, 2,
8 | 45, 46, 47, 42, 43, 44, 39, 40, 41, 36, 37, 38,
9 | 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23
10 | };
11 |
12 | void setupDisplay();
13 | void ICACHE_RAM_ATTR handleHall (void);
14 | void ICACHE_RAM_ATTR pov_update (void);
15 | SQ15x16 polorDistance(SQ15x16 r1, SQ15x16 a1, SQ15x16 r2, SQ15x16 a2);
16 | SQ15x16 calcSdfCircle(SQ15x16 r, SQ15x16 theta, SQ15x16 R, SQ15x16 pr, SQ15x16 ptheta);
17 | void clearCircle(SQ15x16 r, SQ15x16 theta, SQ15x16 R);
18 | void fillCircle(SQ15x16 r, SQ15x16 theta, SQ15x16 R, Color color);
19 | void clearText5x7(uint32_t r, int32_t s, const char* text, bool flip = false);
20 | void drawText5x7(uint32_t r, int32_t s, const char* text, Color color, bool flip = false);
21 |
22 | extern uint8_t brightness;
23 | extern uint32_t scanRotate;
24 | extern uint32_t data_array[TLC_NUM * TLC_WORD];
25 | extern uint8_t pov_buf_bg[SCANLINE * SUBPIXEL_NUM];
26 | extern uint8_t pov_buf[SCANLINE * SUBPIXEL_NUM];
27 | extern uint8_t gamma8[256];
28 |
29 |
30 | inline void commitBg(){
31 | memcpy(pov_buf_bg, pov_buf, SCANLINE * SUBPIXEL_NUM);
32 | }
33 |
34 | inline void clearBg(){
35 | memset(pov_buf_bg, 0, SCANLINE * SUBPIXEL_NUM);
36 | memset(pov_buf, 0, SCANLINE * SUBPIXEL_NUM);
37 | }
38 |
39 | inline void clearScr(){
40 | memset(pov_buf, 0, SCANLINE * SUBPIXEL_NUM);
41 | }
42 |
43 | inline void clearFg(){
44 | memcpy(pov_buf, pov_buf_bg, SCANLINE * SUBPIXEL_NUM);
45 | }
46 |
--------------------------------------------------------------------------------
/src/font5x7.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 | const uint8_t font5x7[96][7] = {
3 | {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,}, // 0x20, Space
4 | {0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x04,}, // 0x21, !
5 | {0x09, 0x09, 0x12, 0x00, 0x00, 0x00, 0x00,}, // 0x22, "
6 | {0x0a, 0x0a, 0x1f, 0x0a, 0x1f, 0x0a, 0x0a,}, // 0x23, #
7 | {0x04, 0x0f, 0x14, 0x0e, 0x05, 0x1e, 0x04,}, // 0x24, $
8 | {0x19, 0x19, 0x02, 0x04, 0x08, 0x13, 0x13,}, // 0x25, %
9 | {0x04, 0x0a, 0x0a, 0x0a, 0x15, 0x12, 0x0d,}, // 0x26, &
10 | {0x04, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00,}, // 0x27, '
11 | {0x02, 0x04, 0x08, 0x08, 0x08, 0x04, 0x02,}, // 0x28, (
12 | {0x08, 0x04, 0x02, 0x02, 0x02, 0x04, 0x08,}, // 0x29, )
13 | {0x04, 0x15, 0x0e, 0x1f, 0x0e, 0x15, 0x04,}, // 0x2a, *
14 | {0x00, 0x04, 0x04, 0x1f, 0x04, 0x04, 0x00,}, // 0x2b, +
15 | {0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x08,}, // 0x2c, ,
16 | {0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00,}, // 0x2d, -
17 | {0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0c,}, // 0x2e, .
18 | {0x01, 0x01, 0x02, 0x04, 0x08, 0x10, 0x10,}, // 0x2f, /
19 | {0x0e, 0x11, 0x13, 0x15, 0x19, 0x11, 0x0e,}, // 0x30, 0
20 | {0x04, 0x0c, 0x04, 0x04, 0x04, 0x04, 0x0e,}, // 0x31, 1
21 | {0x0e, 0x11, 0x01, 0x02, 0x04, 0x08, 0x1f,}, // 0x32, 2
22 | {0x0e, 0x11, 0x01, 0x06, 0x01, 0x11, 0x0e,}, // 0x33, 3
23 | {0x02, 0x06, 0x0a, 0x12, 0x1f, 0x02, 0x02,}, // 0x34, 4
24 | {0x1f, 0x10, 0x1e, 0x01, 0x01, 0x11, 0x0e,}, // 0x35, 5
25 | {0x06, 0x08, 0x10, 0x1e, 0x11, 0x11, 0x0e,}, // 0x36, 6
26 | {0x1f, 0x01, 0x02, 0x04, 0x08, 0x08, 0x08,}, // 0x37, 7
27 | {0x0e, 0x11, 0x11, 0x0e, 0x11, 0x11, 0x0e,}, // 0x38, 8
28 | {0x0e, 0x11, 0x11, 0x0f, 0x01, 0x02, 0x0c,}, // 0x39, 9
29 | {0x00, 0x0c, 0x0c, 0x00, 0x0c, 0x0c, 0x00,}, // 0x3a, :
30 | {0x00, 0x0c, 0x0c, 0x00, 0x0c, 0x04, 0x08,}, // 0x3b, ;
31 | {0x02, 0x04, 0x08, 0x10, 0x08, 0x04, 0x02,}, // 0x3c, <
32 | {0x00, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x00,}, // 0x3d, =
33 | {0x08, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08,}, // 0x3e, >
34 | {0x0e, 0x11, 0x01, 0x02, 0x04, 0x00, 0x04,}, // 0x3f, ?
35 | {0x0e, 0x11, 0x17, 0x15, 0x17, 0x10, 0x0f,}, // 0x40, @
36 | {0x04, 0x0a, 0x11, 0x11, 0x1f, 0x11, 0x11,}, // 0x41, A
37 | {0x1e, 0x11, 0x11, 0x1e, 0x11, 0x11, 0x1e,}, // 0x42, B
38 | {0x0e, 0x11, 0x10, 0x10, 0x10, 0x11, 0x0e,}, // 0x43, C
39 | {0x1e, 0x09, 0x09, 0x09, 0x09, 0x09, 0x1e,}, // 0x44, D
40 | {0x1f, 0x10, 0x10, 0x1c, 0x10, 0x10, 0x1f,}, // 0x45, E
41 | {0x1f, 0x10, 0x10, 0x1f, 0x10, 0x10, 0x10,}, // 0x46, F
42 | {0x0e, 0x11, 0x10, 0x10, 0x13, 0x11, 0x0f,}, // 0x37, G
43 | {0x11, 0x11, 0x11, 0x1f, 0x11, 0x11, 0x11,}, // 0x48, H
44 | {0x0e, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0e,}, // 0x49, I
45 | {0x1f, 0x02, 0x02, 0x02, 0x02, 0x12, 0x0c,}, // 0x4a, J
46 | {0x11, 0x12, 0x14, 0x18, 0x14, 0x12, 0x11,}, // 0x4b, K
47 | {0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f,}, // 0x4c, L
48 | {0x11, 0x1b, 0x15, 0x11, 0x11, 0x11, 0x11,}, // 0x4d, M
49 | {0x11, 0x11, 0x19, 0x15, 0x13, 0x11, 0x11,}, // 0x4e, N
50 | {0x0e, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0e,}, // 0x4f, O
51 | {0x1e, 0x11, 0x11, 0x1e, 0x10, 0x10, 0x10,}, // 0x50, P
52 | {0x0e, 0x11, 0x11, 0x11, 0x15, 0x12, 0x0d,}, // 0x51, Q
53 | {0x1e, 0x11, 0x11, 0x1e, 0x14, 0x12, 0x11,}, // 0x52, R
54 | {0x0e, 0x11, 0x10, 0x0e, 0x01, 0x11, 0x0e,}, // 0x53, S
55 | {0x1f, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,}, // 0x54, T
56 | {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0e,}, // 0x55, U
57 | {0x11, 0x11, 0x11, 0x11, 0x11, 0x0a, 0x04,}, // 0x56, V
58 | {0x11, 0x11, 0x11, 0x15, 0x15, 0x1b, 0x11,}, // 0x57, W
59 | {0x11, 0x11, 0x0a, 0x04, 0x0a, 0x11, 0x11,}, // 0x58, X
60 | {0x11, 0x11, 0x0a, 0x04, 0x04, 0x04, 0x04,}, // 0x59, Y
61 | {0x1f, 0x01, 0x02, 0x04, 0x08, 0x10, 0x1f,}, // 0x5a, Z
62 | {0x0e, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0e,}, // 0x5b, [
63 | {0x10, 0x10, 0x08, 0x04, 0x02, 0x01, 0x01,}, // 0x5c, '\'
64 | {0x0e, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0e,}, // 0x5d, ]
65 | {0x04, 0x0a, 0x11, 0x00, 0x00, 0x00, 0x00,}, // 0x5e, ^
66 | {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f,}, // 0x5f, _
67 | {0x04, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00,}, // 0x60, `
68 | {0x00, 0x0e, 0x01, 0x0d, 0x13, 0x13, 0x0d,}, // 0x61, a
69 | {0x10, 0x10, 0x10, 0x1c, 0x12, 0x12, 0x1c,}, // 0x62, b
70 | {0x00, 0x00, 0x00, 0x0e, 0x10, 0x10, 0x0e,}, // 0x63, c
71 | {0x01, 0x01, 0x01, 0x07, 0x09, 0x09, 0x07,}, // 0x64, d
72 | {0x00, 0x00, 0x0e, 0x11, 0x1f, 0x10, 0x0f,}, // 0x65, e
73 | {0x06, 0x09, 0x08, 0x1c, 0x08, 0x08, 0x08,}, // 0x66, f
74 | {0x0e, 0x11, 0x13, 0x0d, 0x01, 0x01, 0x0e,}, // 0x67, g
75 | {0x10, 0x10, 0x10, 0x16, 0x19, 0x11, 0x11,}, // 0x68, h
76 | {0x00, 0x04, 0x00, 0x0c, 0x04, 0x04, 0x0e,}, // 0x69, i
77 | {0x02, 0x00, 0x06, 0x02, 0x02, 0x12, 0x0c,}, // 0x6a, j
78 | {0x10, 0x10, 0x12, 0x14, 0x18, 0x14, 0x12,}, // 0x6b, k
79 | {0x0c, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,}, // 0x6c, l
80 | {0x00, 0x00, 0x0a, 0x15, 0x15, 0x11, 0x11,}, // 0x6d, m
81 | {0x00, 0x00, 0x16, 0x19, 0x11, 0x11, 0x11,}, // 0x6e, n
82 | {0x00, 0x00, 0x0e, 0x11, 0x11, 0x11, 0x0e,}, // 0x6f, o
83 | {0x00, 0x1c, 0x12, 0x12, 0x1c, 0x10, 0x10,}, // 0x70, p
84 | {0x00, 0x07, 0x09, 0x09, 0x07, 0x01, 0x01,}, // 0x71, q
85 | {0x00, 0x00, 0x16, 0x19, 0x10, 0x10, 0x10,}, // 0x72, r
86 | {0x00, 0x00, 0x0f, 0x10, 0x0e, 0x01, 0x1e,}, // 0x73, s
87 | {0x08, 0x08, 0x1c, 0x08, 0x08, 0x09, 0x06,}, // 0x74, t
88 | {0x00, 0x00, 0x11, 0x11, 0x11, 0x13, 0x0d,}, // 0x75, u
89 | {0x00, 0x00, 0x11, 0x11, 0x11, 0x0a, 0x04,}, // 0x76, v
90 | {0x00, 0x00, 0x11, 0x11, 0x15, 0x15, 0x0a,}, // 0x77, w
91 | {0x00, 0x00, 0x11, 0x0a, 0x04, 0x0a, 0x11,}, // 0x78, x
92 | {0x00, 0x11, 0x11, 0x0f, 0x01, 0x11, 0x0e,}, // 0x79, y
93 | {0x00, 0x00, 0x1f, 0x02, 0x04, 0x08, 0x1f,}, // 0x7a, z
94 | {0x06, 0x08, 0x08, 0x10, 0x08, 0x08, 0x06,}, // 0x7b, {
95 | {0x04, 0x04, 0x04, 0x00, 0x04, 0x04, 0x04,}, // 0x7c, |
96 | {0x0c, 0x02, 0x02, 0x01, 0x02, 0x02, 0x0c,}, // 0x7d, }
97 | {0x08, 0x15, 0x02, 0x00, 0x00, 0x00, 0x00,}, // 0x7e, ~
98 | {0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f,}, // 0x7f, DEL
99 | };
100 |
--------------------------------------------------------------------------------
/src/game.cpp:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 |
4 | #include "game.h"
5 | #include "common.h"
6 | #include "display.h"
7 | #include "msgQueue.h"
8 | #include "FixedPointsMath.h"
9 | #include "KeyEvent.h"
10 |
11 | #define ENEMY_RADIU 2
12 | #define PLAYER_RADIU 3
13 |
14 | extern MsgQueue keyQueue;
15 | extern uint8_t keyState;
16 |
17 | GameState::GameState(): score(0){
18 | }
19 |
20 | void GameState::enter(){
21 | randomSeed(micros());
22 | player_pos[0] = 0;
23 | player_pos[1] = -8;
24 | enemy_pos[1] = 20;
25 | enemy_pos[0] = random(-10, 10);
26 | enemy_vol[0] = ((player_pos[0] - enemy_pos[0]) / 60);
27 | enemy_vol[1] = ((player_pos[1] - enemy_pos[1]) / 60);
28 | score = 0;
29 | gameOver = false;
30 | clearBg();
31 | keyQueue.flush();
32 | keyEvent.lastKey = keyState;
33 | keyEvent.onKeyDown([this](uint8_t key, uint32_t keyState){
34 | if (key == KEY_UP && player_pos[1] < 0){
35 | player_pos[1] += 0.5;
36 | }
37 | if (key == KEY_DOWN && player_pos[1] > -15){
38 | player_pos[1] -= 0.5;
39 | }
40 | if (key == KEY_LEFT && player_pos[0] > -10){
41 | player_pos[0] -= 0.5;
42 | }
43 | if (key == KEY_RIGHT && player_pos[0] < 10){
44 | player_pos[0] += 0.5;
45 | }
46 | if (key == KEY_A){
47 | gameOver = true;
48 | }
49 | });
50 |
51 | keyEvent.onKeyUpEdge([this](uint8_t key, uint32_t keyState){
52 | switch (key){
53 | case KEY_A:
54 | gameOver = true;
55 | }
56 | });
57 | }
58 |
59 | static void cart2polor(SQ15x16 x, SQ15x16 y, SQ15x16 * r, SQ15x16 * theta){
60 | *r = sqrtfp(x*x + y*y);
61 | *theta = atan2fp(y, x);
62 | }
63 |
64 | int GameState::update(){
65 | SQ15x16 r, theta;
66 |
67 | clearScr();
68 | // clear
69 | //cart2polor(player_pos[0], -player_pos[1], &r, &theta);
70 | //clearCircle(r, theta, PLAYER_RADIU);
71 | //cart2polor(enemy_pos[0], -enemy_pos[1], &r, &theta);
72 | //clearCircle(r, theta, ENEMY_RADIU);
73 | //clearText5x7(9, SCANLINE / 4 + (String(score).length() * 5 )/2, String(score).c_str() , true);
74 |
75 | //handle key events
76 | keyEvent.update(&keyQueue);
77 |
78 | //render enemy
79 | enemy_pos[0] += enemy_vol[0];
80 | enemy_pos[1] += enemy_vol[1];
81 | cart2polor(enemy_pos[0], -enemy_pos[1], &r, &theta);
82 | fillCircle(r, theta, ENEMY_RADIU, Color(255, 0, 0));
83 |
84 | //render player
85 | cart2polor(player_pos[0], -player_pos[1], &r, &theta);
86 | fillCircle(r, theta, PLAYER_RADIU, Color(0, 255, 0));
87 |
88 | //render score borad
89 | drawText5x7(9, SCANLINE / 4 + (String(score).length() * 5 )/2, String(score).c_str(), Color(0, 255, 255), true);
90 |
91 | if (enemy_pos[1] < -16){
92 | score ++;
93 | enemy_pos[1] = 20;
94 | enemy_pos[0] = random(-10, 10);
95 |
96 | enemy_vol[0] = ((player_pos[0] - enemy_pos[0]) / 60) * uipowfp(SQ15x16(1.05), score);
97 | enemy_vol[1] = ((player_pos[1] - enemy_pos[1]) / 60) * uipowfp(SQ15x16(1.05), score);
98 | //enemy_vol[0] = SQ15x16(random(-10, 10))/100 * (1 + SQ15x16(0.05) * score);
99 | //enemy_vol[1] = -0.2 * (1 + SQ15x16(0.05) * score);
100 | }
101 | if (sqrtfp(uipowfp(player_pos[0] - enemy_pos[0], 2)
102 | + uipowfp(player_pos[1] - enemy_pos[1], 2)) < ENEMY_RADIU + PLAYER_RADIU){
103 | score = 0;
104 | gameOver = true;
105 | }
106 |
107 | if (gameOver)
108 | return 0;
109 |
110 | return 1;
111 | }
112 |
113 | void GameState::exit(){
114 | keyQueue.flush();
115 | keyEvent.lastKey = 0;
116 | drawText5x7(8, SCANLINE / 2 + (SCANLINE/2 - 9*5)/2, "Game Over", Color(255, 0, 255));
117 | commitBg();
118 | };
119 |
--------------------------------------------------------------------------------
/src/game.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 | #include
3 | #include
4 | #include "KeyEvent.h"
5 |
6 | class GameState{
7 | private:
8 | SQ15x16 player_pos[2];
9 | SQ15x16 enemy_pos[2];
10 | SQ15x16 enemy_vol[2];
11 | uint32_t score;
12 | bool gameOver;
13 | KeyEvent keyEvent;
14 | bool dirtyPlayer;
15 | bool dirtyEnemy;
16 | bool dirtyScore;
17 |
18 | public:
19 | GameState();
20 | virtual void enter();
21 | virtual int update();
22 | virtual void exit();
23 | };
24 |
--------------------------------------------------------------------------------
/src/msgQueue.cpp:
--------------------------------------------------------------------------------
1 | #include "msgQueue.h"
2 |
3 | MsgQueue::MsgQueue(void) : _size(0) {}
4 | int MsgQueue::enQueue(Msg key){
5 | if (_size >= MAX_QUEUE_SIZE){
6 | return 0;
7 | }
8 | _buffer[_size++] = key;
9 | return 1;
10 | }
11 | int MsgQueue::deQueue(Msg * key){
12 | if (_size == 0){
13 | return 0;
14 | }
15 | if (key)
16 | *key = _buffer[0];
17 | for (size_t i = 1; i < _size; i ++){
18 | _buffer[i - 1] = _buffer[i];
19 | }
20 |
21 | _size --;
22 | return 1;
23 | }
24 |
25 | size_t MsgQueue::getSize(){
26 | return _size;
27 | }
28 |
--------------------------------------------------------------------------------
/src/msgQueue.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 | #include
3 | #include
4 |
5 | #define MAX_QUEUE_SIZE 10
6 |
7 | using Msg = uint32_t;
8 |
9 | class MsgQueue {
10 | private:
11 | Msg _buffer[MAX_QUEUE_SIZE];
12 | Msg _size;
13 |
14 | public:
15 | MsgQueue();
16 | size_t getSize();
17 | int deQueue(Msg *);
18 | int enQueue(Msg);
19 | inline void flush(){
20 | while(getSize()){
21 | deQueue(NULL);
22 | }
23 | }
24 | };
25 |
--------------------------------------------------------------------------------