├── 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 | ![test](https://raw.githubusercontent.com/jj11hh/ESP_POV/master/images/test.jpeg) 14 | ![ui](https://raw.githubusercontent.com/jj11hh/ESP_POV/master/images/ui.jpeg) 15 | ![pcb](https://raw.githubusercontent.com/jj11hh/ESP_POV/master/images/pcb.png) 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 | --------------------------------------------------------------------------------