├── nixie-pipe-pcb.stl ├── pcb └── kicad │ ├── nixie-pipe.pdf │ ├── fp-lib-table │ ├── sym-lib-table │ ├── LICENSE │ ├── WS2812B.pretty │ ├── Touch_Button.kicad_mod │ ├── LED_WS2812B-PLCC4.kicad_mod │ ├── jbr_logo_24.kicad_mod │ ├── jbr_logo.kicad_mod │ └── np_logo.kicad_mod │ ├── nixie-pipe.pro │ ├── nixie-pipe-cache.lib │ └── nixie-pipe.net ├── firmware ├── ftx_script.sh ├── np-serial │ ├── Makefile │ ├── npboard.txt │ └── np-serial.ino ├── np-clock │ ├── Makefile │ ├── serial.h │ ├── npboard.txt │ ├── state_machine.h │ └── np-clock.ino ├── np-weather │ ├── Makefile │ ├── npboard.txt │ └── np-weather.ino └── burn-test │ ├── Makefile │ └── npboard.txt ├── .gitignore ├── README.md └── nixiepipe.scad /nixie-pipe-pcb.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tuna-f1sh/nixiepipe-hardware/HEAD/nixie-pipe-pcb.stl -------------------------------------------------------------------------------- /pcb/kicad/nixie-pipe.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tuna-f1sh/nixiepipe-hardware/HEAD/pcb/kicad/nixie-pipe.pdf -------------------------------------------------------------------------------- /pcb/kicad/fp-lib-table: -------------------------------------------------------------------------------- 1 | (fp_lib_table 2 | (lib (name WS2812B)(type KiCad)(uri ${KIPRJMOD}/WS2812B.pretty)(options "")(descr "")) 3 | ) 4 | -------------------------------------------------------------------------------- /pcb/kicad/sym-lib-table: -------------------------------------------------------------------------------- 1 | (sym_lib_table 2 | (lib (name nixie-pipe-rescue)(type Legacy)(uri ${KIPRJMOD}/nixie-pipe-rescue.lib)(options "")(descr "")) 3 | (lib (name jbr-ics)(type Legacy)(uri ${USRMOD}/tunaf1sh/jbr-ics.lib)(options "")(descr "")) 4 | ) 5 | -------------------------------------------------------------------------------- /firmware/ftx_script.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo 'JBR Nixie Pipe FTDI Programmer' 4 | # ftx_unload 5 | ftx_prog --manufacturer "JBR Engineering" 6 | ftx_prog --product "Nixie Pipe Master" 7 | # ftx_prog --new-serial-number JBRNP04HGFB 8 | echo $(ftx_prog --dump) >> devices 9 | -------------------------------------------------------------------------------- /pcb/kicad/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright JBR Engineering Research Ltd - 2016 - www.jbrengineering.co.uk 2 | **THIS FILE MUST BE REDISTRIBUTED WITH CODE* 3 | 4 | This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 5 | International License. To view a copy of this license, visit 6 | http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to Creative 7 | Commons, PO Box 1866, Mountain View, CA 94042, USA. 8 | -------------------------------------------------------------------------------- /firmware/np-serial/Makefile: -------------------------------------------------------------------------------- 1 | BOARDS_TXT = npboard.txt 2 | BOARD_TAG = nixiepipe 3 | ISP_PROG = usbasp 4 | 5 | MCU = atmega328p 6 | F_CPU = 16000000 7 | # MONITOR_PORT = /dev/tty.SLAB* 8 | 9 | ARDUINO_LIBS = Time DS3232RTC Wire FastLED NixiePipe 10 | AVRDUDE_OPTS = -V 11 | 12 | # compiler flags for FastLED lib 13 | CXXFLAGS_STD = -std=gnu++11 14 | CXXFLAGS += -fno-threadsafe-statics 15 | 16 | 17 | # ARDUINO_QUIET = 1 18 | 19 | include ${ARDMK_DIR}/Arduino.mk 20 | -------------------------------------------------------------------------------- /firmware/np-clock/Makefile: -------------------------------------------------------------------------------- 1 | BOARDS_TXT = npboard.txt 2 | BOARD_TAG = nixiepipe 3 | ISP_PROG = usbasp 4 | 5 | #MCU = atmega328p 6 | # F_CPU = 16000000 7 | # MONITOR_PORT = /dev/tty.SLAB* 8 | 9 | ARDUINO_LIBS = Time DS3232RTC Wire FastLED NixiePipe 10 | AVRDUDE_OPTS = -V 11 | 12 | # compiler flags for FastLED lib 13 | CXXFLAGS_STD = -std=gnu++11 14 | CXXFLAGS += -fno-threadsafe-statics 15 | 16 | 17 | # ARDUINO_QUIET = 1 18 | 19 | include ${ARDMK_DIR}/Arduino.mk 20 | -------------------------------------------------------------------------------- /firmware/np-weather/Makefile: -------------------------------------------------------------------------------- 1 | BOARDS_TXT = npboard.txt 2 | BOARD_TAG = nixiepipe 3 | ISP_PROG = usbasp 4 | 5 | MCU = atmega328p 6 | F_CPU = 16000000 7 | # MONITOR_PORT = /dev/tty.SLAB* 8 | 9 | ARDUINO_LIBS = Time DS3232RTC Wire FastLED NixiePipe 10 | AVRDUDE_OPTS = -V 11 | 12 | # compiler flags for FastLED lib 13 | CXXFLAGS_STD = -std=gnu++11 14 | CXXFLAGS += -fno-threadsafe-statics 15 | 16 | 17 | # ARDUINO_QUIET = 1 18 | 19 | include ${ARDMK_DIR}/Arduino.mk 20 | -------------------------------------------------------------------------------- /pcb/kicad/WS2812B.pretty/Touch_Button.kicad_mod: -------------------------------------------------------------------------------- 1 | (module Touch_Button (layer F.Cu) (tedit 57A607A4) 2 | (fp_text reference P6 (at 0 6) (layer F.SilkS) 3 | (effects (font (size 1 1) (thickness 0.15))) 4 | ) 5 | (fp_text value CONN_01X02 (at 0 -6) (layer F.Fab) 6 | (effects (font (size 1 1) (thickness 0.15))) 7 | ) 8 | (pad 2 smd oval (at 0 2.5) (size 8 4.5) (layers F.Cu F.Mask)) 9 | (pad 1 smd oval (at 0 -2.5) (size 8 4.5) (layers F.Cu F.Mask)) 10 | ) 11 | -------------------------------------------------------------------------------- /firmware/burn-test/Makefile: -------------------------------------------------------------------------------- 1 | BOARDS_TXT = npboard.txt 2 | BOARD_TAG = nixiepipe 3 | ISP_PROG = usbasp 4 | # BOARD_TAG = uno 5 | 6 | MCU = atmega328p 7 | F_CPU = 16000000 8 | # MONITOR_PORT = /dev/tty.SLAB* 9 | 10 | ARDUINO_LIBS = Time DS3232RTC Wire FastLED NixiePipe 11 | AVRDUDE_OPTS = -V 12 | 13 | # compiler flags for FastLED lib 14 | CXXFLAGS_STD = -std=gnu++11 15 | CXXFLAGS += -fno-threadsafe-statics 16 | 17 | 18 | # ARDUINO_QUIET = 1 19 | 20 | include ${ARDMK_DIR}/Arduino.mk 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | supporting/ 2 | website/ 3 | np-usb/ 4 | 5 | # Output folders 6 | Gerber/ 7 | exports/ 8 | build* 9 | shapes3d/ 10 | dist/ 11 | *.egg-info 12 | media/ 13 | *.xml 14 | 15 | *.bmp 16 | *.png 17 | *.ycm* 18 | 19 | # Compiled Object files 20 | *.slo 21 | *.lo 22 | *.o 23 | *.obj 24 | *.pyc 25 | 26 | # Precompiled Headers 27 | *.gch 28 | *.pch 29 | 30 | # Compiled Dynamic libraries 31 | *.so 32 | *.dylib 33 | *.dll 34 | 35 | # Fortran module files 36 | *.mod 37 | 38 | # Compiled Static libraries 39 | *.lai 40 | *.la 41 | *.a 42 | *.lib 43 | 44 | # Executables 45 | *.exe 46 | *.out 47 | *.app 48 | 49 | # Temp 50 | _saved_* 51 | tags 52 | .tags 53 | *~ 54 | *.swp 55 | *DS_Store 56 | *.pdsbak 57 | *.workspace 58 | *.zip 59 | *CADCAM 60 | *-bak 61 | *.bak 62 | _autosave* 63 | -------------------------------------------------------------------------------- /pcb/kicad/nixie-pipe.pro: -------------------------------------------------------------------------------- 1 | update=Thursday, 06 September 2018 at 07:49:22 2 | version=1 3 | last_client=kicad 4 | [pcbnew] 5 | version=1 6 | LastNetListRead= 7 | UseCmpFile=1 8 | PadDrill=0.600000000000 9 | PadDrillOvalY=0.600000000000 10 | PadSizeH=1.500000000000 11 | PadSizeV=1.500000000000 12 | PcbTextSizeV=1.500000000000 13 | PcbTextSizeH=1.500000000000 14 | PcbTextThickness=0.300000000000 15 | ModuleTextSizeV=1.000000000000 16 | ModuleTextSizeH=1.000000000000 17 | ModuleTextSizeThickness=0.150000000000 18 | SolderMaskClearance=0.000000000000 19 | SolderMaskMinWidth=0.000000000000 20 | DrawSegmentWidth=0.200000000000 21 | BoardOutlineThickness=0.100000000000 22 | ModuleOutlineThickness=0.150000000000 23 | [cvpcb] 24 | version=1 25 | NetIExt=net 26 | [general] 27 | version=1 28 | [eeschema] 29 | version=1 30 | LibDir= 31 | -------------------------------------------------------------------------------- /firmware/np-clock/serial.h: -------------------------------------------------------------------------------- 1 | #define BAUD 57600 2 | #define NP_SET_NUMBER 0x40 3 | #define NP_SET_PIPE_NUMBER 0x41 4 | #define NP_SET_COLOUR 0x42 5 | #define NP_SET_PIPE_COLOUR 0x43 6 | #define NP_SET_BRIGHTNESS 0x44 7 | #define NP_SET_CLEAR 0x45 8 | #define NP_SET_CLEAR_PIPE 0x46 9 | #define NP_GET_NUMBER 0x47 10 | #define NP_SET_CONNECT 0x48 11 | #define NP_SET_UNITS 0x49 12 | #define NP_SET_SHOW 0x50 13 | #define NP_SET_WEATHER 0x51 14 | #define NP_SET_TIME 0x52 15 | 16 | #define MAX_PACKET 18 17 | #define MAX_MESSAGE MAX_PACKET - 2 18 | 19 | #define VERSION_MINOR 8 20 | #define VERSION_MAJOR 1 21 | 22 | #define SERIAL_UINT16(LSB,MSB) (( (short) LSB & 0xFF) | (( (short) MSB & 0xFF) << 8)) 23 | #define SERIAL_UINT32(B0,B1,B2,B3) ( (long) B0 | ( (long) B1 << 8 ) | ( (long) B2 << 16 ) | ( (long) B3 << 24 ) ) 24 | 25 | typedef union { 26 | struct { 27 | byte size; 28 | byte command; 29 | byte message[MAX_MESSAGE]; 30 | } data; 31 | byte bytes[MAX_PACKET]; 32 | } Packet_t; 33 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Nixie Pipe Hardware 2 | 3 | [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=CFA7TQXNFURLQ) 4 | 5 | This repository contains design files for my [Nixie 6 | Pipe](http://www.nixiepipe.com) modules. Contained with: 7 | 8 | * OpenSCAD mechanical design script. 9 | * KiCAD PCB design 10 | * Arduino/C++ firmware 11 | 12 | ## Supporting Repositories 13 | 14 | * [Arduino Library](https://github.com/tuna-f1sh/NixiePipe) 15 | * [Node module](https://github.com/tuna-f1sh/node-nixiepipe) 16 | * [Python Package](https://github.com/tuna-f1sh/py-nixiepipe) 17 | * [Electron GUI app](https://github.com/tuna-f1sh/electron-nixiepipe) 18 | 19 | ## Supporting the Project and Attribution 20 | 21 | If you do make your own Nixie Pipe and wish to offer some gratitude, please 22 | feel free to donate any amount to me using the button at the top of the 23 | repository. 24 | 25 | **Software** is [![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](http://www.gnu.org/licenses/gpl-3.0) 26 | 27 | **Hardware (KiCad, OpenSCAD, design exports etc.)** is [![License: CC BY-SA 4.0](https://img.shields.io/badge/License-CC%20BY--SA%204.0-lightgrey.svg)](http://creativecommons.org/licenses/by-sa/4.0/) 28 | 29 | I make many of my projects Open Source so others can learn as I have, but please remember 30 | to follow the license terms and attribute any derivations or code reuse. 31 | Please link back to the project, [www.nixiepipe.com](www.nixiepipe.com) and 32 | [www.jbrengineering.co.uk](www.jbrengineering.co.uk). 33 | -------------------------------------------------------------------------------- /firmware/burn-test/npboard.txt: -------------------------------------------------------------------------------- 1 | ############################################################## 2 | 3 | nixiepipe.name=Nixie Pipe (16MHz Ext.Clock) 4 | 5 | nixiepipe.vid.0=0x2341 6 | nixiepipe.pid.0=0x0043 7 | nixiepipe.vid.1=0x2341 8 | nixiepipe.pid.1=0x0001 9 | nixiepipe.vid.2=0x2A03 10 | nixiepipe.pid.2=0x0043 11 | nixiepipe.vid.3=0x2341 12 | nixiepipe.pid.3=0x0243 13 | 14 | nixiepipe.upload.tool=avrdude 15 | nixiepipe.upload.protocol=arduino 16 | nixiepipe.upload.maximum_size=32256 17 | nixiepipe.upload.maximum_data_size=2048 18 | nixiepipe.upload.speed=115200 19 | 20 | nixiepipe.bootloader.tool=avrdude 21 | nixiepipe.bootloader.low_fuses=0xFF 22 | nixiepipe.bootloader.high_fuses=0xDE 23 | nixiepipe.bootloader.extended_fuses=0x05 24 | nixiepipe.bootloader.unlock_bits=0x3F 25 | nixiepipe.bootloader.lock_bits=0x0F 26 | nixiepipe.bootloader.file=optiboot/optiboot_atmega328.hex 27 | 28 | nixiepipe.build.mcu=atmega328p 29 | nixiepipe.build.f_cpu=16000000L 30 | nixiepipe.build.board=AVR_UNO 31 | nixiepipe.build.core=arduino 32 | nixiepipe.build.variant=standard 33 | 34 | ############################################################## 35 | 36 | nixiepipe8.name=Nixie Pipe (8MHz Int.Clock) 37 | 38 | nixiepipe8.upload.protocol=arduino 39 | nixiepipe8.upload.maximum_size=30720 40 | nixiepipe8.upload.speed=57600 41 | 42 | nixiepipe8.bootloader.low_fuses=0xE2 43 | nixiepipe8.bootloader.high_fuses=0xDA 44 | nixiepipe8.bootloader.extended_fuses=0x05 45 | 46 | nixiepipe8.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex 47 | nixiepipe8.bootloader.unlock_bits=0x3F 48 | nixiepipe8.bootloader.lock_bits=0x0F 49 | 50 | nixiepipe8.build.mcu=atmega328p 51 | nixiepipe8.build.f_cpu=8000000L 52 | nixiepipe8.build.core=arduino 53 | nixiepipe8.build.variant=standard 54 | 55 | nixiepipe8.bootloader.tool=avrdude 56 | nixiepipe8.upload.tool=avrdude 57 | -------------------------------------------------------------------------------- /firmware/np-clock/npboard.txt: -------------------------------------------------------------------------------- 1 | ############################################################## 2 | 3 | nixiepipe.name=Nixie Pipe (16MHz Ext.Clock) 4 | 5 | nixiepipe.vid.0=0x2341 6 | nixiepipe.pid.0=0x0043 7 | nixiepipe.vid.1=0x2341 8 | nixiepipe.pid.1=0x0001 9 | nixiepipe.vid.2=0x2A03 10 | nixiepipe.pid.2=0x0043 11 | nixiepipe.vid.3=0x2341 12 | nixiepipe.pid.3=0x0243 13 | 14 | nixiepipe.upload.tool=avrdude 15 | nixiepipe.upload.protocol=arduino 16 | nixiepipe.upload.maximum_size=32256 17 | nixiepipe.upload.maximum_data_size=2048 18 | nixiepipe.upload.speed=115200 19 | 20 | nixiepipe.bootloader.tool=avrdude 21 | nixiepipe.bootloader.low_fuses=0xFF 22 | nixiepipe.bootloader.high_fuses=0xDE 23 | nixiepipe.bootloader.extended_fuses=0x05 24 | nixiepipe.bootloader.unlock_bits=0x3F 25 | nixiepipe.bootloader.lock_bits=0x0F 26 | nixiepipe.bootloader.file=optiboot/optiboot_atmega328.hex 27 | 28 | nixiepipe.build.mcu=atmega328p 29 | nixiepipe.build.f_cpu=16000000L 30 | nixiepipe.build.board=AVR_UNO 31 | nixiepipe.build.core=arduino 32 | nixiepipe.build.variant=standard 33 | 34 | ############################################################## 35 | 36 | nixiepipe8.name=Nixie Pipe (8MHz Int.Clock) 37 | 38 | nixiepipe8.upload.protocol=arduino 39 | nixiepipe8.upload.maximum_size=30720 40 | nixiepipe8.upload.speed=57600 41 | 42 | nixiepipe8.bootloader.low_fuses=0xE2 43 | nixiepipe8.bootloader.high_fuses=0xDA 44 | nixiepipe8.bootloader.extended_fuses=0x05 45 | 46 | nixiepipe8.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex 47 | nixiepipe8.bootloader.unlock_bits=0x3F 48 | nixiepipe8.bootloader.lock_bits=0x0F 49 | 50 | nixiepipe8.build.mcu=atmega328p 51 | nixiepipe8.build.f_cpu=8000000L 52 | nixiepipe8.build.core=arduino 53 | nixiepipe8.build.variant=standard 54 | 55 | nixiepipe8.bootloader.tool=avrdude 56 | nixiepipe8.upload.tool=avrdude 57 | -------------------------------------------------------------------------------- /firmware/np-serial/npboard.txt: -------------------------------------------------------------------------------- 1 | ############################################################## 2 | 3 | nixiepipe.name=Nixie Pipe (16MHz Ext.Clock) 4 | 5 | nixiepipe.vid.0=0x2341 6 | nixiepipe.pid.0=0x0043 7 | nixiepipe.vid.1=0x2341 8 | nixiepipe.pid.1=0x0001 9 | nixiepipe.vid.2=0x2A03 10 | nixiepipe.pid.2=0x0043 11 | nixiepipe.vid.3=0x2341 12 | nixiepipe.pid.3=0x0243 13 | 14 | nixiepipe.upload.tool=avrdude 15 | nixiepipe.upload.protocol=arduino 16 | nixiepipe.upload.maximum_size=32256 17 | nixiepipe.upload.maximum_data_size=2048 18 | nixiepipe.upload.speed=115200 19 | 20 | nixiepipe.bootloader.tool=avrdude 21 | nixiepipe.bootloader.low_fuses=0xFF 22 | nixiepipe.bootloader.high_fuses=0xDE 23 | nixiepipe.bootloader.extended_fuses=0x05 24 | nixiepipe.bootloader.unlock_bits=0x3F 25 | nixiepipe.bootloader.lock_bits=0x0F 26 | nixiepipe.bootloader.file=optiboot/optiboot_atmega328.hex 27 | 28 | nixiepipe.build.mcu=atmega328p 29 | nixiepipe.build.f_cpu=16000000L 30 | nixiepipe.build.board=AVR_UNO 31 | nixiepipe.build.core=arduino 32 | nixiepipe.build.variant=standard 33 | 34 | ############################################################## 35 | 36 | nixiepipe8.name=Nixie Pipe (8MHz Int.Clock) 37 | 38 | nixiepipe8.upload.protocol=arduino 39 | nixiepipe8.upload.maximum_size=30720 40 | nixiepipe8.upload.speed=57600 41 | 42 | nixiepipe8.bootloader.low_fuses=0xE2 43 | nixiepipe8.bootloader.high_fuses=0xDA 44 | nixiepipe8.bootloader.extended_fuses=0x05 45 | 46 | nixiepipe8.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex 47 | nixiepipe8.bootloader.unlock_bits=0x3F 48 | nixiepipe8.bootloader.lock_bits=0x0F 49 | 50 | nixiepipe8.build.mcu=atmega328p 51 | nixiepipe8.build.f_cpu=8000000L 52 | nixiepipe8.build.core=arduino 53 | nixiepipe8.build.variant=standard 54 | 55 | nixiepipe8.bootloader.tool=avrdude 56 | nixiepipe8.upload.tool=avrdude 57 | -------------------------------------------------------------------------------- /firmware/np-weather/npboard.txt: -------------------------------------------------------------------------------- 1 | ############################################################## 2 | 3 | nixiepipe.name=Nixie Pipe (16MHz Ext.Clock) 4 | 5 | nixiepipe.vid.0=0x2341 6 | nixiepipe.pid.0=0x0043 7 | nixiepipe.vid.1=0x2341 8 | nixiepipe.pid.1=0x0001 9 | nixiepipe.vid.2=0x2A03 10 | nixiepipe.pid.2=0x0043 11 | nixiepipe.vid.3=0x2341 12 | nixiepipe.pid.3=0x0243 13 | 14 | nixiepipe.upload.tool=avrdude 15 | nixiepipe.upload.protocol=arduino 16 | nixiepipe.upload.maximum_size=32256 17 | nixiepipe.upload.maximum_data_size=2048 18 | nixiepipe.upload.speed=115200 19 | 20 | nixiepipe.bootloader.tool=avrdude 21 | nixiepipe.bootloader.low_fuses=0xFF 22 | nixiepipe.bootloader.high_fuses=0xDE 23 | nixiepipe.bootloader.extended_fuses=0x05 24 | nixiepipe.bootloader.unlock_bits=0x3F 25 | nixiepipe.bootloader.lock_bits=0x0F 26 | nixiepipe.bootloader.file=optiboot/optiboot_atmega328.hex 27 | 28 | nixiepipe.build.mcu=atmega328p 29 | nixiepipe.build.f_cpu=16000000L 30 | nixiepipe.build.board=AVR_UNO 31 | nixiepipe.build.core=arduino 32 | nixiepipe.build.variant=standard 33 | 34 | ############################################################## 35 | 36 | nixiepipe8.name=Nixie Pipe (8MHz Int.Clock) 37 | 38 | nixiepipe8.upload.protocol=arduino 39 | nixiepipe8.upload.maximum_size=30720 40 | nixiepipe8.upload.speed=57600 41 | 42 | nixiepipe8.bootloader.low_fuses=0xE2 43 | nixiepipe8.bootloader.high_fuses=0xDA 44 | nixiepipe8.bootloader.extended_fuses=0x05 45 | 46 | nixiepipe8.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex 47 | nixiepipe8.bootloader.unlock_bits=0x3F 48 | nixiepipe8.bootloader.lock_bits=0x0F 49 | 50 | nixiepipe8.build.mcu=atmega328p 51 | nixiepipe8.build.f_cpu=8000000L 52 | nixiepipe8.build.core=arduino 53 | nixiepipe8.build.variant=standard 54 | 55 | nixiepipe8.bootloader.tool=avrdude 56 | nixiepipe8.upload.tool=avrdude 57 | -------------------------------------------------------------------------------- /firmware/np-clock/state_machine.h: -------------------------------------------------------------------------------- 1 | #define ST_ANY -1 2 | #define ST_CLOCK 0 3 | #define ST_SETTIME 1 4 | #define ST_SETALARM 2 5 | #define ST_SETCOLOUR 3 6 | #define ST_SETCOUNT 4 7 | #define ST_COUNTER 5 8 | #define ST_CUPDATE 6 9 | #define ST_RTCFAIL 7 10 | #define ST_FLASH 8 11 | #define ST_DIM 9 12 | #define ST_TERM 10 13 | 14 | #define EV_ANY -1 15 | #define EV_NONE 0 16 | #define EV_TB0_PRESS 10 17 | #define EV_TB1_PRESS 11 18 | #define EV_TB0_HOLD 12 19 | #define EV_TB1_HOLD 13 20 | #define EV_COUNTEND 14 21 | #define EV_RTCFAIL 15 22 | #define EV_ALARM 16 23 | 24 | typedef struct { 25 | int st; 26 | int ev; 27 | /* int (*fn)(void);*/ 28 | int nst; 29 | } tTransition; 30 | 31 | tTransition trans[] = { 32 | { ST_CLOCK, EV_TB0_PRESS, ST_SETTIME }, 33 | { ST_CLOCK, EV_TB0_HOLD, ST_SETCOLOUR }, 34 | { ST_CLOCK, EV_TB1_PRESS, ST_SETCOUNT }, 35 | { ST_CLOCK, EV_TB1_HOLD, ST_SETALARM }, 36 | { ST_CLOCK, EV_RTCFAIL, ST_RTCFAIL }, 37 | { ST_CLOCK, EV_ALARM, ST_FLASH }, 38 | { ST_CLOCK, EV_COUNTEND, ST_FLASH }, 39 | { ST_FLASH, EV_NONE, ST_CLOCK }, 40 | { ST_FLASH, EV_TB0_PRESS, ST_CLOCK }, 41 | { ST_FLASH, EV_TB0_HOLD, ST_CLOCK }, 42 | { ST_FLASH, EV_TB1_PRESS, ST_CLOCK }, 43 | { ST_FLASH, EV_TB1_HOLD, ST_CLOCK }, 44 | { ST_RTCFAIL, EV_NONE, ST_CLOCK }, 45 | { ST_SETTIME, EV_ANY, ST_CLOCK }, 46 | { ST_SETALARM, EV_ANY, ST_CLOCK }, 47 | { ST_SETCOUNT, EV_ANY, ST_COUNTER }, 48 | { ST_SETCOLOUR, EV_ANY, ST_CLOCK }, 49 | { ST_COUNTER, EV_COUNTEND, ST_CLOCK }, 50 | { ST_COUNTER, EV_TB0_PRESS, ST_CLOCK }, 51 | { ST_COUNTER, EV_TB0_HOLD, ST_CLOCK }, 52 | { ST_COUNTER, EV_TB1_PRESS, ST_CUPDATE }, 53 | { ST_COUNTER, EV_TB1_HOLD, ST_CLOCK }, 54 | { ST_CUPDATE, EV_ANY, ST_COUNTER }, 55 | }; 56 | 57 | #define TRANS_COUNT (sizeof(trans)/sizeof(*trans)) 58 | -------------------------------------------------------------------------------- /pcb/kicad/WS2812B.pretty/LED_WS2812B-PLCC4.kicad_mod: -------------------------------------------------------------------------------- 1 | (module LED_WS2812B-PLCC4 (layer F.Cu) (tedit 56C9C7F7) 2 | (descr http://www.world-semi.com/uploads/soft/150522/1-150522091P5.pdf) 3 | (tags "LED NeoPixel") 4 | (attr smd) 5 | (fp_text reference U3 (at 0 -3.5) (layer F.SilkS) 6 | (effects (font (size 1 1) (thickness 0.15))) 7 | ) 8 | (fp_text value WS2812B (at 0 4) (layer F.Fab) 9 | (effects (font (size 1 1) (thickness 0.15))) 10 | ) 11 | (fp_line (start 3.75 -2.85) (end -3.75 -2.85) (layer F.CrtYd) (width 0.05)) 12 | (fp_line (start 3.75 2.85) (end 3.75 -2.85) (layer F.CrtYd) (width 0.05)) 13 | (fp_line (start -3.75 2.85) (end 3.75 2.85) (layer F.CrtYd) (width 0.05)) 14 | (fp_line (start -3.75 -2.85) (end -3.75 2.85) (layer F.CrtYd) (width 0.05)) 15 | (fp_line (start 2.5 1.5) (end 1.5 2.5) (layer Dwgs.User) (width 0.1)) 16 | (fp_line (start -2.5 -2.5) (end -2.5 2.5) (layer Dwgs.User) (width 0.1)) 17 | (fp_line (start -2.5 2.5) (end 2.5 2.5) (layer Dwgs.User) (width 0.1)) 18 | (fp_line (start 2.5 2.5) (end 2.5 -2.5) (layer Dwgs.User) (width 0.1)) 19 | (fp_line (start 2.5 -2.5) (end -2.5 -2.5) (layer Dwgs.User) (width 0.1)) 20 | (fp_line (start -3.5 -2.6) (end 3.5 -2.6) (layer F.SilkS) (width 0.15)) 21 | (fp_line (start -3.5 2.6) (end 3.5 2.6) (layer F.SilkS) (width 0.15)) 22 | (fp_line (start 3.5 2.6) (end 3.5 1.6) (layer F.SilkS) (width 0.15)) 23 | (fp_circle (center 0 0) (end 0 -2) (layer Dwgs.User) (width 0.1)) 24 | (pad 3 smd rect (at 2.5 1.6) (size 1.6 1) (layers F.Cu F.Paste F.Mask)) 25 | (pad 4 smd rect (at 2.5 -1.6) (size 1.6 1) (layers F.Cu F.Paste F.Mask)) 26 | (pad 2 smd rect (at -2.5 1.6) (size 1.6 1) (layers F.Cu F.Paste F.Mask)) 27 | (pad 1 smd rect (at -2.5 -1.6) (size 1.6 1) (layers F.Cu F.Paste F.Mask)) 28 | (model ${KIPRJMOD}/WS2812B.pretty/3dpackages/WS2812B_NICE.wrl 29 | (at (xyz 0 0 0.004)) 30 | (scale (xyz 0.385 0.385 0.385)) 31 | (rotate (xyz 0 0 90)) 32 | ) 33 | ) 34 | -------------------------------------------------------------------------------- /firmware/np-serial/np-serial.ino: -------------------------------------------------------------------------------- 1 | /* 2 | // GPL 3.0 License 3 | 4 | // Copyright (c) 2016 John Whittington www.jbrengineering.co.uk 5 | 6 | // This program is free software: you can redistribute it and/or modify 7 | // it under the terms of the GNU General Public License as published by 8 | // the Free Software Foundation, either version 3 of the License, or 9 | // (at your option) any later version. 10 | 11 | // This program is distributed in the hope that it will be useful, 12 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | // GNU General Public License for more details. 15 | 16 | // You should have received a copy of the GNU General Public License 17 | // along with this program. If not, see . 18 | */ 19 | 20 | #include 21 | #include 22 | 23 | #define LED_PIN 6 24 | #define NUM_PIPES 8 25 | #define NUM_UNITS 0 26 | #define BRIGHTNESS 255 27 | 28 | #define BAUD 57600 29 | #define NP_SET_NUMBER 0x40 30 | #define NP_SET_PIPE_NUMBER 0x41 31 | #define NP_SET_COLOUR 0x42 32 | #define NP_SET_PIPE_COLOUR 0x43 33 | #define NP_SET_BRIGHTNESS 0x44 34 | #define NP_SET_CLEAR 0x45 35 | #define NP_SET_CLEAR_PIPE 0x46 36 | #define NP_GET_NUMBER 0x47 37 | #define NP_SET_CONNECT 0x48 38 | #define NP_SET_UNITS 0x49 39 | #define NP_SET_SHOW 0x50 40 | 41 | #define MAX_PACKET 18 42 | #define MAX_MESSAGE MAX_PACKET - 2 43 | 44 | #define VERSION_MINOR 1 45 | #define VERSION_MAJOR 1 46 | 47 | #define SERIAL_UINT16(LSB,MSB) (( (short) LSB & 0xFF) | (( (short) MSB & 0xFF) << 8)) 48 | #define SERIAL_UINT32(B0,B1,B2,B3) ( (long) B0 | ( (long) B1 << 8 ) | ( (long) B2 << 16 ) | ( (long) B3 << 24 ) ) 49 | 50 | NixiePipe pipes = NixiePipe(NUM_PIPES,NUM_UNITS); 51 | 52 | typedef union { 53 | struct { 54 | byte size; 55 | byte command; 56 | byte message[MAX_MESSAGE]; 57 | } data; 58 | byte bytes[MAX_PACKET]; 59 | } Packet_t; 60 | 61 | bool gConnected = false; 62 | 63 | static Packet_t processInput(void) { 64 | Packet_t packet; 65 | unsigned long timeout; 66 | byte i = 0; 67 | 68 | packet.data.size = Serial.read(); 69 | delay(1); 70 | packet.data.command = Serial.read(); 71 | 72 | timeout = millis(); 73 | 74 | if (packet.data.size < MAX_MESSAGE) { 75 | while ( (i < (packet.data.size)) && ( (millis() - timeout) < 10) ) { 76 | packet.data.message[i++] = Serial.read(); 77 | timeout = millis(); 78 | } 79 | } 80 | 81 | return packet; 82 | } 83 | 84 | static void getColourPacket(byte *pmessage, CRGB *prgb) { 85 | prgb->r = pmessage[0]; 86 | prgb->g = pmessage[1]; 87 | prgb->b = pmessage[2]; 88 | } 89 | 90 | static void packValue(Packet_t *pres, uint32_t value) { 91 | 92 | for (int i = 0; i < 4; ++i) { 93 | pres->data.message[i] = (byte) ((value >> (8 * i)) & 0xFF); 94 | } 95 | 96 | pres->data.size = 4; 97 | } 98 | 99 | static void processPacket(Packet_t *ppack) { 100 | CRGB rgb; 101 | byte pipe = ppack->data.message[0]; 102 | Packet_t res; 103 | 104 | res.data.command = ppack->data.command; 105 | res.data.size = 1; 106 | res.data.message[0] = 0x00; 107 | 108 | switch (ppack->data.command) { 109 | case (NP_SET_CONNECT): 110 | if (ppack->data.size >= 2) { 111 | if ((ppack->data.message[0] == 0x4E /*N*/) && (ppack->data.message[1] == 0x50 /*P*/)) { 112 | res.data.command = ppack->data.command; 113 | res.data.size = 2; 114 | res.data.message[0] = VERSION_MINOR; 115 | res.data.message[1] = VERSION_MAJOR; 116 | gConnected = true; 117 | } 118 | } 119 | break; 120 | case (NP_SET_NUMBER): 121 | if (ppack->data.size >= 4) { 122 | pipes.setNumber((long) SERIAL_UINT32(ppack->data.message[0],ppack->data.message[1],ppack->data.message[2],ppack->data.message[3])); 123 | } 124 | break; 125 | case (NP_SET_PIPE_NUMBER): 126 | if (ppack->data.size >= 2) { 127 | pipes.setPipeNumber(pipe,ppack->data.message[1]); 128 | } 129 | break; 130 | case (NP_SET_COLOUR): 131 | if (ppack->data.size >= 3) { 132 | getColourPacket(&ppack->data.message[0],&rgb); 133 | pipes.setPipeColour(rgb); 134 | } 135 | break; 136 | case (NP_SET_PIPE_COLOUR): 137 | if (ppack->data.size >= 4) { 138 | getColourPacket(&ppack->data.message[1],&rgb); 139 | pipes.setPipeColour(pipe,rgb); 140 | } 141 | break; 142 | case (NP_SET_BRIGHTNESS): 143 | if (ppack->data.size >= 1) { 144 | pipes.setBrightness(ppack->data.message[0]); 145 | } 146 | break; 147 | case (NP_SET_CLEAR): 148 | if (ppack->data.message[0]) { 149 | pipes.clear(); 150 | } 151 | break; 152 | case (NP_SET_CLEAR_PIPE): 153 | if (ppack->data.size >= 1) { 154 | pipes.clearPipe(pipe); 155 | } 156 | break; 157 | case (NP_SET_UNITS): 158 | if (ppack->data.size >= 1) { 159 | pipes.setNumberUnits(ppack->data.message[0]); 160 | } 161 | break; 162 | case (NP_SET_SHOW): 163 | if (ppack->data.message[0]) { 164 | pipes.write(); 165 | pipes.show(); 166 | } 167 | break; 168 | case (NP_GET_NUMBER): 169 | if (ppack->data.message[0]) { 170 | packValue(&res, pipes.getNumber()); 171 | } 172 | break; 173 | default: 174 | pipes.writeSolid(CRGB::Red); 175 | pipes.show(); 176 | res.data.message[0] = 0x3F; 177 | break; 178 | } 179 | 180 | Serial.write(res.bytes,res.data.size+2); 181 | } 182 | 183 | void setup() 184 | { 185 | Serial.begin(BAUD); 186 | while (!Serial); 187 | 188 | pipes.begin(); 189 | pipes.setPipeNumber(0,VERSION_MINOR); 190 | pipes.setPipeNumber(1,VERSION_MAJOR); 191 | pipes.write(); 192 | pipes.show(); 193 | } 194 | 195 | void loop() 196 | { 197 | Packet_t packet; 198 | 199 | if (Serial.available()) { 200 | packet = processInput(); 201 | processPacket(&packet); 202 | } 203 | 204 | } 205 | -------------------------------------------------------------------------------- /pcb/kicad/nixie-pipe-cache.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.4 2 | #encoding utf-8 3 | # 4 | # Device:C 5 | # 6 | DEF Device:C C 0 10 N Y 1 F N 7 | F0 "C" 25 100 50 H V L CNN 8 | F1 "Device:C" 25 -100 50 H V L CNN 9 | F2 "" 38 -150 50 H I C CNN 10 | F3 "" 0 0 50 H I C CNN 11 | $FPLIST 12 | C_* 13 | $ENDFPLIST 14 | DRAW 15 | P 2 0 1 20 -80 -30 80 -30 N 16 | P 2 0 1 20 -80 30 80 30 N 17 | X ~ 1 0 150 110 D 50 50 1 1 P 18 | X ~ 2 0 -150 110 U 50 50 1 1 P 19 | ENDDRAW 20 | ENDDEF 21 | # 22 | # Device:CP1 23 | # 24 | DEF Device:CP1 C 0 10 N N 1 F N 25 | F0 "C" 25 100 50 H V L CNN 26 | F1 "Device:CP1" 25 -100 50 H V L CNN 27 | F2 "" 0 0 50 H I C CNN 28 | F3 "" 0 0 50 H I C CNN 29 | $FPLIST 30 | CP_* 31 | $ENDFPLIST 32 | DRAW 33 | A 0 -150 128 1287 513 0 1 20 N -80 -50 80 -50 34 | P 2 0 1 20 -80 30 80 30 N 35 | P 2 0 1 0 -70 90 -30 90 N 36 | P 2 0 1 0 -50 70 -50 110 N 37 | X ~ 1 0 150 110 D 50 50 1 1 P 38 | X ~ 2 0 -150 130 U 50 50 1 1 P 39 | ENDDRAW 40 | ENDDEF 41 | # 42 | # Device:Crystal_Small 43 | # 44 | DEF Device:Crystal_Small Y 0 40 N N 1 F N 45 | F0 "Y" 0 100 50 H V C CNN 46 | F1 "Device:Crystal_Small" 0 -100 50 H V C CNN 47 | F2 "" 0 0 50 H I C CNN 48 | F3 "" 0 0 50 H I C CNN 49 | $FPLIST 50 | Crystal* 51 | $ENDFPLIST 52 | DRAW 53 | S -30 -60 30 60 0 1 0 N 54 | P 2 0 1 15 -50 -30 -50 30 N 55 | P 2 0 1 15 50 -30 50 30 N 56 | X 1 1 -100 0 50 R 50 50 1 1 P 57 | X 2 2 100 0 50 L 50 50 1 1 P 58 | ENDDRAW 59 | ENDDEF 60 | # 61 | # Device:D_Schottky 62 | # 63 | DEF Device:D_Schottky D 0 40 N N 1 F N 64 | F0 "D" 0 100 50 H V C CNN 65 | F1 "Device:D_Schottky" 0 -100 50 H V C CNN 66 | F2 "" 0 0 50 H I C CNN 67 | F3 "" 0 0 50 H I C CNN 68 | $FPLIST 69 | TO-???* 70 | *_Diode_* 71 | *SingleDiode* 72 | D_* 73 | $ENDFPLIST 74 | DRAW 75 | P 2 0 1 0 50 0 -50 0 N 76 | P 4 0 1 8 50 50 50 -50 -50 0 50 50 N 77 | P 6 0 1 8 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N 78 | X K 1 -150 0 100 R 50 50 1 1 P 79 | X A 2 150 0 100 L 50 50 1 1 P 80 | ENDDRAW 81 | ENDDEF 82 | # 83 | # Device:R 84 | # 85 | DEF Device:R R 0 0 N Y 1 F N 86 | F0 "R" 80 0 50 V V C CNN 87 | F1 "Device:R" 0 0 50 V V C CNN 88 | F2 "" -70 0 50 V I C CNN 89 | F3 "" 0 0 50 H I C CNN 90 | $FPLIST 91 | R_* 92 | $ENDFPLIST 93 | DRAW 94 | S -40 -100 40 100 0 1 10 N 95 | X ~ 1 0 150 50 D 50 50 1 1 P 96 | X ~ 2 0 -150 50 U 50 50 1 1 P 97 | ENDDRAW 98 | ENDDEF 99 | # 100 | # jbr-ics:DS3231_8 101 | # 102 | DEF jbr-ics:DS3231_8 U 0 40 Y Y 1 F N 103 | F0 "U" -850 550 60 H V C CNN 104 | F1 "jbr-ics:DS3231_8" 0 200 60 H V C CNN 105 | F2 "" 0 -100 60 H V C CNN 106 | F3 "" 0 -100 60 H V C CNN 107 | $FPLIST 108 | W16#H2 109 | $ENDFPLIST 110 | DRAW 111 | S -900 500 850 -100 0 1 0 N 112 | X 32kHz 1 1150 200 300 L 60 60 1 1 B 113 | X VCC 2 0 800 300 D 60 60 1 1 W 114 | X ~INT~/SQW 3 1150 300 300 L 60 60 1 1 B 115 | X ~RST 4 -1200 100 300 R 60 60 1 1 B 116 | X GND 5 0 -400 300 U 60 60 1 1 W 117 | X V.BAT 6 1150 100 300 L 60 60 1 1 W 118 | X SDA 7 -1200 200 300 R 60 60 1 1 B 119 | X SCL 8 -1200 300 300 R 60 60 1 1 B 120 | ENDDRAW 121 | ENDDEF 122 | # 123 | # nixie-pipe-rescue:ATMEGA328P-A 124 | # 125 | DEF nixie-pipe-rescue:ATMEGA328P-A IC 0 40 Y Y 1 F N 126 | F0 "IC" -750 1250 50 H V L BNN 127 | F1 "nixie-pipe-rescue:ATMEGA328P-A" 400 -1400 50 H V L BNN 128 | F2 "TQFP32" 0 0 50 H V C CIN 129 | F3 "" 0 0 50 H V C CNN 130 | DRAW 131 | S -750 1200 850 -1300 0 1 10 f 132 | X (PCINT19/OC2B/INT1)PD3 1 1000 -800 150 L 40 40 1 1 B 133 | X (PCINT22/OC0A/AIN0)PD6 10 1000 -1100 150 L 40 40 1 1 B 134 | X (PCINT23/AIN1)PD7 11 1000 -1200 150 L 40 40 1 1 B 135 | X (PCINT0/CLKO/ICP1)PB0 12 1000 1100 150 L 40 40 1 1 B 136 | X (PCINT1/OC1A)PB1 13 1000 1000 150 L 40 40 1 1 B 137 | X (PCINT2/OC1B/~SS~)PB2 14 1000 900 150 L 40 40 1 1 B 138 | X (PCINT3/OC2A/MOSI)PB3 15 1000 800 150 L 40 40 1 1 B 139 | X (PCINT4/MISO)PB4 16 1000 700 150 L 40 40 1 1 B 140 | X (PCINT5/SCK)PB5 17 1000 600 150 L 40 40 1 1 B 141 | X AVCC 18 -900 800 150 R 40 40 1 1 W 142 | X ADC6 19 -900 -250 150 R 40 40 1 1 I 143 | X (PCINT20/XCK/T0)PD4 2 1000 -900 150 L 40 40 1 1 B 144 | X AREF 20 -900 500 150 R 40 40 1 1 B 145 | X GND 21 -900 -1000 150 R 40 40 1 1 W 146 | X ADC7 22 -900 -350 150 R 40 40 1 1 I 147 | X (PCINT8/ADC0)PC0 23 1000 250 150 L 40 40 1 1 B 148 | X (PCINT9/ADC1)PC1 24 1000 150 150 L 40 40 1 1 B 149 | X (PCINT10/ADC2)PC2 25 1000 50 150 L 40 40 1 1 B 150 | X (PCINT11/ADC3)PC3 26 1000 -50 150 L 40 40 1 1 B 151 | X (PCINT12/SDA/ADC4)PC4 27 1000 -150 150 L 40 40 1 1 B 152 | X (PCINT13/SCL/ADC5)PC5 28 1000 -250 150 L 40 40 1 1 B 153 | X (PCINT14/~RESET~)PC6 29 1000 -350 150 L 40 40 1 1 B 154 | X GND 3 -900 -1200 150 R 40 40 1 1 W 155 | X (PCINT16/RXD)PD0 30 1000 -500 150 L 40 40 1 1 B 156 | X (PCINT17/TXD)PD1 31 1000 -600 150 L 40 40 1 1 B 157 | X (PCINT18/INT0)PD2 32 1000 -700 150 L 40 40 1 1 B 158 | X VCC 4 -900 1100 150 R 40 40 1 1 W 159 | X GND 5 -900 -1100 150 R 40 40 1 1 W 160 | X VCC 6 -900 1000 150 R 40 40 1 1 W 161 | X (PCINT6/XTAL1/TOSC1)PB6 7 1000 500 150 L 40 40 1 1 B 162 | X (PCINT7/XTAL2/TOSC2)PB7 8 1000 400 150 L 40 40 1 1 B 163 | X (PCINT21/OC0B/T1)PD5 9 1000 -1000 150 L 40 40 1 1 B 164 | ENDDRAW 165 | ENDDEF 166 | # 167 | # nixie-pipe-rescue:AVR-ISP-6 168 | # 169 | DEF nixie-pipe-rescue:AVR-ISP-6 CON 0 40 Y Y 1 F N 170 | F0 "CON" -105 240 50 H V C CNN 171 | F1 "nixie-pipe-rescue:AVR-ISP-6" -265 -230 50 H V L BNN 172 | F2 "AVR-ISP-6" -520 40 50 V I C CNN 173 | F3 "" -25 0 50 H V C CNN 174 | DRAW 175 | T 0 -315 5 45 0 0 0 SCK Normal 1 C C 176 | T 0 275 110 45 0 0 0 VCC Normal 1 C C 177 | T 0 285 -105 45 0 1 0 GND Normal 1 C C 178 | T 0 -333 102 45 0 1 0 MISO Normal 1 C C 179 | T 0 307 -2 45 0 1 0 MOSI Normal 1 C C 180 | T 0 -315 -100 45 0 1 0 RST Normal 1 C C 181 | S -205 -140 165 -160 0 1 0 F 182 | S -205 200 155 180 0 1 0 F 183 | S -200 -160 -220 -40 0 1 0 F 184 | S -200 200 -220 40 0 1 0 F 185 | S 155 200 175 -160 0 1 0 F 186 | X ~ 1 -150 100 100 R 40 40 1 1 P 187 | X ~ 2 100 100 100 L 40 40 1 1 P 188 | X ~ 3 -150 0 100 R 40 40 1 1 P 189 | X ~ 4 100 0 100 L 40 40 1 1 P 190 | X ~ 5 -150 -100 100 R 40 40 1 1 P 191 | X ~ 6 100 -100 100 L 40 40 1 1 P 192 | ENDDRAW 193 | ENDDEF 194 | # 195 | # nixie-pipe-rescue:CONN_01X02 196 | # 197 | DEF nixie-pipe-rescue:CONN_01X02 P 0 40 Y N 1 F N 198 | F0 "P" 0 150 50 H V C CNN 199 | F1 "nixie-pipe-rescue:CONN_01X02" 100 0 50 V V C CNN 200 | F2 "" 0 0 50 H V C CNN 201 | F3 "" 0 0 50 H V C CNN 202 | $FPLIST 203 | Pin_Header_Straight_1X02 204 | Pin_Header_Angled_1X02 205 | Socket_Strip_Straight_1X02 206 | Socket_Strip_Angled_1X02 207 | $ENDFPLIST 208 | DRAW 209 | S -50 -45 10 -55 0 1 0 N 210 | S -50 55 10 45 0 1 0 N 211 | S -50 100 50 -100 0 1 0 N 212 | X P1 1 -200 50 150 R 50 50 1 1 P 213 | X P2 2 -200 -50 150 R 50 50 1 1 P 214 | ENDDRAW 215 | ENDDEF 216 | # 217 | # nixie-pipe-rescue:CONN_01X03 218 | # 219 | DEF nixie-pipe-rescue:CONN_01X03 P 0 40 Y N 1 F N 220 | F0 "P" 0 200 50 H V C CNN 221 | F1 "nixie-pipe-rescue:CONN_01X03" 100 0 50 V V C CNN 222 | F2 "" 0 0 50 H V C CNN 223 | F3 "" 0 0 50 H V C CNN 224 | $FPLIST 225 | Pin_Header_Straight_1X03 226 | Pin_Header_Angled_1X03 227 | Socket_Strip_Straight_1X03 228 | Socket_Strip_Angled_1X03 229 | $ENDFPLIST 230 | DRAW 231 | S -50 -95 10 -105 0 1 0 N 232 | S -50 5 10 -5 0 1 0 N 233 | S -50 105 10 95 0 1 0 N 234 | S -50 150 50 -150 0 1 0 N 235 | X P1 1 -200 100 150 R 50 50 1 1 P 236 | X P2 2 -200 0 150 R 50 50 1 1 P 237 | X P3 3 -200 -100 150 R 50 50 1 1 P 238 | ENDDRAW 239 | ENDDEF 240 | # 241 | # nixie-pipe-rescue:CONN_01X05 242 | # 243 | DEF nixie-pipe-rescue:CONN_01X05 P 0 40 Y N 1 F N 244 | F0 "P" 0 300 50 H V C CNN 245 | F1 "nixie-pipe-rescue:CONN_01X05" 100 0 50 V V C CNN 246 | F2 "" 0 0 50 H V C CNN 247 | F3 "" 0 0 50 H V C CNN 248 | $FPLIST 249 | Pin_Header_Straight_1X05 250 | Pin_Header_Angled_1X05 251 | Socket_Strip_Straight_1X05 252 | Socket_Strip_Angled_1X05 253 | $ENDFPLIST 254 | DRAW 255 | S -50 -195 10 -205 0 1 0 N 256 | S -50 -95 10 -105 0 1 0 N 257 | S -50 5 10 -5 0 1 0 N 258 | S -50 105 10 95 0 1 0 N 259 | S -50 205 10 195 0 1 0 N 260 | S -50 250 50 -250 0 1 0 N 261 | X P1 1 -200 200 150 R 50 50 1 1 P 262 | X P2 2 -200 100 150 R 50 50 1 1 P 263 | X P3 3 -200 0 150 R 50 50 1 1 P 264 | X P4 4 -200 -100 150 R 50 50 1 1 P 265 | X P5 5 -200 -200 150 R 50 50 1 1 P 266 | ENDDRAW 267 | ENDDEF 268 | # 269 | # nixie-pipe-rescue:FT230XS 270 | # 271 | DEF nixie-pipe-rescue:FT230XS U 0 40 Y Y 1 F N 272 | F0 "U" -550 600 50 H V L CNN 273 | F1 "nixie-pipe-rescue:FT230XS" 300 600 50 H V L CNN 274 | F2 "SSOP-16" 0 0 50 H V C CNN 275 | F3 "" 0 0 50 H V C CNN 276 | $FPLIST 277 | SSOP* 278 | $ENDFPLIST 279 | DRAW 280 | S -550 550 550 -550 0 1 10 f 281 | X TXD 1 700 400 150 L 50 50 1 1 O 282 | X 3V3OUT 10 -700 400 150 R 50 50 1 1 w 283 | X ~RESET 11 -700 -200 150 R 50 50 1 1 I 284 | X VCC 12 -100 700 150 D 50 50 1 1 W 285 | X GND 13 100 -700 150 U 50 50 1 1 W 286 | X CBUS1 14 700 -200 150 L 50 50 1 1 B 287 | X CBUS0 15 700 -100 150 L 50 50 1 1 B 288 | X CBUS3 16 700 -400 150 L 50 50 1 1 B 289 | X ~RTS 2 700 200 150 L 50 50 1 1 I 290 | X VCCIO 3 100 700 150 D 50 50 1 1 W 291 | X RXD 4 700 300 150 L 50 50 1 1 I 292 | X GND 5 -100 -700 150 U 50 50 1 1 W 293 | X ~CTS 6 700 100 150 L 50 50 1 1 I 294 | X CBUS2 7 700 -300 150 L 50 50 1 1 B 295 | X USBDP 8 -700 0 150 R 50 50 1 1 B 296 | X USBDM 9 -700 100 150 R 50 50 1 1 B 297 | ENDDRAW 298 | ENDDEF 299 | # 300 | # nixie-pipe-rescue:INDUCTOR_SMALL 301 | # 302 | DEF nixie-pipe-rescue:INDUCTOR_SMALL L 0 0 N N 1 F N 303 | F0 "L" 0 100 50 H V C CNN 304 | F1 "nixie-pipe-rescue:INDUCTOR_SMALL" 0 -50 50 H V C CNN 305 | F2 "" 0 0 50 H V C CNN 306 | F3 "" 0 0 50 H V C CNN 307 | DRAW 308 | A -150 0 50 1 1799 0 1 0 N -100 0 -200 0 309 | A -50 0 50 1 1799 0 1 0 N 0 0 -100 0 310 | A 50 0 50 1 1799 0 1 0 N 100 0 0 0 311 | A 150 0 50 1 1799 0 1 0 N 200 0 100 0 312 | X 1 1 -250 0 50 R 30 30 1 1 I 313 | X 2 2 250 0 50 L 30 30 1 1 I 314 | ENDDRAW 315 | ENDDEF 316 | # 317 | # nixie-pipe-rescue:USB_OTG-RESCUE-nixie-pipe 318 | # 319 | DEF nixie-pipe-rescue:USB_OTG-RESCUE-nixie-pipe P 0 40 Y Y 1 F N 320 | F0 "P" 325 -125 50 H V C CNN 321 | F1 "nixie-pipe-rescue:USB_OTG-RESCUE-nixie-pipe" 0 200 50 H V C CNN 322 | F2 "" -50 -100 50 V V C CNN 323 | F3 "" -50 -100 50 V V C CNN 324 | $FPLIST 325 | USB* 326 | $ENDFPLIST 327 | DRAW 328 | S -250 -150 250 150 0 1 0 N 329 | S -205 -150 -195 -120 0 1 0 N 330 | S -105 -150 -95 -120 0 1 0 N 331 | S -5 -150 5 -120 0 1 0 N 332 | S 95 -150 105 -120 0 1 0 N 333 | S 195 -150 205 -120 0 1 0 N 334 | X VCC 1 -200 -300 150 U 50 50 1 1 w 335 | X D- 2 -100 -300 150 U 50 50 1 1 P 336 | X D+ 3 0 -300 150 U 50 50 1 1 P 337 | X ID 4 100 -300 150 U 50 50 1 1 W 338 | X GND 5 200 -300 150 U 50 50 1 1 W 339 | X shield 6 400 100 150 L 50 50 1 1 P 340 | ENDDRAW 341 | ENDDEF 342 | # 343 | # nixie-pipe-rescue:WS2812B 344 | # 345 | DEF nixie-pipe-rescue:WS2812B U 0 40 Y Y 1 F N 346 | F0 "U" 0 100 60 H V C CNN 347 | F1 "nixie-pipe-rescue:WS2812B" 0 0 60 H V C CNN 348 | F2 "" 0 0 60 H V C CNN 349 | F3 "" 0 0 60 H V C CNN 350 | DRAW 351 | S -250 -100 250 -300 0 1 0 N 352 | S 100 -350 100 -350 0 1 0 N 353 | X VDD 1 -550 -150 300 R 50 50 1 1 W 354 | X DOUT 2 550 -250 300 L 50 50 1 1 O 355 | X GND 3 550 -150 300 L 50 50 1 1 W 356 | X DIN 4 -550 -250 300 R 50 50 1 1 I 357 | ENDDRAW 358 | ENDDEF 359 | # 360 | # nixie-pipe-rescue:ZENERsmall 361 | # 362 | DEF nixie-pipe-rescue:ZENERsmall D 0 40 N N 1 F N 363 | F0 "D" 0 100 50 H V C CNN 364 | F1 "nixie-pipe-rescue:ZENERsmall" 0 -100 50 H V C CNN 365 | F2 "" 0 0 50 H V C CNN 366 | F3 "" 0 0 50 H V C CNN 367 | $FPLIST 368 | D? 369 | SO* 370 | SM* 371 | $ENDFPLIST 372 | DRAW 373 | P 4 0 1 8 -60 40 -40 20 -40 -20 -20 -40 N 374 | P 4 0 1 0 40 40 -40 0 40 -40 40 40 F 375 | X K 1 -100 0 60 R 40 40 1 1 P 376 | X A 2 100 0 60 L 40 40 1 1 P 377 | ENDDRAW 378 | ENDDEF 379 | # 380 | # power:GND 381 | # 382 | DEF power:GND #PWR 0 0 Y Y 1 F P 383 | F0 "#PWR" 0 -250 50 H I C CNN 384 | F1 "power:GND" 0 -150 50 H V C CNN 385 | F2 "" 0 0 50 H I C CNN 386 | F3 "" 0 0 50 H I C CNN 387 | DRAW 388 | P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N 389 | X GND 1 0 0 0 D 50 50 1 1 W N 390 | ENDDRAW 391 | ENDDEF 392 | # 393 | # power:PWR_FLAG 394 | # 395 | DEF power:PWR_FLAG #FLG 0 0 N N 1 F P 396 | F0 "#FLG" 0 75 50 H I C CNN 397 | F1 "power:PWR_FLAG" 0 150 50 H V C CNN 398 | F2 "" 0 0 50 H I C CNN 399 | F3 "" 0 0 50 H I C CNN 400 | DRAW 401 | P 6 0 1 0 0 0 0 50 -40 75 0 100 40 75 0 50 N 402 | X pwr 1 0 0 0 U 50 50 0 0 w 403 | ENDDRAW 404 | ENDDEF 405 | # 406 | # power:VCC 407 | # 408 | DEF power:VCC #PWR 0 0 Y Y 1 F P 409 | F0 "#PWR" 0 -150 50 H I C CNN 410 | F1 "power:VCC" 0 150 50 H V C CNN 411 | F2 "" 0 0 50 H I C CNN 412 | F3 "" 0 0 50 H I C CNN 413 | DRAW 414 | C 0 75 25 0 1 0 N 415 | P 2 0 1 0 0 0 0 50 N 416 | X VCC 1 0 0 0 U 50 50 1 1 W N 417 | ENDDRAW 418 | ENDDEF 419 | # 420 | #End Library 421 | -------------------------------------------------------------------------------- /firmware/np-weather/np-weather.ino: -------------------------------------------------------------------------------- 1 | /* 2 | // GPL 3.0 License 3 | 4 | // Copyright (c) 2016 John Whittington www.jbrengineering.co.uk 5 | 6 | // This program is free software: you can redistribute it and/or modify 7 | // it under the terms of the GNU General Public License as published by 8 | // the Free Software Foundation, either version 3 of the License, or 9 | // (at your option) any later version. 10 | 11 | // This program is distributed in the hope that it will be useful, 12 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | // GNU General Public License for more details. 15 | 16 | // You should have received a copy of the GNU General Public License 17 | // along with this program. If not, see . 18 | */ 19 | 20 | #include 21 | #include 22 | 23 | #include 24 | 25 | #define LED_PIN 6 26 | #define NUM_PIPES 3 27 | #define NUM_UNITS 1 28 | #define BRIGHTNESS 255 29 | 30 | #define BAUD 57600 31 | #define NP_SET_NUMBER 0x40 32 | #define NP_SET_PIPE_NUMBER 0x41 33 | #define NP_SET_COLOUR 0x42 34 | #define NP_SET_PIPE_COLOUR 0x43 35 | #define NP_SET_BRIGHTNESS 0x44 36 | #define NP_SET_CLEAR 0x45 37 | #define NP_SET_CLEAR_PIPE 0x46 38 | #define NP_GET_NUMBER 0x47 39 | #define NP_SET_CONNECT 0x48 40 | #define NP_SET_UNITS 0x49 41 | #define NP_SET_SHOW 0x50 42 | #define NP_SET_WEATHER 0x51 43 | #define NP_SET_TIME 0x52 44 | 45 | #define MAX_PACKET 18 46 | #define MAX_MESSAGE MAX_PACKET - 2 47 | 48 | #define VERSION_MINOR 0 49 | #define VERSION_MAJOR 1 50 | 51 | #define DEBOUNCE 300 52 | #define DISPLAY_MODES 6 53 | #define OUTSIDE_WEATHER 0 54 | #define HUMIDITY 1 55 | #define WIND_SPEED 2 56 | #define INSIDE_TEMP 3 57 | #define DISPLAY_TIME 4 58 | #define CYCLE_MODES 5 59 | #define DISPLAY_UPDATE DISPLAY_MODES // roll over to no display to issue refresh 60 | 61 | #define SERIAL_UINT16(LSB,MSB) (( (short) LSB & 0xFF) | (( (short) MSB & 0xFF) << 8)) 62 | #define SERIAL_UINT32(B0,B1,B2,B3) ( (long) B0 | ( (long) B1 << 8 ) | ( (long) B2 << 16 ) | ( (long) B3 << 24 ) ) 63 | 64 | NixiePipe pipes = NixiePipe(NUM_PIPES,NUM_UNITS); 65 | 66 | uint8_t gDisplayMode = 0; 67 | CRGB gMainColour = CRGB::White; 68 | tmElements_t gTm; // time struct holder 69 | CRGBPalette16 gPal = CRGBPalette16( CRGB::Blue, CRGB::Cyan, CRGB::Yellow, CRGB::Red); 70 | 71 | typedef union { 72 | struct { 73 | byte size; 74 | byte command; 75 | byte message[MAX_MESSAGE]; 76 | } data; 77 | byte bytes[MAX_PACKET]; 78 | } Packet_t; 79 | 80 | typedef struct { 81 | byte outside; 82 | byte symbol; 83 | byte wind; 84 | byte humidity; 85 | byte inside; 86 | } weather_t; 87 | 88 | weather_t gWeather = { 89 | .outside = 0, 90 | .symbol = 0, 91 | .wind = 0, 92 | .humidity = 0, 93 | .inside = 0, 94 | }; 95 | 96 | bool gConnected = false; 97 | 98 | static Packet_t processInput(void) { 99 | Packet_t packet; 100 | unsigned long timeout; 101 | byte i = 0; 102 | 103 | packet.data.size = Serial.read(); 104 | delay(1); 105 | packet.data.command = Serial.read(); 106 | 107 | timeout = millis(); 108 | 109 | if (packet.data.size < MAX_MESSAGE) { 110 | while ( (i < (packet.data.size)) && ( (millis() - timeout) < 10) ) { 111 | packet.data.message[i++] = Serial.read(); 112 | timeout = millis(); 113 | } 114 | } 115 | 116 | return packet; 117 | } 118 | 119 | static void getColourPacket(byte *pmessage, CRGB *prgb) { 120 | prgb->r = pmessage[0]; 121 | prgb->g = pmessage[1]; 122 | prgb->b = pmessage[2]; 123 | } 124 | 125 | static void packValue(Packet_t *pres, uint32_t value) { 126 | 127 | for (int i = 0; i < 4; ++i) { 128 | pres->data.message[i] = (byte) ((value >> (8 * i)) & 0xFF); 129 | } 130 | 131 | pres->data.size = 4; 132 | } 133 | 134 | static void processPacket(Packet_t *ppack) { 135 | CRGB rgb; 136 | byte pipe = ppack->data.message[0]; 137 | Packet_t res; 138 | 139 | res.data.command = ppack->data.command; 140 | res.data.size = 1; 141 | res.data.message[0] = 0x00; 142 | 143 | switch (ppack->data.command) { 144 | case (NP_SET_CONNECT): 145 | if (ppack->data.size >= 2) { 146 | if ((ppack->data.message[0] == 0x4E /*N*/) && (ppack->data.message[1] == 0x50 /*P*/)) { 147 | res.data.command = ppack->data.command; 148 | res.data.size = 2; 149 | res.data.message[0] = VERSION_MINOR; 150 | res.data.message[1] = VERSION_MAJOR; 151 | gConnected = true; 152 | } 153 | } 154 | break; 155 | case (NP_SET_NUMBER): 156 | if (ppack->data.size >= 4) { 157 | pipes.setNumber((long) SERIAL_UINT32(ppack->data.message[0],ppack->data.message[1],ppack->data.message[2],ppack->data.message[3])); 158 | } 159 | break; 160 | case (NP_SET_PIPE_NUMBER): 161 | if (ppack->data.size >= 2) { 162 | pipes.setPipeNumber(pipe,ppack->data.message[1]); 163 | } 164 | break; 165 | case (NP_SET_COLOUR): 166 | if (ppack->data.size >= 3) { 167 | getColourPacket(&ppack->data.message[0],&rgb); 168 | pipes.setPipeColour(rgb); 169 | } 170 | break; 171 | case (NP_SET_PIPE_COLOUR): 172 | if (ppack->data.size >= 4) { 173 | getColourPacket(&ppack->data.message[1],&rgb); 174 | pipes.setPipeColour(pipe,rgb); 175 | } 176 | break; 177 | case (NP_SET_BRIGHTNESS): 178 | if (ppack->data.size >= 1) { 179 | pipes.setBrightness(ppack->data.message[0]); 180 | } 181 | break; 182 | case (NP_SET_CLEAR): 183 | if (ppack->data.message[0]) { 184 | pipes.clear(); 185 | } 186 | break; 187 | case (NP_SET_CLEAR_PIPE): 188 | if (ppack->data.size >= 1) { 189 | pipes.clearPipe(pipe); 190 | } 191 | break; 192 | case (NP_SET_UNITS): 193 | if (ppack->data.size >= 1) { 194 | pipes.setNumberUnits(ppack->data.message[0]); 195 | } 196 | break; 197 | case (NP_SET_SHOW): 198 | if (ppack->data.message[0]) { 199 | pipes.write(); 200 | pipes.show(); 201 | } 202 | break; 203 | case (NP_GET_NUMBER): 204 | if (ppack->data.message[0]) { 205 | packValue(&res, pipes.getNumber()); 206 | } 207 | break; 208 | case (NP_SET_WEATHER): 209 | if (ppack->data.size >= 1) { 210 | packValue(&res, pipes.getNumber()); 211 | gWeather.outside = ppack->data.message[0]; 212 | gWeather.symbol = ppack->data.message[1]; 213 | gWeather.wind = ppack->data.message[2] * 3.6; // convert from m/s to km/h 214 | gWeather.humidity = ppack->data.message[3]; 215 | gWeather.inside = RTC.temperature() / 4; 216 | // Clip humidity if display not large enough 217 | if (NUM_PIPES < 4) 218 | if (gWeather.humidity == 100) gWeather.humidity = 99; 219 | } 220 | break; 221 | case (NP_SET_TIME): 222 | if (ppack->data.size >= 1) { 223 | packValue(&res, pipes.getNumber()); 224 | gTm.Hour = ppack->data.message[0]; 225 | gTm.Minute = ppack->data.message[1]; 226 | RTC.write(gTm); 227 | } 228 | break; 229 | default: 230 | pipes.writeSolid(CRGB::Red); 231 | pipes.show(); 232 | res.data.message[0] = 0x3F; 233 | break; 234 | } 235 | 236 | Serial.write(res.bytes,res.data.size+2); 237 | } 238 | 239 | void setup() 240 | { 241 | pinMode(PIPE_TB0,INPUT); // TB0 242 | pinMode(PIPE_TB1,INPUT); // TB1 243 | 244 | Serial.begin(BAUD); 245 | while (!Serial); 246 | 247 | pipes.begin(); 248 | pipes.setNumberUnits(NUM_UNITS); 249 | pipes.setPipeColour(CRGB::Magenta); 250 | pipes.setPipeNumber(0,VERSION_MINOR); 251 | pipes.setPipeNumber(2,VERSION_MAJOR); 252 | pipes.write(); 253 | pipes.show(); 254 | pipes.setPipeColour(gMainColour); 255 | } 256 | 257 | void loop() 258 | { 259 | static unsigned long tb0db = 0; 260 | unsigned long tb0int = millis(); 261 | static unsigned long tb1db = 0; 262 | unsigned long tb1int = millis(); 263 | Packet_t packet; 264 | static uint8_t lastDisplay = gDisplayMode; 265 | static CEveryNSeconds everySecond(1); 266 | static CEveryNSeconds every60Second(60); 267 | static CEveryNSeconds every10Second(10); 268 | uint8_t colourIndex; 269 | static bool cycleDisplay = false; 270 | 271 | // RH 272 | if (~digitalRead(PIPE_TB0) & (tb0int - tb0db > DEBOUNCE)) { 273 | if (cycleDisplay) { 274 | cycleDisplay = false; 275 | } else { 276 | if (gDisplayMode < (DISPLAY_MODES - 1)) 277 | ++gDisplayMode; 278 | } 279 | tb0db = tb0int; 280 | } 281 | 282 | // LH 283 | if (~digitalRead(PIPE_TB1) & (tb1int - tb1db > DEBOUNCE)) { 284 | if (cycleDisplay) { 285 | cycleDisplay = false; 286 | } else { 287 | if (gDisplayMode > 0) 288 | --gDisplayMode; 289 | } 290 | tb1db = tb1int; 291 | } 292 | 293 | if (every10Second && cycleDisplay) { 294 | if (gDisplayMode < (DISPLAY_MODES - 2)) 295 | ++gDisplayMode; 296 | else 297 | gDisplayMode = 0; 298 | } 299 | 300 | // If user buttons changed mode and a value has been set 301 | if ((lastDisplay != gDisplayMode)) { 302 | lastDisplay = gDisplayMode; 303 | switch (gDisplayMode) { 304 | case (OUTSIDE_WEATHER): 305 | colourIndex = map(gWeather.outside, -10, 40, 0, 255); 306 | pipes.setPipeColour(ColorFromPalette(gPal, colourIndex)); 307 | /*pipes.setPipeColour(CRGB::White);*/ 308 | pipes.setNumber(gWeather.outside); 309 | pipes.setPipeNumber(0,gWeather.symbol); 310 | pipes.setPipeColour(0,CRGB::OrangeRed); 311 | pipes.write(); 312 | pipes.show(); 313 | break; 314 | case (HUMIDITY): 315 | pipes.setPipeColour(CRGB::White); 316 | pipes.setNumber(gWeather.humidity); 317 | pipes.setPipeNumber(0,Weather::Percent); 318 | pipes.setPipeColour(0,CRGB::Cyan); 319 | pipes.write(); 320 | pipes.show(); 321 | break; 322 | case (WIND_SPEED): 323 | pipes.setPipeColour(CRGB::White); 324 | pipes.setNumber(gWeather.wind); 325 | pipes.setPipeNumber(0,Weather::Wind); 326 | pipes.setPipeColour(0,CRGB::White); 327 | pipes.write(); 328 | pipes.show(); 329 | break; 330 | case (INSIDE_TEMP): 331 | gWeather.inside = RTC.temperature() / 4; 332 | colourIndex = map(gWeather.inside, 0, 30, 0, 255); 333 | pipes.setPipeColour(ColorFromPalette(gPal, colourIndex)); 334 | /*pipes.setPipeColour(CRGB::White);*/ 335 | pipes.setNumber(gWeather.inside); 336 | pipes.write(); 337 | pipes.clearPipe(0); 338 | pipes.show(); 339 | break; 340 | case (DISPLAY_TIME): 341 | RTC.read(gTm); 342 | pipes.setPipeColour(CRGB::OrangeRed); 343 | pipes.setPipeColour(0, CRGB::Black); 344 | pipes.setNumber(gTm.Hour * 100 + gTm.Minute); 345 | pipes.write(); 346 | /*pipes.writePipeFill(0,CRGB::OrangeRed);*/ // all on but gets hot 347 | pipes.show(); 348 | break; 349 | case (CYCLE_MODES): 350 | pipes.setPipeColour(CRGB::Green); 351 | pipes.write(); 352 | pipes.show(); 353 | cycleDisplay = true; 354 | break; 355 | default: 356 | break; 357 | } 358 | } 359 | 360 | // Check for new data 361 | if (Serial.available()) { 362 | packet = processInput(); 363 | processPacket(&packet); 364 | lastDisplay = DISPLAY_UPDATE; 365 | } 366 | 367 | // Update internal temp 368 | if (every60Second) { 369 | if (gDisplayMode == INSIDE_TEMP) { 370 | lastDisplay = DISPLAY_UPDATE; 371 | gWeather.inside = RTC.temperature() / 4; 372 | } 373 | } 374 | 375 | /*for (int i = 0; i < 255; i++) {*/ 376 | /*pipes.setPipeColour(ColorFromPalette(gPal, i));*/ 377 | /*pipes.write();*/ 378 | /*pipes.show();*/ 379 | /*}*/ 380 | 381 | // Update time 382 | if (everySecond) { 383 | if (gDisplayMode == DISPLAY_TIME) { 384 | lastDisplay = DISPLAY_UPDATE; 385 | if (RTC.read(gTm) != 0) { 386 | pipes.setPipeColour(CRGB::Red); 387 | } 388 | } 389 | } 390 | } 391 | -------------------------------------------------------------------------------- /nixiepipe.scad: -------------------------------------------------------------------------------- 1 | /* 2 | *Copyright JBR Engineering Research Ltd - 2016 - www.jbrengineering.co.uk 3 | * 4 | *This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 5 | *International License. To view a copy of this license, visit 6 | *http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to Creative 7 | *Commons, PO Box 1866, Mountain View, CA 94042, USA. Please include this 8 | *header with modifaction 9 | */ 10 | 11 | include 12 | include 13 | include 14 | $fn=50; 15 | 16 | export = true; 17 | enumbers = false; 18 | eblank = false; 19 | pcb = false; 20 | 21 | teeth = false; 22 | node = true; 23 | 24 | LBD=0.23; // general kerf diameter 25 | LBD_ACRY=0.43; // acrylic kerf diameter 26 | MATZ=3.00; // acrylic thickness 27 | WOODZ=3.15; // wood thickness 28 | 29 | WS2812 = 5; 30 | WS_BORDER = 3; 31 | WS_SPACE = WS2812 + WS_BORDER; 32 | WS_PIPEH = 4; 33 | WS_H = 1.6; 34 | 35 | /* PCBZ = 1.68; */ // actual for metal 36 | PCBZ = 1.60; 37 | SOFF = 4; 38 | pcbh = PCBZ + SOFF + WS_H; 39 | PCB_TABZ = 10; 40 | bspace = 8; 41 | tab = true; 42 | 43 | SCREWDIA = 3 + 0.2; 44 | STUDDIA = 2.6; // thread it instead of stud 45 | 46 | number=10; 47 | WIDTH = 40 + (WS_SPACE); 48 | HEIGHT = WIDTH + 10; 49 | DEPTH = ((number+1) * MATZ) + (2 * WOODZ); 50 | 51 | ht = HEIGHT + LBD; 52 | wd = WIDTH + LBD; 53 | dp = DEPTH + LBD; 54 | // Slot 55 | // Tweak these till it looks right 56 | XSlots = 6; // number of slots in base 57 | YSlots = 6; // number of slots on sides 58 | ZSlots = 4; 59 | // dent dia in each axis 60 | DLX = (ht / XSlots); 61 | DLY = (wd / YSlots); 62 | DLZ = (dp / ZSlots); 63 | 64 | if (!export) { 65 | /* diffuser(-1); */ 66 | /* translate([0,0,MATZ]) stack(number); */ 67 | translate([0,0,MATZ*(number+1)]) face(1); 68 | /* translate([0,0,-WOODZ]) face(0); */ 69 | /* translate([wd/2+MATZ/2,5+WS_PIPEH/2+LBD,dp/2-MATZ*3/2]) rotate([0,90,0]) side();*/ 70 | /* translate([0,0,MATZ*(number)]) diffuser(-1); */ 71 | /* translate([-wd/2-MATZ/2,5+WS_PIPEH/2+LBD,dp/2-MATZ*3/2]) rotate([0,90,0]) side();*/ 72 | /* translate([0,ht/2+WS_PIPEH+pcbh+MATZ/2,dp/2-MATZ*3/2]) rotate([90,0,0]) base();*/ 73 | /* translate([0,ht/2+WS_PIPEH+WS_H/2]) rotate([90,0,0]) pixel();*/ 74 | /* translate([0,ht/2+WS_PIPEH+WS_H,dp/2-MATZ*3/2]) rotate([90,180,0]) pcb(); */ 75 | /* translate([148.5,45,-89.2]) rotate([90,180,0]) import("nixie-pipe-pcb.stl");*/ 76 | echo ("Height:",ht,"Width:",wd,"Depth:",dp); 77 | } else { 78 | if (enumbers) { 79 | translate([0,0,0]) projection() diffuser(-1); 80 | for (x = [1:1:number]) { 81 | translate([(wd+2)*(x),0,0]) projection() diffuser(x); 82 | } 83 | } else if (eblank) { 84 | projection() diffuser(-1); 85 | } else if (pcb) { 86 | projection() pcb(); 87 | 88 | } else { 89 | if (teeth) { 90 | projection() side(); 91 | translate([dp+1,0,0]) { 92 | projection() side(); 93 | translate([(dp+1)+MATZ*2+1,0,0]) { 94 | projection() face(0); 95 | translate([wd+1+MATZ*2,0,0]) projection() face(1); 96 | } 97 | } 98 | } else { 99 | projection() face(0); 100 | translate([wd+1,0,0]) projection() face(1); 101 | } 102 | } 103 | } 104 | 105 | module middle() { 106 | translate([0,ht/2,0]) hexagon(WS_PIPEH*2,MATZ); 107 | } 108 | 109 | module left() { 110 | translate([-WS_SPACE/2,ht/2,0]) hexagon(WS_PIPEH*2,MATZ); 111 | } 112 | 113 | module right() { 114 | translate([WS_SPACE/2,ht/2,0]) hexagon(WS_PIPEH*2,MATZ); 115 | } 116 | 117 | module diffuser(number) { 118 | difference() { 119 | union() { 120 | roundedBox([wd,ht,MATZ],5); 121 | if (number % 2 && number > 0) { 122 | left(); 123 | } 124 | else if ( number > 0 ) { 125 | right(); 126 | } 127 | } 128 | if (number == 1) { 129 | rotate([180,180,0]) translate([0,0,-MATZ]) linear_extrude(height = MATZ*3) text("1",size=38,halign="center",valign="center"); 130 | } else if (number == 2) { 131 | rotate([180,180,0]) translate([0,0,-MATZ]) linear_extrude(height = MATZ*3) text("2",size=38,halign="center",valign="center"); 132 | } else if (number == 3) { 133 | rotate([180,180,0]) translate([0,0,-MATZ]) linear_extrude(height = MATZ*3) text("3",size=38,halign="center",valign="center"); 134 | } else if (number == 4) { 135 | rotate([180,180,0]) translate([0,0,-MATZ]) linear_extrude(height = MATZ*3) text("4",size=38,halign="center",valign="center"); 136 | } else if (number == 5) { 137 | rotate([180,180,0]) translate([0,0,-MATZ]) linear_extrude(height = MATZ*3) text("5",size=38,halign="center",valign="center"); 138 | } else if (number == 6) { 139 | rotate([180,180,0]) translate([0,0,-MATZ]) linear_extrude(height = MATZ*3) text("6",size=38,halign="center",valign="center"); 140 | } else if (number == 7) { 141 | rotate([180,180,0]) translate([0,0,-MATZ]) linear_extrude(height = MATZ*3) text("7",size=38,halign="center",valign="center"); 142 | } else if (number == 8) { 143 | rotate([180,180,0]) translate([0,0,-MATZ]) linear_extrude(height = MATZ*3) text("8",size=38,halign="center",valign="center"); 144 | } else if (number == 9) { 145 | rotate([180,180,0]) translate([0,0,-MATZ]) linear_extrude(height = MATZ*3) text("9",size=38,halign="center",valign="center"); 146 | } else if (number == 10) { 147 | rotate([180,180,0]) translate([0,0,-MATZ]) linear_extrude(height = MATZ*3) text("0",size=38,halign="center",valign="center"); 148 | } 149 | if ((abs(number) >= 1)) { 150 | if (!teeth) { 151 | screw_holes(SCREWDIA); 152 | } 153 | } 154 | } 155 | } 156 | 157 | module pcb() { 158 | pcbd = dp - (WOODZ * 2) - LBD; 159 | difference() { 160 | union() { 161 | roundedBox([wd,pcbd,PCBZ],2); 162 | if (tab) { 163 | translate([0,-pcbd/2-PCB_TABZ/2,0]) roundedBox([wd-10,WOODZ*2+PCB_TABZ,PCBZ],2); 164 | } else { 165 | translate([0,-pcbd/2,0]) roundedBox([wd-10,WOODZ*2,PCBZ],0.5); 166 | } 167 | translate([0,pcbd/2,0]) roundedBox([wd-10,WOODZ*2,PCBZ],0.5); 168 | } 169 | translate([0,-pcbd/2+MATZ*3/2,0]) { 170 | for (x = [1:1:number]) { 171 | translate([0,+MATZ*(x-1),0]) { 172 | if (x % 2) { 173 | translate([WS_SPACE/2,0,0]) cube([WS2812,WS2812,PCBZ],center=true); 174 | } else { 175 | translate([-WS_SPACE/2,0,0]) cube([WS2812,WS2812,PCBZ],center=true); 176 | } 177 | } 178 | } 179 | } 180 | } 181 | } 182 | 183 | module face(front) { 184 | WEnd = wd; 185 | HFace = ht+WS_PIPEH+pcbh - 5; 186 | HTY = HFace / XSlots; 187 | difference() { 188 | union() { 189 | diffuser(0); 190 | if (teeth) { 191 | translate([0,ht/2,0]) cube([wd,WS_PIPEH*2+pcbh*2,MATZ],center=true); 192 | } else { 193 | translate([0,ht/2,0]) roundedBox([wd,WS_PIPEH*2+pcbh*2+bspace,MATZ],5); 194 | } 195 | if (teeth) { 196 | translate([-wd/2,ht/2+WS_PIPEH+pcbh,0]) { 197 | for (x = [DLY:DLY*2:WEnd]) { 198 | translate([x,0,0]) tooth(DLY,1,LBD,WOODZ); 199 | } 200 | } 201 | translate([0,-ht/2+5,0]) { 202 | for (y = [HTY:HTY*2:ht]) { 203 | translate([-wd/2,y,0]) tooth(HTY,2,LBD,WOODZ); 204 | translate([wd/2,y,0]) tooth(HTY,2,LBD,WOODZ); 205 | } 206 | } 207 | } 208 | if (front == 0 && node) { 209 | translate([0,10,0]) node(0); 210 | translate([0,-10,0]) node(0); 211 | } 212 | } 213 | if (front) { 214 | scale([0.8,0.8,2]) diffuser(0); 215 | } 216 | // pcb slot 217 | if (front) { 218 | translate([0,ht/2+WS_PIPEH+WS_H+1,0]) { 219 | cube([wd-10+LBD,PCBZ-LBD,MATZ],center=true); 220 | // holes on edge provide strain relief 221 | translate([(wd-10)/2,(PCBZ-LBD)/2,-MATZ]) cylinder(r=0.4,h=MATZ*2); 222 | translate([(wd-10)/2*-1,(PCBZ-LBD)/2,-MATZ]) cylinder(r=0.4,h=MATZ*2); 223 | translate([(wd-10)/2,(PCBZ-LBD)/2*-1,-MATZ]) cylinder(r=0.4,h=MATZ*2); 224 | translate([(wd-10)/2*-1,(PCBZ-LBD)/2*-1,-MATZ]) cylinder(r=0.4,h=MATZ*2); 225 | } 226 | } else { // slightly larger for rear acrylic 227 | translate([0,ht/2+WS_PIPEH+WS_H+1,0]) { 228 | cube([wd-10+LBD,PCBZ-LBD_ACRY,MATZ],center=true); 229 | // holes on edge provide strain relief 230 | translate([(wd-10)/2,(PCBZ-LBD)/2,-MATZ]) cylinder(r=0.4,h=MATZ*2); 231 | translate([(wd-10)/2*-1,(PCBZ-LBD)/2,-MATZ]) cylinder(r=0.4,h=MATZ*2); 232 | translate([(wd-10)/2,(PCBZ-LBD)/2*-1,-MATZ]) cylinder(r=0.4,h=MATZ*2); 233 | translate([(wd-10)/2*-1,(PCBZ-LBD)/2*-1,-MATZ]) cylinder(r=0.4,h=MATZ*2); 234 | } 235 | if (node) { 236 | translate([0,10,0]) node(1); 237 | translate([0,-10,0]) node(1); 238 | /* translate([0,10,0]) magnet(1);*/ 239 | /* translate([0,-10,0]) magnet(1);*/ 240 | /* translate([0,10,0]) magnet(0);*/ 241 | /* translate([0,-10,0]) magnet(0);*/ 242 | } 243 | } 244 | 245 | if (!teeth) { 246 | if (front) { 247 | screw_holes(SCREWDIA); 248 | } else { 249 | screw_holes(STUDDIA); 250 | } 251 | } 252 | } 253 | } 254 | 255 | module side() { 256 | HFace = ht+WS_PIPEH+pcbh - 5; 257 | HTY = HFace / XSlots; 258 | union() { 259 | difference () { 260 | cube([dp,HFace,WOODZ],center=true); 261 | if (teeth) { 262 | translate([0,-HFace/2,0]) { 263 | for (y = [HTY:HTY*2:HFace]) { 264 | translate([dp/2,y,0]) dent(HTY,2,LBD,WOODZ); 265 | translate([-dp/2,y,0]) dent(HTY,2,LBD,WOODZ); 266 | } 267 | } 268 | } 269 | } 270 | if (teeth) { 271 | translate([-dp/2,0,0]) { 272 | for (y = [DLZ:DLZ*2:dp]) { 273 | translate([y,HFace/2,0]) tooth(DLZ,1,LBD,WOODZ); 274 | } 275 | } 276 | } 277 | } 278 | } 279 | 280 | module base() { 281 | baseW = wd+WOODZ*2; 282 | difference() { 283 | cube([baseW,dp,WOODZ],center=true); 284 | if (teeth) { 285 | translate([-wd/2,0,0]) { 286 | for (x = [DLY:DLY*2:baseW]) { 287 | translate([x,-dp/2,0]) tooth(DLY,1,LBD,WOODZ); 288 | translate([x,dp/2,0]) tooth(DLY,1,LBD,WOODZ); 289 | } 290 | } 291 | } 292 | if (teeth) { 293 | translate([0,-dp/2,0]) { 294 | for (y = [DLZ:DLZ*2:dp]) { 295 | translate([-baseW/2,y,0]) dent(DLZ,2,LBD,WOODZ); 296 | translate([baseW/2,y,0]) dent(DLZ,2,LBD,WOODZ); 297 | } 298 | } 299 | } 300 | } 301 | } 302 | 303 | module pixel() { 304 | difference() { 305 | cube([WS2812,WS2812,WS_H],center=true); 306 | translate([0,0,0.5]) cylinder(r=1.5,h=WS_H-1); 307 | } 308 | } 309 | 310 | module stack(number) { 311 | for (x = [1:1:number]) { 312 | translate([0,0,MATZ*(number-x)]) diffuser(x); 313 | } 314 | } 315 | 316 | module frame(front) { 317 | difference() { 318 | /* roundedBox([(WIDTH*4)-LBD,ht,MATZ],5);*/ 319 | /* scale([0.95,0.8,2]) roundedBox([(WIDTH*4)-LBD,ht,MATZ],5);*/ 320 | /* translate([0,-37,0]) face(1);*/ 321 | roundedBox([(WIDTH*4)-LBD,pcbh*2,MATZ],5); 322 | translate([5,0,0]) cube([wd-10+LBD,PCBZ-LBD,MATZ],center=false); 323 | translate([WIDTH+5,0,0]) cube([wd-10+LBD,PCBZ-LBD,MATZ],center=false); 324 | /* translate([-5,0,0]) cube([wd-10+LBD,PCBZ-LBD,MATZ],center=false);*/ 325 | translate([-WIDTH+5,0,0]) cube([wd-10+LBD,PCBZ-LBD,MATZ],center=false); 326 | } 327 | } 328 | 329 | 330 | module screw_holes(dia) { 331 | hloc = (5+3.2-LBD) / 2; 332 | translate([wd/2-hloc,ht/2-hloc,0]) cylinder(r=(dia-LBD)/2,h=MATZ,center=true); 333 | translate([-wd/2+hloc,-ht/2+hloc,0]) cylinder(r=(dia-LBD)/2,h=MATZ,center=true); 334 | translate([wd/2-hloc,-ht/2+hloc,0]) cylinder(r=(dia-LBD)/2,h=MATZ,center=true); 335 | translate([-wd/2+hloc,ht/2-hloc,0]) cylinder(r=(dia-LBD)/2,h=MATZ,center=true); 336 | } 337 | 338 | module node(cut) { 339 | if (cut) { 340 | translate([wd/2-2,0,0]) { 341 | translate([1,0,0]) cube([2,2.1-LBD,MATZ],center=true); 342 | translate([0,0,-MATZ]) cylinder(r=2.1-LBD/2,h=MATZ*2); 343 | translate([-0.5,0,0]) cube([1,4.2-LBD,MATZ],center=true); 344 | translate([-1,0,-MATZ]) cylinder(r=2.1-LBD/2,h=MATZ*2); 345 | } 346 | } else { 347 | translate([-wd/2-2,0,0]) { 348 | translate([1,0,0]) cube([2,2+LBD/2,MATZ],center=true); 349 | cylinder(r=2,h=MATZ); 350 | } 351 | } 352 | } 353 | 354 | module magnet(cut) { 355 | if (cut) { 356 | translate([wd/2-2+LBD,0,0]) { 357 | translate([1,0,0]) cube([2,2-LBD,MATZ],center=true); 358 | translate([0,0,-MATZ]) cylinder(r=2-LBD/2,h=MATZ*2); 359 | } 360 | } else { 361 | translate([-wd/2+2-LBD,0,0]) { 362 | translate([-1,0,0]) cube([2,2-LBD,MATZ],center=true); 363 | translate([0,0,-MATZ]) cylinder(r=2-LBD/2,h=MATZ*2); 364 | } 365 | } 366 | } 367 | -------------------------------------------------------------------------------- /firmware/np-clock/np-clock.ino: -------------------------------------------------------------------------------- 1 | /* 2 | // GPL 3.0 License 3 | 4 | // Copyright (c) 2016 John Whittington www.jbrengineering.co.uk 5 | 6 | // This program is free software: you can redistribute it and/or modify 7 | // it under the terms of the GNU General Public License as published by 8 | // the Free Software Foundation, either version 3 of the License, or 9 | // (at your option) any later version. 10 | 11 | // This program is distributed in the hope that it will be useful, 12 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | // GNU General Public License for more details. 15 | 16 | // You should have received a copy of the GNU General Public License 17 | // along with this program. If not, see . 18 | */ 19 | 20 | #include 21 | #include 22 | #include 23 | #include 24 | 25 | #include 26 | 27 | #include "state_machine.h" 28 | #include "serial.h" 29 | 30 | #define LED_PIN 6 31 | #define NUM_PIPES 4 32 | #define BRIGHTNESS 255 33 | #define MAIN_RGB CRGB::OrangeRed 34 | #define DEBOUNCE 200 35 | 36 | #define RAINBOW false 37 | 38 | CRGB gMainRGB = MAIN_RGB; 39 | uint8_t gHue = 0; 40 | 41 | int8_t gState = ST_CLOCK; 42 | int8_t gEvent = EV_NONE; 43 | bool gConnected = false; 44 | 45 | NixiePipe pipes = NixiePipe(NUM_PIPES); 46 | 47 | static Packet_t processInput(void) { 48 | Packet_t packet; 49 | unsigned long timeout; 50 | byte i = 0; 51 | 52 | packet.data.size = Serial.read(); 53 | delay(1); 54 | packet.data.command = Serial.read(); 55 | 56 | timeout = millis(); 57 | 58 | if (packet.data.size < MAX_MESSAGE) { 59 | while ( (i < (packet.data.size)) && ( (millis() - timeout) < 10) ) { 60 | packet.data.message[i++] = Serial.read(); 61 | timeout = millis(); 62 | } 63 | } 64 | 65 | return packet; 66 | } 67 | 68 | static void getColourPacket(byte *pmessage, CRGB *prgb) { 69 | prgb->r = pmessage[0]; 70 | prgb->g = pmessage[1]; 71 | prgb->b = pmessage[2]; 72 | } 73 | 74 | static void packValue(Packet_t *pres, uint32_t value) { 75 | 76 | for (int i = 0; i < 4; ++i) { 77 | pres->data.message[i] = (byte) ((value >> (8 * i)) & 0xFF); 78 | } 79 | 80 | pres->data.size = 4; 81 | } 82 | 83 | static void processPacket(Packet_t *ppack) { 84 | CRGB rgb; 85 | byte pipe = ppack->data.message[0]; 86 | Packet_t res; 87 | static tmElements_t tm; // time struct holder to set time 88 | 89 | res.data.command = ppack->data.command; 90 | res.data.size = 1; 91 | res.data.message[0] = 0x00; 92 | 93 | switch (ppack->data.command) { 94 | case (NP_SET_CONNECT): 95 | if (ppack->data.size >= 2) { 96 | if ((ppack->data.message[0] == 0x4E /*N*/) && (ppack->data.message[1] == 0x50 /*P*/)) { 97 | res.data.command = ppack->data.command; 98 | res.data.size = 2; 99 | res.data.message[0] = VERSION_MINOR; 100 | res.data.message[1] = VERSION_MAJOR; 101 | gConnected = true; 102 | } 103 | } 104 | break; 105 | case (NP_SET_NUMBER): 106 | if (ppack->data.size >= 4) { 107 | pipes.setNumber((long) SERIAL_UINT32(ppack->data.message[0],ppack->data.message[1],ppack->data.message[2],ppack->data.message[3])); 108 | } 109 | break; 110 | case (NP_SET_PIPE_NUMBER): 111 | if (ppack->data.size >= 2) { 112 | pipes.setPipeNumber(pipe,ppack->data.message[1]); 113 | } 114 | break; 115 | case (NP_SET_COLOUR): 116 | if (ppack->data.size >= 3) { 117 | getColourPacket(&ppack->data.message[0],&rgb); 118 | pipes.setPipeColour(rgb); 119 | } 120 | break; 121 | case (NP_SET_PIPE_COLOUR): 122 | if (ppack->data.size >= 4) { 123 | getColourPacket(&ppack->data.message[1],&rgb); 124 | pipes.setPipeColour(pipe,rgb); 125 | } 126 | break; 127 | case (NP_SET_BRIGHTNESS): 128 | if (ppack->data.size >= 1) { 129 | pipes.setBrightness(ppack->data.message[0]); 130 | } 131 | break; 132 | case (NP_SET_CLEAR): 133 | if (ppack->data.message[0]) { 134 | pipes.clear(); 135 | } 136 | break; 137 | case (NP_SET_CLEAR_PIPE): 138 | if (ppack->data.size >= 1) { 139 | pipes.clearPipe(pipe); 140 | } 141 | break; 142 | case (NP_SET_UNITS): 143 | if (ppack->data.size >= 1) { 144 | pipes.setNumberUnits(ppack->data.message[0]); 145 | } 146 | break; 147 | case (NP_SET_SHOW): 148 | if (ppack->data.message[0]) { 149 | pipes.write(); 150 | pipes.show(); 151 | } 152 | break; 153 | case (NP_GET_NUMBER): 154 | if (ppack->data.message[0]) { 155 | packValue(&res, pipes.getNumber()); 156 | } 157 | break; 158 | case (NP_SET_TIME): 159 | if (ppack->data.size >= 1) { 160 | packValue(&res, pipes.getNumber()); 161 | tm.Hour = ppack->data.message[0]; 162 | tm.Minute = ppack->data.message[1]; 163 | RTC.write(tm); 164 | } 165 | break; 166 | default: 167 | /* pipes.writeSolid(CRGB::Red);*/ 168 | /* pipes.show();*/ 169 | /* res.data.message[0] = 0x3F;*/ 170 | break; 171 | } 172 | 173 | Serial.write(res.bytes,res.data.size+2); 174 | } 175 | 176 | static int8_t processTB0(void) { 177 | uint32_t hold = millis(); 178 | int8_t event = EV_NONE; 179 | 180 | while (!digitalRead(PIPE_TB0) && (event != EV_TB0_HOLD) ) { 181 | if ((millis() - hold < 4000) && (millis() - hold > 200)) { 182 | event = EV_TB0_PRESS; 183 | } else if ((millis() - hold > 4000)) { 184 | event = EV_TB0_HOLD; 185 | } 186 | } 187 | 188 | return event; 189 | } 190 | 191 | static int8_t processTB1(void) { 192 | uint32_t hold = millis(); 193 | int8_t event = EV_NONE; 194 | 195 | while (!digitalRead(PIPE_TB1) && (event != EV_TB1_HOLD) ) { 196 | if ((millis() - hold < 4000) && (millis() - hold > 200)) { 197 | event = EV_TB1_PRESS; 198 | } else if ((millis() - hold > 4000)) { 199 | event = EV_TB1_HOLD; 200 | } 201 | } 202 | 203 | return event; 204 | } 205 | 206 | static inline void writeTime(tmElements_t tm) { 207 | uint32_t time_val; 208 | 209 | // show seconds with more than 6 pipes 210 | if (NUM_PIPES > 5) { 211 | time_val = tm.Hour; 212 | time_val *= 10000; 213 | time_val += tm.Minute * 100; 214 | time_val += tm.Second; 215 | // otherwise just hours and minutes 216 | } else { 217 | time_val = tm.Hour * 100; 218 | time_val += tm.Minute; 219 | } 220 | 221 | pipes.setNumber(time_val); 222 | } 223 | 224 | static void changeTime(tmElements_t *ptm, int8_t dir) { 225 | // set seconds to zero as we're not able to move them with buttons 226 | ptm->Second = 0; 227 | 228 | for (int i = 0; i < abs(dir); ++i) { 229 | // UP 230 | if (dir >= 0) { 231 | if (ptm->Minute == 59) { 232 | ptm->Minute = 0; 233 | if (ptm->Hour == 23) { 234 | ptm->Hour = 0; 235 | } else { 236 | ++(ptm->Hour); 237 | } 238 | } else { 239 | ++(ptm->Minute); 240 | } 241 | // DOWN 242 | } else { 243 | if (ptm->Minute == 0) { 244 | ptm->Minute = 59; 245 | if (ptm->Hour == 0) { 246 | ptm->Hour = 23; 247 | } else { 248 | --(ptm->Hour); 249 | } 250 | } else { 251 | --(ptm->Minute); 252 | } 253 | } 254 | } 255 | } 256 | 257 | 258 | static int8_t setTime(tmElements_t &tm) { 259 | uint32_t entry = millis(); // entry time - reset each button press 260 | uint32_t hold = millis(); // hold timer to increase time change 261 | uint32_t debounce = 0; // debouce holder 262 | uint8_t dperiod = DEBOUNCE; // debouce period 263 | 264 | writeTime(tm); 265 | pipes.show(); 266 | 267 | // run for 5s then save the time to RTC 268 | while (millis() - entry < 5000) { 269 | 270 | // Set pipes red to show setting clock 271 | pipes.writeSolid(CRGB::Red); 272 | 273 | if (!digitalRead(PIPE_TB0)) { 274 | if (millis() - hold > 1000) { 275 | dperiod = 10; 276 | } else { 277 | dperiod = DEBOUNCE; 278 | } 279 | 280 | // increment time up 281 | if ((millis() - debounce) > dperiod ) { 282 | entry = millis(); 283 | changeTime(&tm, 1); 284 | debounce = entry; 285 | } 286 | } else if (!digitalRead(PIPE_TB1)) { 287 | if (millis() - hold > 1000) { 288 | dperiod = 10; 289 | } else { 290 | dperiod = DEBOUNCE; 291 | } 292 | 293 | // increment time down 294 | if ((millis() - debounce) > dperiod ) { 295 | entry = millis(); 296 | changeTime(&tm, -1); 297 | debounce = entry; 298 | } 299 | 300 | } else { 301 | hold = millis(); // reset the hold button as hasn't been pressed 302 | } 303 | 304 | writeTime(tm); 305 | pipes.show(); 306 | } 307 | 308 | // save to RTC 309 | RTC.write(tm); 310 | 311 | return ST_CLOCK; 312 | 313 | } 314 | 315 | static int8_t setAlarm(tmElements_t tm) { 316 | uint32_t entry = millis(); // entry time - reset each button press 317 | uint32_t hold = millis(); // hold timer to increase time change 318 | uint32_t debounce = 0; // debouce holder 319 | uint8_t dperiod = DEBOUNCE; // debouce period 320 | tmElements_t alarm; 321 | 322 | // start from current time + 10min 323 | alarm = tm; 324 | changeTime(&alarm,10); 325 | writeTime(alarm); 326 | pipes.show(); 327 | 328 | // run for 5s then save the time to RTC 329 | while (millis() - entry < 5000) { 330 | 331 | // Set pipes red to show setting clock 332 | pipes.writeSolid(CRGB::Orange); 333 | 334 | if (!digitalRead(PIPE_TB0)) { 335 | if (millis() - hold > 1000) { 336 | dperiod = 10; 337 | } else { 338 | dperiod = DEBOUNCE; 339 | } 340 | 341 | if ((millis() - debounce) > dperiod ) { 342 | entry = millis(); 343 | changeTime(&alarm,1); 344 | debounce = entry; 345 | } 346 | } else if (!digitalRead(PIPE_TB1)) { 347 | if (millis() - hold > 1000) { 348 | dperiod = 10; 349 | } else { 350 | dperiod = DEBOUNCE; 351 | } 352 | 353 | if ((millis() - debounce) > dperiod ) { 354 | entry = millis(); 355 | changeTime(&alarm, -1); 356 | debounce = entry; 357 | } 358 | 359 | } else { 360 | hold = millis(); // reset the hold button as hasn't been pressed 361 | } 362 | 363 | writeTime(alarm); 364 | pipes.show(); 365 | } 366 | 367 | // save to RTC 368 | RTC.setAlarm(ALM1_MATCH_HOURS, 0, alarm.Minute, alarm.Hour, 0); 369 | 370 | return ST_CLOCK; 371 | 372 | } 373 | 374 | static int8_t setColour(void) { 375 | uint32_t entry = millis(); // entry time - reset each button press 376 | uint32_t debouce = 0; 377 | uint8_t hue = 0; 378 | uint8_t sat = 255; 379 | CHSV hsv(hue,sat,255); 380 | 381 | while(millis() - entry < 5000) { 382 | if (!digitalRead(PIPE_TB0)) { 383 | if ((millis() - debouce) > 10) { 384 | entry = millis(); 385 | 386 | hsv2rgb_rainbow(hsv,gMainRGB); 387 | pipes.writeSolid(gMainRGB); 388 | pipes.show(); 389 | hsv.hue = ++hue; 390 | 391 | debouce = millis(); 392 | } 393 | } else if (!digitalRead(PIPE_TB1)) { 394 | if ((millis() - debouce) > 10) { 395 | entry = millis(); 396 | 397 | hsv2rgb_rainbow(hsv,gMainRGB); 398 | pipes.writeSolid(gMainRGB); 399 | pipes.show(); 400 | hsv.sat = --sat; 401 | 402 | debouce = millis(); 403 | } 404 | } 405 | } 406 | 407 | return ST_CLOCK; 408 | } 409 | 410 | static int8_t setCounter(void) { 411 | uint32_t entry = millis(); // entry time - reset each button press 412 | uint32_t hold = millis(); // hold timer to increase time change 413 | uint32_t debounce = 0; // debouce holder 414 | uint16_t dperiod = DEBOUNCE; // debouce period 415 | Packet_t packet; 416 | 417 | // blank the counter if it isn't running 418 | if (gState != ST_CUPDATE) 419 | pipes.setNumber(1); 420 | 421 | // Set pipes red to show setting clock 422 | pipes.writeSolid(CRGB::Green); 423 | pipes.show(); 424 | 425 | // run for 30s then escape 426 | while ( (millis() - entry) < 30000) { 427 | 428 | if (!digitalRead(PIPE_TB0)) { 429 | if (millis() - hold > 1000) { 430 | if ((pipes.getNumber() % 30) == 0) 431 | dperiod = 500; 432 | else 433 | dperiod = 60; 434 | } else { 435 | dperiod = DEBOUNCE; 436 | } 437 | 438 | if ((millis() - debounce) > dperiod ) { 439 | entry = millis(); 440 | // jump to 1/2 minutes if we hit minutes whilst held down 441 | if ( ((pipes.getNumber() % 30) == 0) && (millis() - hold > 1000) ) { 442 | pipes.setNumber(pipes.getNumber() + 30); 443 | // otherwise increment 444 | } else { 445 | ++pipes; 446 | } 447 | debounce = entry; 448 | } 449 | 450 | // show the changes 451 | pipes.write(); 452 | pipes.show(); 453 | 454 | } else if (!digitalRead(PIPE_TB1)) { 455 | if ((millis() - entry) > 1000 ) { 456 | // escape while statement 457 | entry = millis() + 30001; 458 | // hold until exit to prevent re-trigger 459 | while(!digitalRead(PIPE_TB1)); 460 | } 461 | } else { 462 | hold = millis(); // reset the hold button as hasn't been pressed 463 | } 464 | 465 | // check for serial request in this mode too and exit if we get connect packet 466 | if (Serial.available()) { 467 | packet = processInput(); 468 | processPacket(&packet); 469 | return ST_CLOCK; 470 | } 471 | 472 | } 473 | 474 | pipes.setPipeColour(gMainRGB); 475 | pipes.show(); 476 | 477 | return ST_COUNTER; 478 | } 479 | 480 | static inline void startUpDisplay() { 481 | uint16_t entry = millis(); 482 | 483 | for (int p = 0; p < NUM_PIPES; p++) { 484 | for (int i = 0; i < 10; i++) { 485 | pipes.setPipeNumber(p,i); 486 | entry = millis(); 487 | while( (millis() - entry ) < 60) { 488 | pipes.writeFade(32); 489 | pipes.show(); 490 | } 491 | } 492 | } 493 | for (int p = 0; p < NUM_PIPES; p++) { 494 | for (int i = 9; i >= 0; i--) { 495 | pipes.setPipeNumber(p,i); 496 | entry = millis(); 497 | while( (millis() - entry ) < 60) { 498 | pipes.writeFade(32); 499 | pipes.show(); 500 | } 501 | } 502 | } 503 | 504 | pipes.writeNumber(0); 505 | pipes.clear(); 506 | pipes.show(); 507 | } 508 | 509 | void setup() { 510 | Packet_t packet; 511 | uint16_t entry = millis(); 512 | 513 | Serial.begin(BAUD); 514 | /* pipes.passSerial(Serial);*/ 515 | 516 | pipes.begin(); 517 | pipes.clear(); 518 | pipes.setBrightness(BRIGHTNESS); 519 | pipes.setPipeColour(CRGB::White); 520 | pipes.writeNumber( (VERSION_MAJOR * 100) + VERSION_MINOR); 521 | pipes.show(); 522 | 523 | pinMode(PIPE_TB0,INPUT); // TB0 524 | pinMode(PIPE_TB1,INPUT); // TB1 525 | 526 | // brief wait at boot for connection attempt as RTS resets on port open 527 | // show firmware version whilst we are at it 528 | while ( (millis() - entry) < 2500) { 529 | if (Serial.available()) { 530 | packet = processInput(); 531 | processPacket(&packet); 532 | } 533 | } 534 | 535 | pipes.setPipeColour(gMainRGB); 536 | if (!gConnected) { 537 | startUpDisplay(); 538 | } 539 | } 540 | 541 | static int8_t getEvent(tmElements_t *ptm) { 542 | static unsigned long tb0db = 0; 543 | unsigned long tb0int = millis(); 544 | static unsigned long tb1db = 0; 545 | unsigned long tb1int = millis(); 546 | int8_t event = EV_NONE; 547 | 548 | static bool alarmFlag = false; 549 | static bool counterFlag = false; 550 | static uint8_t counterSeconds = 0; 551 | 552 | // Buttons clear flags and set event 553 | if (!digitalRead(PIPE_TB0) & (tb0int - tb0db > DEBOUNCE)) { 554 | event = processTB0(); 555 | tb0db = millis(); 556 | alarmFlag = false; counterFlag = false; 557 | } else if (!digitalRead(PIPE_TB1) & (tb1int - tb1db > DEBOUNCE)) { 558 | event = processTB1(); 559 | tb1db = millis(); 560 | alarmFlag = false; counterFlag = false; 561 | } 562 | 563 | // RTC chip not present or failing to operate 564 | if (RTC.read(*ptm) != 0) { 565 | event = EV_RTCFAIL; 566 | } 567 | 568 | // Counter has finished. Set flag for 30s to flash display for this period 569 | if ((gState == ST_COUNTER) && (pipes.getNumber() == 0)) { 570 | event = EV_COUNTEND; 571 | counterFlag = true; 572 | counterSeconds = ptm->Second; // set seconds holder to current seconds for relative 30s timer 573 | } else if (counterFlag) { 574 | if (ptm->Second % 2 == 0) 575 | event = EV_COUNTEND; 576 | // we've flashed for 30s, clear the flag 577 | if (ptm->Second == ( (counterSeconds < 30) ? (counterSeconds + 30) : (counterSeconds - 29) ) ) { 578 | counterFlag = false; 579 | } 580 | } 581 | 582 | // Alarm has sounded. Set flag for 60s to flash display for this period 583 | if (RTC.alarm(ALARM_1) || alarmFlag || RTC.alarm(ALARM_2)) { 584 | Serial.println("ALARM!"); 585 | alarmFlag = true; 586 | // flash off every second 587 | if (ptm->Second % 2 == 0) 588 | event = EV_ALARM; 589 | // disable alarm flag after 1 minute 590 | if (ptm->Second == 59) { 591 | alarmFlag = false; 592 | } 593 | } 594 | 595 | return event; 596 | } 597 | 598 | 599 | void loop() { 600 | static tmElements_t tm; // time struct holder 601 | static CEveryNSeconds everySecond(1); 602 | 603 | // Clock mode unless in serial mode 604 | if (!gConnected) { 605 | gEvent = getEvent(&tm); 606 | for (uint8_t i = 0; i < TRANS_COUNT; i++) { 607 | if ((gState == trans[i].st) || (ST_ANY == trans[i].st)) { 608 | if ((gEvent == trans[i].ev) || (EV_ANY == trans[i].ev)) { 609 | gState = trans[i].nst; 610 | break; 611 | } 612 | } 613 | } 614 | 615 | switch (gState) { 616 | case ST_CLOCK: 617 | if (everySecond) { 618 | Serial.print(tm.Hour); 619 | Serial.print(":"); 620 | Serial.println(tm.Minute); 621 | pipes.setPipeColour(gMainRGB); 622 | 623 | // flash off every second in alarm event 624 | /* if (gEvent == EV_ALARM)*/ 625 | /* pipes.setPipeColour(CRGB::Black);*/ 626 | /* // flash every second whilst counter end*/ 627 | /* if (gEvent == EV_COUNTEND)*/ 628 | /* pipes.setPipeColour(CRGB::Red);*/ 629 | 630 | writeTime(tm); 631 | } 632 | break; 633 | case ST_SETTIME: 634 | setTime(tm); 635 | break; 636 | case ST_SETCOLOUR: 637 | setColour(); 638 | break; 639 | case ST_SETALARM: 640 | setAlarm(tm); 641 | break; 642 | case (ST_SETCOUNT): case (ST_CUPDATE): 643 | setCounter(); 644 | break; 645 | case ST_COUNTER: 646 | if (everySecond) { 647 | if (pipes.getNumber() <= 10) 648 | pipes.setPipeColour(CRGB::Red); 649 | --pipes; 650 | } 651 | break; 652 | case ST_RTCFAIL: 653 | // rtc isn't reading 654 | Serial.println("RTC read error! Please check the circuitry."); 655 | Serial.println(); 656 | pipes.setNumber(9999); 657 | pipes.writeSolid(CRGB::Red); // all red 658 | pipes.show(); 659 | break; 660 | case ST_FLASH: 661 | if (everySecond) { 662 | if (gEvent == EV_ALARM) 663 | pipes.writeSolid(CRGB::Black); 664 | else if (gEvent == EV_COUNTEND) 665 | pipes.writeSolid(CRGB::Red); 666 | pipes.show(); 667 | } 668 | break; 669 | } 670 | 671 | EVERY_N_MILLISECONDS( 100 ) { gHue++; } // slowly cycle the "base color" through the rainbow 672 | 673 | pipes.writeFade(4); 674 | 675 | // rainbow at midday and midnight in clock state 676 | if (gState == ST_CLOCK) { 677 | if ( ((tm.Hour == 0) || (tm.Hour == 12)) && (tm.Minute == 0) ) 678 | pipes.writeRainbow(gHue); 679 | // always display rainbow if rainbow flag 680 | else if (RAINBOW) 681 | pipes.writeRainbow(gHue); 682 | } 683 | 684 | pipes.show(); 685 | 686 | // in serial mode, just act on packets 687 | } else { 688 | Packet_t packet; 689 | if (Serial.available()) { 690 | packet = processInput(); 691 | processPacket(&packet); 692 | } 693 | } 694 | 695 | } 696 | -------------------------------------------------------------------------------- /pcb/kicad/WS2812B.pretty/jbr_logo_24.kicad_mod: -------------------------------------------------------------------------------- 1 | (module LOGO (layer F.Cu) 2 | (at 0 0) 3 | (fp_text reference "G***" (at 0 0) (layer F.SilkS) hide 4 | (effects (font (thickness 0.3))) 5 | ) 6 | (fp_text value "LOGO" (at 0.75 0) (layer F.SilkS) hide 7 | (effects (font (thickness 0.3))) 8 | ) 9 | (fp_poly (pts (xy -9.329487 -2.608010) (xy -9.154586 -2.544034) (xy -9.080583 -2.455333) (xy -9.066253 -2.371449) (xy -9.121166 -2.425912) (xy -9.144000 -2.455333) (xy -9.209337 -2.522911) (xy -9.189332 -2.444544) 10 | (xy -9.084060 -2.220501) (xy -9.067462 -2.187342) (xy -8.894960 -1.967876) (xy -8.692284 -1.908744) (xy -8.481431 -2.013173) (xy -8.408411 -2.090628) (xy -8.266075 -2.238914) (xy -8.142656 -2.267728) 11 | (xy -8.007913 -2.219888) (xy -7.850827 -2.100847) (xy -7.844261 -1.987376) (xy -7.941328 -1.893008) (xy -8.006301 -1.895318) (xy -8.093504 -1.869266) (xy -8.104800 -1.779050) (xy -8.070450 -1.664348) 12 | (xy -8.035383 -1.655913) (xy -7.972457 -1.616468) (xy -7.908556 -1.472777) (xy -7.866969 -1.288182) (xy -7.862351 -1.185333) (xy -7.851659 -1.116014) (xy -7.822147 -1.164166) (xy -7.714191 -1.256127) 13 | (xy -7.573795 -1.256978) (xy -7.513932 -1.206500) (xy -7.496468 -1.208382) (xy -7.504219 -1.248833) (xy -7.482822 -1.345764) (xy -7.454934 -1.354666) (xy -7.314740 -1.382484) (xy -7.252418 -1.403567) 14 | (xy -7.124438 -1.378483) (xy -7.017978 -1.251336) (xy -6.974019 -1.088275) (xy -6.998635 -0.993937) (xy -7.063410 -0.971191) (xy -7.121111 -1.101520) (xy -7.162117 -1.234249) (xy -7.180136 -1.216265) 15 | (xy -7.188227 -1.054100) (xy -7.223893 -0.838236) (xy -7.292324 -0.700209) (xy -7.377172 -0.543994) (xy -7.410248 -0.401699) (xy -7.397014 -0.251050) (xy -7.279467 -0.199118) (xy -7.208758 -0.195650) 16 | (xy -6.923271 -0.186541) (xy -6.768297 -0.154411) (xy -6.705013 -0.076462) (xy -6.694599 0.070102) (xy -6.695351 0.105834) (xy -6.711134 0.258123) (xy -6.741406 0.279096) (xy -6.747933 0.265587) 17 | (xy -6.802414 0.194594) (xy -6.861796 0.260142) (xy -6.941067 0.327554) (xy -7.058398 0.263332) (xy -7.063214 0.259356) (xy -7.170060 0.189025) (xy -7.214154 0.248747) (xy -7.228416 0.351301) 18 | (xy -7.306984 0.457302) (xy -7.408333 0.514683) (xy -7.507916 0.567965) (xy -7.493000 0.587377) (xy -7.399029 0.664441) (xy -7.296255 0.839093) (xy -7.217981 1.044909) (xy -7.195370 1.181046) 19 | (xy -7.181926 1.267304) (xy -7.123728 1.200998) (xy -7.115307 1.187785) (xy -7.024014 1.102941) (xy -6.969480 1.147770) (xy -6.972159 1.283397) (xy -7.008820 1.390178) (xy -7.087434 1.522549) 20 | (xy -7.194296 1.554696) (xy -7.393911 1.506296) (xy -7.622943 1.460149) (xy -7.797981 1.507054) (xy -7.904395 1.576260) (xy -8.045429 1.716055) (xy -8.087482 1.836688) (xy -8.086047 1.841500) 21 | (xy -8.095969 1.937383) (xy -8.124449 1.947334) (xy -8.209015 1.877962) (xy -8.243930 1.799167) (xy -8.273410 1.718552) (xy -8.270085 1.800597) (xy -8.267835 1.820334) (xy -8.194579 1.954082) 22 | (xy -8.069153 1.970938) (xy -7.898116 2.012294) (xy -7.831153 2.140636) (xy -7.890598 2.294650) (xy -7.936029 2.336398) (xy -8.077218 2.429397) (xy -8.182479 2.426491) (xy -8.314434 2.314661) 23 | (xy -8.382000 2.243667) (xy -8.551694 2.098878) (xy -8.695971 2.032458) (xy -8.704550 2.032000) (xy -8.867245 2.099469) (xy -9.031693 2.259123) (xy -9.143094 2.446829) (xy -9.159490 2.564430) 24 | (xy -9.185489 2.675808) (xy -9.342652 2.709310) (xy -9.349458 2.709334) (xy -9.523033 2.667847) (xy -9.566037 2.561167) (xy -9.552054 2.463123) (xy -9.493273 2.523782) (xy -9.482666 2.540000) 25 | (xy -9.417053 2.617835) (xy -9.399570 2.537814) (xy -9.399296 2.518834) (xy -9.457485 2.393641) (xy -9.525000 2.370667) (xy -9.637315 2.305819) (xy -9.652000 2.249372) (xy -9.722513 2.128649) 26 | (xy -9.821333 2.074334) (xy -9.958225 1.996198) (xy -9.990666 1.936631) (xy -9.935286 1.895277) (xy -9.884833 1.914557) (xy -9.856051 1.906887) (xy -9.930182 1.804099) (xy -9.938482 1.794550) 27 | (xy -10.084584 1.679686) (xy -10.203178 1.666689) (xy -10.244666 1.745660) (xy -10.189976 1.751437) (xy -10.160000 1.735667) (xy -10.088271 1.755772) (xy -10.075333 1.820334) (xy -10.117891 1.910390) 28 | (xy -10.169071 1.899394) (xy -10.227906 1.905690) (xy -10.210207 2.007192) (xy -10.220863 2.202888) (xy -10.346453 2.351259) (xy -10.532605 2.408006) (xy -10.660957 2.374436) (xy -10.784021 2.305849) 29 | (xy -10.825664 2.239194) (xy -10.797973 2.113706) (xy -10.743767 1.958199) (xy -10.726638 1.862667) (xy -10.485298 1.862667) (xy -10.471993 1.982862) (xy -10.442593 1.968500) (xy -10.431411 1.795158) 30 | (xy -10.442593 1.756834) (xy -10.473496 1.746197) (xy -10.485298 1.862667) (xy -10.726638 1.862667) (xy -10.695970 1.691631) (xy -10.716302 1.651757) (xy -9.777880 1.651757) (xy -9.761738 1.775831) 31 | (xy -9.759424 1.784787) (xy -9.709213 1.898276) (xy -9.669969 1.874242) (xy -9.671380 1.862667) (xy -9.531047 1.862667) (xy -9.503130 2.000355) (xy -9.464524 2.032000) (xy -9.410432 1.960937) 32 | (xy -9.401325 1.888945) (xy -9.314643 1.888945) (xy -9.255125 1.977320) (xy -9.131785 2.011529) (xy -9.021172 1.916608) (xy -8.987694 1.824457) (xy -8.995235 1.755395) (xy -8.849261 1.755395) 33 | (xy -8.835951 1.820334) (xy -8.775856 1.931735) (xy -8.753941 1.947334) (xy -8.724344 1.878196) (xy -8.723357 1.862667) (xy -8.515047 1.862667) (xy -8.487130 2.000355) (xy -8.448524 2.032000) 34 | (xy -8.394432 1.960937) (xy -8.382000 1.862667) (xy -8.409917 1.724978) (xy -8.448524 1.693334) (xy -8.502616 1.764396) (xy -8.515047 1.862667) (xy -8.723357 1.862667) (xy -8.720666 1.820334) 35 | (xy -8.764975 1.707641) (xy -8.802676 1.693334) (xy -8.849261 1.755395) (xy -8.995235 1.755395) (xy -8.998925 1.721610) (xy -9.052575 1.731490) (xy -9.103245 1.842057) (xy -9.086795 1.889684) 36 | (xy -9.089457 1.926581) (xy -9.170081 1.873467) (xy -9.287623 1.824961) (xy -9.314643 1.888945) (xy -9.401325 1.888945) (xy -9.398000 1.862667) (xy -9.425917 1.724978) (xy -9.464524 1.693334) 37 | (xy -9.518616 1.764396) (xy -9.531047 1.862667) (xy -9.671380 1.862667) (xy -9.688666 1.720875) (xy -9.722404 1.673729) (xy -9.777880 1.651757) (xy -10.716302 1.651757) (xy -10.778269 1.530237) 38 | (xy -10.994210 1.470526) (xy -11.223023 1.486796) (xy -11.454440 1.510476) (xy -11.573813 1.479627) (xy -11.633899 1.378640) (xy -11.638773 1.363784) (xy -11.662009 1.192826) (xy -11.629897 1.078010) 39 | (xy -11.566723 1.058696) (xy -11.506012 1.148620) (xy -11.455703 1.261914) (xy -11.439129 1.212978) (xy -11.435951 1.138767) (xy -11.426298 1.100667) (xy -11.162631 1.100667) (xy -11.149326 1.220862) 40 | (xy -11.119927 1.206500) (xy -11.108744 1.033158) (xy -11.119927 0.994834) (xy -11.150829 0.984197) (xy -11.162631 1.100667) (xy -11.426298 1.100667) (xy -11.394120 0.973667) (xy -10.922000 0.973667) 41 | (xy -10.879666 1.016000) (xy -10.837333 0.973667) (xy -10.879666 0.931334) (xy -10.922000 0.973667) (xy -11.394120 0.973667) (xy -11.388140 0.950069) (xy -11.336923 0.872123) (xy -11.290101 0.739941) 42 | (xy -11.310807 0.570320) (xy -11.381642 0.444493) (xy -11.433048 0.423334) (xy -11.460470 0.381000) (xy -11.159494 0.381000) (xy -11.150343 0.525596) (xy -11.123838 0.538327) (xy -11.120464 0.530778) 43 | (xy -11.103715 0.362699) (xy -11.117327 0.276778) (xy -11.144277 0.242251) (xy -11.158936 0.354708) (xy -11.159494 0.381000) (xy -11.460470 0.381000) (xy -11.475201 0.358259) (xy -11.461689 0.275167) 44 | (xy -11.439815 0.180958) (xy -11.491653 0.236554) (xy -11.500227 0.248556) (xy -11.586002 0.326688) (xy -11.694205 0.281375) (xy -11.736133 0.248556) (xy -11.830422 0.188291) (xy -11.822855 0.231864) 45 | (xy -11.813898 0.301846) (xy -11.891269 0.286305) (xy -12.006345 0.172858) (xy -12.005041 0.012410) (xy -11.896207 -0.128064) (xy -11.832166 -0.160936) (xy -11.641510 -0.201508) (xy -11.537801 -0.192238) 46 | (xy -11.433039 -0.230989) (xy -11.357858 -0.338666) (xy -11.162631 -0.338666) (xy -11.149326 -0.218471) (xy -11.119927 -0.232833) (xy -11.108744 -0.406175) (xy -11.119927 -0.444500) (xy -11.150829 -0.455136) 47 | (xy -11.162631 -0.338666) (xy -11.357858 -0.338666) (xy -11.332986 -0.374288) (xy -11.281148 -0.533988) (xy -11.318135 -0.665405) (xy -11.463618 -0.837569) (xy -11.465606 -0.839645) (xy -11.612121 -1.014421) 48 | (xy -11.624884 -1.061769) (xy -11.500418 -1.061769) (xy -11.461370 -0.913002) (xy -11.402065 -0.846666) (xy -11.391852 -0.918314) (xy -11.413418 -1.079500) (xy -11.454841 -1.210869) (xy -11.493304 -1.206635) 49 | (xy -11.494330 -1.203707) (xy -11.500418 -1.061769) (xy -11.624884 -1.061769) (xy -11.646894 -1.143421) (xy -11.601765 -1.265456) (xy -11.531680 -1.366603) (xy -11.436407 -1.403584) (xy -11.274671 -1.376106) 50 | (xy -11.005194 -1.283877) (xy -10.943166 -1.260790) (xy -10.795426 -1.155449) (xy -10.752666 -1.054381) (xy -10.767007 -0.967900) (xy -10.836322 -1.004948) (xy -10.896087 -1.062658) (xy -11.009177 -1.157967) 51 | (xy -11.072924 -1.122800) (xy -11.109491 -1.047539) (xy -11.154752 -0.960491) (xy -11.152102 -1.026841) (xy -11.140141 -1.091696) (xy -11.130314 -1.224294) (xy -11.185655 -1.209389) (xy -11.191979 -1.203221) 52 | (xy -11.243574 -1.055167) (xy -11.228574 -0.969822) (xy -11.156808 -0.876497) (xy -11.055536 -0.925909) (xy -10.934507 -0.978524) (xy -10.879667 -0.931333) (xy -10.789996 -0.885510) (xy -10.702795 -0.937589) 53 | (xy -10.606237 -0.978865) (xy -10.578620 -0.912456) (xy -10.615232 -0.783151) (xy -10.711357 -0.635738) (xy -10.737503 -0.607830) (xy -10.839590 -0.406872) (xy -10.883806 -0.105009) (xy -10.870494 0.239650) 54 | (xy -10.799997 0.568999) (xy -10.729562 0.736629) (xy -10.635851 0.929746) (xy -10.589048 1.062581) (xy -10.596026 1.103952) (xy -10.663655 1.022678) (xy -10.668000 1.016000) (xy -10.728322 0.954217) 55 | (xy -10.750889 1.040412) (xy -10.752666 1.100667) (xy -10.766569 1.236675) (xy -10.813325 1.219804) (xy -10.837333 1.185334) (xy -10.905302 1.120243) (xy -10.920703 1.159170) (xy -10.871903 1.284340) 56 | (xy -10.769898 1.315912) (xy -10.708646 1.267270) (xy -10.615402 1.223840) (xy -10.546839 1.265154) (xy -10.429935 1.317161) (xy -10.392389 1.304834) (xy -10.295573 1.310846) (xy -10.140342 1.389929) 57 | (xy -9.932581 1.486572) (xy -9.647816 1.573660) (xy -9.527457 1.599834) (xy -9.212370 1.635058) (xy -8.948075 1.593380) (xy -8.759456 1.522481) (xy -8.532101 1.411867) (xy -8.376408 1.311926) 58 | (xy -8.346282 1.280705) (xy -8.233073 1.231095) (xy -8.153733 1.245753) (xy -8.060433 1.255493) (xy -8.072141 1.207217) (xy -8.070507 1.152994) (xy -7.958666 1.152994) (xy -7.915693 1.236263) 59 | (xy -7.872619 1.226813) (xy -7.828463 1.119979) (xy -7.844839 1.073650) (xy -7.834271 1.049330) (xy -7.729525 1.125996) (xy -7.719220 1.134956) (xy -7.588709 1.234815) (xy -7.568770 1.227667) 60 | (xy -7.450666 1.227667) (xy -7.408333 1.270000) (xy -7.366000 1.227667) (xy -7.408333 1.185334) (xy -7.450666 1.227667) (xy -7.568770 1.227667) (xy -7.539911 1.217322) (xy -7.535333 1.165181) 61 | (xy -7.605153 1.029368) (xy -7.633333 1.016000) (xy -7.450666 1.016000) (xy -7.419688 1.085690) (xy -7.394222 1.072445) (xy -7.384089 0.971965) (xy -7.394222 0.959556) (xy -7.444556 0.971178) 62 | (xy -7.450666 1.016000) (xy -7.633333 1.016000) (xy -7.756971 0.957350) (xy -7.881640 0.978389) (xy -7.951619 1.095721) (xy -7.958666 1.152994) (xy -8.070507 1.152994) (xy -8.068549 1.088029) 63 | (xy -8.001156 0.902577) (xy -7.902647 0.718725) (xy -7.805711 0.604338) (xy -7.776401 0.593202) (xy -7.739836 0.518409) (xy -7.738423 0.326276) (xy -7.745853 0.254000) (xy -7.535333 0.254000) 64 | (xy -7.504355 0.323690) (xy -7.478889 0.310445) (xy -7.468756 0.209965) (xy -7.478889 0.197556) (xy -7.529223 0.209178) (xy -7.535333 0.254000) (xy -7.745853 0.254000) (xy -7.765434 0.063540) 65 | (xy -7.814144 -0.223066) (xy -7.842055 -0.338666) (xy -7.606631 -0.338666) (xy -7.593326 -0.218471) (xy -7.563927 -0.232833) (xy -7.552744 -0.406175) (xy -7.563927 -0.444500) (xy -7.594829 -0.455136) 66 | (xy -7.606631 -0.338666) (xy -7.842055 -0.338666) (xy -7.877825 -0.486808) (xy -7.949750 -0.680951) (xy -7.963310 -0.705323) (xy -8.060420 -0.914651) (xy -8.054840 -0.936330) (xy -7.874000 -0.936330) 67 | (xy -7.812539 -0.850112) (xy -7.789333 -0.846666) (xy -7.706868 -0.875553) (xy -7.704666 -0.884003) (xy -7.747613 -0.936330) (xy -7.535333 -0.936330) (xy -7.473873 -0.850112) (xy -7.450666 -0.846666) 68 | (xy -7.368201 -0.875553) (xy -7.366000 -0.884003) (xy -7.425329 -0.956289) (xy -7.450666 -0.973666) (xy -7.528685 -0.966954) (xy -7.535333 -0.936330) (xy -7.747613 -0.936330) (xy -7.763995 -0.956289) 69 | (xy -7.789333 -0.973666) (xy -7.867352 -0.966954) (xy -7.874000 -0.936330) (xy -8.054840 -0.936330) (xy -8.032653 -1.022516) (xy -8.029732 -1.024406) (xy -7.983133 -1.125208) (xy -8.042260 -1.233750) 70 | (xy -8.137993 -1.270000) (xy -8.184234 -1.217994) (xy -8.171062 -1.186513) (xy -8.210004 -1.170405) (xy -8.364728 -1.216801) (xy -8.525899 -1.282782) (xy -9.032575 -1.433577) (xy -9.535854 -1.449251) 71 | (xy -9.989081 -1.328633) (xy -10.007577 -1.319970) (xy -10.228048 -1.239667) (xy -10.393885 -1.223136) (xy -10.422825 -1.233121) (xy -10.485156 -1.247369) (xy -10.464418 -1.198415) (xy -10.459177 -1.117583) 72 | (xy -10.548520 -1.105009) (xy -10.674122 -1.156202) (xy -10.746411 -1.220129) (xy -10.801437 -1.338640) (xy -10.748805 -1.399387) (xy -10.688591 -1.530797) (xy -10.711784 -1.693333) (xy -10.583333 -1.693333) 73 | (xy -10.552355 -1.623643) (xy -10.526889 -1.636889) (xy -10.521197 -1.693333) (xy -10.244666 -1.693333) (xy -10.213688 -1.623643) (xy -10.188222 -1.636889) (xy -10.185710 -1.661800) (xy -9.566037 -1.661800) 74 | (xy -9.531257 -1.636203) (xy -9.525552 -1.642992) (xy -8.495947 -1.642992) (xy -8.458740 -1.608666) (xy -8.396367 -1.679649) (xy -8.382000 -1.778000) (xy -8.297333 -1.778000) (xy -8.266355 -1.708310) 75 | (xy -8.240889 -1.721555) (xy -8.230756 -1.822035) (xy -8.240889 -1.834444) (xy -8.291223 -1.822822) (xy -8.297333 -1.778000) (xy -8.382000 -1.778000) (xy -8.395657 -1.915822) (xy -8.414458 -1.947333) 76 | (xy -8.458933 -1.877523) (xy -8.491199 -1.778000) (xy -8.495947 -1.642992) (xy -9.525552 -1.642992) (xy -9.487823 -1.687889) (xy -9.382777 -1.761918) (xy -9.298619 -1.722370) (xy -9.148003 -1.662103) 77 | (xy -8.955295 -1.645427) (xy -8.789685 -1.670750) (xy -8.720356 -1.735666) (xy -8.779946 -1.817934) (xy -8.798278 -1.820333) (xy -8.927414 -1.872891) (xy -8.938654 -1.883099) (xy -9.045344 -1.889252) 78 | (xy -9.128812 -1.840765) (xy -9.239269 -1.778678) (xy -9.293002 -1.845034) (xy -9.353526 -1.910321) (xy -9.448567 -1.855833) (xy -9.550228 -1.723810) (xy -9.566037 -1.661800) (xy -10.185710 -1.661800) 79 | (xy -10.178089 -1.737368) (xy -10.188222 -1.749778) (xy -10.238556 -1.738155) (xy -10.244666 -1.693333) (xy -10.521197 -1.693333) (xy -10.516756 -1.737368) (xy -10.526889 -1.749778) (xy -10.577223 -1.738155) 80 | (xy -10.583333 -1.693333) (xy -10.711784 -1.693333) (xy -10.722929 -1.771427) (xy -10.770500 -1.905000) (xy -10.583333 -1.905000) (xy -10.541000 -1.862666) (xy -10.414000 -1.862666) (xy -10.383022 -1.792976) 81 | (xy -10.357555 -1.806222) (xy -10.347594 -1.905000) (xy -10.244666 -1.905000) (xy -10.202333 -1.862666) (xy -10.160000 -1.905000) (xy -10.202333 -1.947333) (xy -10.244666 -1.905000) (xy -10.347594 -1.905000) 82 | (xy -10.347422 -1.906702) (xy -10.357555 -1.919111) (xy -10.407890 -1.907489) (xy -10.414000 -1.862666) (xy -10.541000 -1.862666) (xy -10.498666 -1.905000) (xy -10.541000 -1.947333) (xy -10.583333 -1.905000) 83 | (xy -10.770500 -1.905000) (xy -10.792415 -1.966532) (xy -10.793283 -2.099124) (xy -10.648756 -2.206123) (xy -10.636460 -2.211821) (xy -10.467247 -2.264289) (xy -10.342069 -2.208032) (xy -10.249974 -2.107955) 84 | (xy -10.125997 -1.923922) (xy -10.071466 -1.778000) (xy -10.049137 -1.707285) (xy -10.019260 -1.756833) (xy -9.923948 -1.856746) (xy -9.822031 -1.807613) (xy -9.797360 -1.756833) (xy -9.777150 -1.732277) 85 | (xy -9.783225 -1.799166) (xy -9.767038 -1.923798) (xy -9.729741 -1.947333) (xy -9.670689 -2.022186) (xy -9.614213 -2.209552) (xy -9.599125 -2.290510) (xy -9.598909 -2.291512) (xy -9.461908 -2.291512) 86 | (xy -9.450327 -2.286000) (xy -9.373061 -2.345603) (xy -9.355666 -2.370666) (xy -9.334092 -2.449821) (xy -9.345673 -2.455333) (xy -9.422938 -2.395730) (xy -9.440333 -2.370666) (xy -9.461908 -2.291512) 87 | (xy -9.598909 -2.291512) (xy -9.551965 -2.508732) (xy -9.480699 -2.600984) (xy -9.348880 -2.610182) (xy -9.329487 -2.608010) )(layer F.SilkS) (width 0.010000) 88 | ) 89 | (fp_poly (pts (xy -1.363450 0.271332) (xy -1.048534 0.442049) (xy -0.831965 0.704804) (xy -0.774600 0.860970) (xy -0.819535 0.900582) (xy -0.947375 0.824831) (xy -1.089811 0.688954) (xy -1.382192 0.474264) 90 | (xy -1.689933 0.408041) (xy -1.982070 0.475876) (xy -2.227643 0.663361) (xy -2.395688 0.956087) (xy -2.455333 1.324396) (xy -2.405008 1.756188) (xy -2.250900 2.056220) (xy -1.988310 2.230050) 91 | (xy -1.644592 2.283307) (xy -1.324918 2.223277) (xy -1.078767 2.058591) (xy -0.944829 1.820401) (xy -0.931333 1.709043) (xy -0.955127 1.588936) (xy -1.057245 1.535658) (xy -1.270000 1.524000) 92 | (xy -1.482074 1.505222) (xy -1.600031 1.458312) (xy -1.608666 1.439334) (xy -1.532115 1.392967) (xy -1.334642 1.362214) (xy -1.143000 1.354667) (xy -0.677333 1.354667) (xy -0.677333 1.905000) 93 | (xy -0.689296 2.192582) (xy -0.720985 2.389476) (xy -0.762000 2.455334) (xy -0.829078 2.383881) (xy -0.846666 2.272878) (xy -0.857536 2.148265) (xy -0.918923 2.159708) (xy -1.004333 2.233109) 94 | (xy -1.290299 2.397895) (xy -1.651568 2.477291) (xy -1.882849 2.473167) (xy -2.198613 2.357247) (xy -2.441903 2.120718) (xy -2.603720 1.799959) (xy -2.675065 1.431348) (xy -2.646938 1.051262) 95 | (xy -2.510341 0.696080) (xy -2.369342 0.506582) (xy -2.069723 0.297684) (xy -1.719135 0.221239) (xy -1.363450 0.271332) )(layer F.SilkS) (width 0.010000) 96 | ) 97 | (fp_poly (pts (xy 11.404498 0.302474) (xy 11.705248 0.504929) (xy 11.797400 0.612448) (xy 11.912264 0.805433) (xy 11.909490 0.891981) (xy 11.809451 0.863764) (xy 11.632524 0.712457) (xy 11.610189 0.688954) 98 | (xy 11.395912 0.503940) (xy 11.171932 0.431889) (xy 11.036198 0.426026) (xy 10.672862 0.493517) (xy 10.420282 0.689082) (xy 10.278440 1.012742) (xy 10.244667 1.354667) (xy 10.298737 1.776647) 99 | (xy 10.462408 2.070228) (xy 10.737868 2.237917) (xy 11.055408 2.283307) (xy 11.375082 2.223277) (xy 11.621233 2.058591) (xy 11.755171 1.820401) (xy 11.768667 1.709043) (xy 11.744873 1.588936) 100 | (xy 11.642755 1.535658) (xy 11.430000 1.524000) (xy 11.217926 1.505222) (xy 11.099969 1.458312) (xy 11.091334 1.439334) (xy 11.167885 1.392967) (xy 11.365358 1.362214) (xy 11.557000 1.354667) 101 | (xy 12.022667 1.354667) (xy 12.022667 1.857670) (xy 12.009439 2.134981) (xy 11.975153 2.338701) (xy 11.938000 2.413000) (xy 11.872862 2.385467) (xy 11.853334 2.277875) (xy 11.842528 2.149546) 102 | (xy 11.781343 2.159588) (xy 11.695667 2.233109) (xy 11.409701 2.397895) (xy 11.048432 2.477291) (xy 10.817151 2.473167) (xy 10.510723 2.355771) (xy 10.258637 2.110327) (xy 10.082582 1.774941) 103 | (xy 10.004247 1.387722) (xy 10.023925 1.079500) (xy 10.164551 0.716877) (xy 10.408641 0.448457) (xy 10.720475 0.283644) (xy 11.064334 0.231848) (xy 11.404498 0.302474) )(layer F.SilkS) (width 0.010000) 104 | ) 105 | (fp_poly (pts (xy -5.222881 0.262881) (xy -4.962429 0.287464) (xy -4.834440 0.324661) (xy -4.826000 0.338667) (xy -4.904792 0.381328) (xy -5.118078 0.411063) (xy -5.431222 0.423254) (xy -5.461000 0.423334) 106 | (xy -6.096000 0.423334) (xy -6.096000 1.270000) (xy -5.503333 1.270000) (xy -5.199309 1.281187) (xy -4.989232 1.311171) (xy -4.910667 1.354585) (xy -4.910666 1.354667) (xy -4.988976 1.398099) 107 | (xy -5.198862 1.428110) (xy -5.502758 1.439333) (xy -5.503333 1.439334) (xy -6.096000 1.439334) (xy -6.096000 2.286000) (xy -5.461000 2.286000) (xy -5.141040 2.296506) (xy -4.918026 2.324944) 108 | (xy -4.826594 2.366696) (xy -4.826000 2.370667) (xy -4.905926 2.411236) (xy -5.127175 2.440175) (xy -5.461950 2.454396) (xy -5.588000 2.455334) (xy -6.350000 2.455334) (xy -6.350000 0.254000) 109 | (xy -5.588000 0.254000) (xy -5.222881 0.262881) )(layer F.SilkS) (width 0.010000) 110 | ) 111 | (fp_poly (pts (xy -2.951048 0.280361) (xy -2.915518 0.375843) (xy -2.893452 0.565047) (xy -2.882092 0.872573) (xy -2.878679 1.323021) (xy -2.878666 1.360875) (xy -2.883965 1.861263) (xy -2.907649 2.203531) 112 | (xy -2.961401 2.390103) (xy -3.056905 2.423405) (xy -3.205843 2.305862) (xy -3.419899 2.039898) (xy -3.710754 1.627940) (xy -3.767444 1.545364) (xy -4.360333 0.679961) (xy -4.384364 1.567647) 113 | (xy -4.399917 1.977172) (xy -4.422966 2.243547) (xy -4.457875 2.392925) (xy -4.509011 2.451461) (xy -4.532531 2.455334) (xy -4.584411 2.428907) (xy -4.619984 2.333188) (xy -4.642028 2.143519) 114 | (xy -4.653326 1.835243) (xy -4.656659 1.383703) (xy -4.656666 1.354667) (xy -4.653748 0.895338) (xy -4.643110 0.580447) (xy -4.621926 0.385170) (xy -4.587369 0.284684) (xy -4.536615 0.254164) 115 | (xy -4.531371 0.254000) (xy -4.438523 0.320324) (xy -4.274769 0.501533) (xy -4.062174 0.770982) (xy -3.822800 1.102026) (xy -3.790538 1.148671) (xy -3.175000 2.043342) (xy -3.150969 1.148671) 116 | (xy -3.135510 0.737350) (xy -3.112662 0.469247) (xy -3.078105 0.318271) (xy -3.027519 0.258334) (xy -3.002802 0.254000) (xy -2.951048 0.280361) )(layer F.SilkS) (width 0.010000) 117 | ) 118 | (fp_poly (pts (xy -0.269155 0.345604) (xy -0.236560 0.530830) (xy -0.217983 0.848511) (xy -0.211692 1.316314) (xy -0.211666 1.354667) (xy -0.217172 1.833506) (xy -0.234844 2.161000) (xy -0.266414 2.354817) 119 | (xy -0.313614 2.432624) (xy -0.317500 2.434167) (xy -0.362559 2.409182) (xy -0.393700 2.286039) (xy -0.412846 2.045115) (xy -0.421921 1.666788) (xy -0.423333 1.354667) (xy -0.419535 0.881310) 120 | (xy -0.406859 0.557521) (xy -0.383381 0.363676) (xy -0.347176 0.280155) (xy -0.317500 0.275167) (xy -0.269155 0.345604) )(layer F.SilkS) (width 0.010000) 121 | ) 122 | (fp_poly (pts (xy 1.788560 0.278530) (xy 1.824812 0.368817) (xy 1.847314 0.549909) (xy 1.858954 0.846853) (xy 1.862624 1.284697) (xy 1.862667 1.354667) (xy 1.859564 1.816057) (xy 1.848459 2.132507) 123 | (xy 1.826658 2.328329) (xy 1.791466 2.427834) (xy 1.740697 2.455334) (xy 1.649334 2.388981) (xy 1.486865 2.207625) (xy 1.275112 1.937818) (xy 1.035898 1.606112) (xy 0.999863 1.553922) 124 | (xy 0.381000 0.652510) (xy 0.356969 1.553922) (xy 0.338938 1.948844) (xy 0.310197 2.247250) (xy 0.274062 2.421589) (xy 0.248479 2.455334) (xy 0.145391 2.388503) (xy 0.121420 2.344323) 125 | (xy 0.106420 2.218954) (xy 0.098110 1.963178) (xy 0.097154 1.615816) (xy 0.102911 1.265837) (xy 0.117689 0.834157) (xy 0.139194 0.545638) (xy 0.171426 0.374128) (xy 0.218384 0.293478) 126 | (xy 0.254000 0.278018) (xy 0.355987 0.338683) (xy 0.531010 0.530157) (xy 0.766350 0.837236) (xy 0.994834 1.163774) (xy 1.608667 2.069873) (xy 1.608667 1.161937) (xy 1.612437 0.751061) 127 | (xy 1.626276 0.482292) (xy 1.653977 0.328519) (xy 1.699330 0.262631) (xy 1.735667 0.254000) (xy 1.788560 0.278530) )(layer F.SilkS) (width 0.010000) 128 | ) 129 | (fp_poly (pts (xy 3.248171 0.263404) (xy 3.511807 0.288458) (xy 3.664020 0.324428) (xy 3.683000 0.338667) (xy 3.633220 0.383681) (xy 3.427148 0.412440) (xy 3.077196 0.423288) (xy 3.048358 0.423334) 130 | (xy 2.361389 0.423334) (xy 2.387195 0.825500) (xy 2.413000 1.227667) (xy 3.029505 1.252597) (xy 3.375094 1.280470) (xy 3.556938 1.322735) (xy 3.578855 1.369372) (xy 3.444665 1.410360) 131 | (xy 3.158185 1.435680) (xy 2.958337 1.439334) (xy 2.370667 1.439334) (xy 2.370667 2.286000) (xy 3.048000 2.286000) (xy 3.383432 2.295902) (xy 3.619147 2.322936) (xy 3.723076 2.363093) 132 | (xy 3.725334 2.370667) (xy 3.645407 2.411236) (xy 3.424159 2.440175) (xy 3.089383 2.454396) (xy 2.963334 2.455334) (xy 2.201334 2.455334) (xy 2.201334 0.254000) (xy 2.916003 0.254000) 133 | (xy 3.248171 0.263404) )(layer F.SilkS) (width 0.010000) 134 | ) 135 | (fp_poly (pts (xy 5.021786 0.262881) (xy 5.282237 0.287464) (xy 5.410226 0.324661) (xy 5.418667 0.338667) (xy 5.339407 0.380518) (xy 5.122833 0.409953) (xy 4.800750 0.423023) (xy 4.736695 0.423334) 136 | (xy 4.054722 0.423334) (xy 4.080528 0.825500) (xy 4.106334 1.227667) (xy 4.722838 1.252597) (xy 5.068427 1.280470) (xy 5.250271 1.322735) (xy 5.272189 1.369372) (xy 5.137998 1.410360) 137 | (xy 4.851518 1.435680) (xy 4.651670 1.439334) (xy 4.064000 1.439334) (xy 4.064000 2.286000) (xy 4.741334 2.286000) (xy 5.076766 2.295902) (xy 5.312480 2.322936) (xy 5.416409 2.363093) 138 | (xy 5.418667 2.370667) (xy 5.338741 2.411236) (xy 5.117492 2.440175) (xy 4.782717 2.454396) (xy 4.656667 2.455334) (xy 3.894667 2.455334) (xy 3.894667 0.254000) (xy 4.656667 0.254000) 139 | (xy 5.021786 0.262881) )(layer F.SilkS) (width 0.010000) 140 | ) 141 | (fp_poly (pts (xy 6.565344 0.260059) (xy 6.784379 0.286603) (xy 6.933641 0.346185) (xy 7.062818 0.451355) (xy 7.081624 0.469928) (xy 7.234902 0.724594) (xy 7.226616 1.003792) (xy 7.064801 1.274755) 142 | (xy 6.989222 1.400215) (xy 7.049923 1.516285) (xy 7.061487 1.528755) (xy 7.145269 1.682930) (xy 7.202332 1.906662) (xy 7.227827 2.145438) (xy 7.216902 2.344745) (xy 7.164709 2.450070) 143 | (xy 7.143933 2.455334) (xy 7.059649 2.383173) (xy 7.027802 2.160080) (xy 7.027334 2.116667) (xy 6.977521 1.781018) (xy 6.820074 1.567167) (xy 6.542976 1.465037) (xy 6.239890 1.456224) 144 | (xy 5.799667 1.481667) (xy 5.774275 1.968500) (xy 5.747944 2.230106) (xy 5.705873 2.406823) (xy 5.668442 2.455334) (xy 5.636511 2.375002) (xy 5.611205 2.151212) (xy 5.594411 1.809774) 145 | (xy 5.588013 1.376497) (xy 5.588000 1.354667) (xy 5.588000 0.423334) (xy 5.757334 0.423334) (xy 5.757334 1.270000) (xy 6.290734 1.270000) (xy 6.597237 1.254335) (xy 6.829835 1.213032) 146 | (xy 6.925734 1.168400) (xy 7.017689 0.971193) (xy 6.998101 0.732715) (xy 6.894286 0.556381) (xy 6.710406 0.464790) (xy 6.385505 0.425459) (xy 6.259286 0.423334) (xy 5.757334 0.423334) 147 | (xy 5.588000 0.423334) (xy 5.588000 0.254000) (xy 6.226849 0.254000) (xy 6.565344 0.260059) )(layer F.SilkS) (width 0.010000) 148 | ) 149 | (fp_poly (pts (xy 7.656210 0.335667) (xy 7.683269 0.569026) (xy 7.699835 0.936616) (xy 7.704667 1.354667) (xy 7.698385 1.825392) (xy 7.680434 2.177164) (xy 7.652158 2.392523) (xy 7.620000 2.455334) 150 | (xy 7.583791 2.373667) (xy 7.556731 2.140308) (xy 7.540165 1.772717) (xy 7.535334 1.354667) (xy 7.541616 0.883942) (xy 7.559566 0.532170) (xy 7.587842 0.316811) (xy 7.620000 0.254000) 151 | (xy 7.656210 0.335667) )(layer F.SilkS) (width 0.010000) 152 | ) 153 | (fp_poly (pts (xy 9.748952 0.280361) (xy 9.784482 0.375843) (xy 9.806548 0.565047) (xy 9.817908 0.872573) (xy 9.821321 1.323021) (xy 9.821334 1.360875) (xy 9.816035 1.861263) (xy 9.792351 2.203531) 154 | (xy 9.738599 2.390103) (xy 9.643095 2.423405) (xy 9.494157 2.305862) (xy 9.280101 2.039898) (xy 8.989246 1.627940) (xy 8.932556 1.545364) (xy 8.339667 0.679961) (xy 8.315636 1.567647) 155 | (xy 8.300083 1.977172) (xy 8.277034 2.243547) (xy 8.242125 2.392925) (xy 8.190989 2.451461) (xy 8.167469 2.455334) (xy 8.115589 2.428907) (xy 8.080016 2.333188) (xy 8.057972 2.143519) 156 | (xy 8.046674 1.835243) (xy 8.043341 1.383703) (xy 8.043334 1.354667) (xy 8.046387 0.893839) (xy 8.057368 0.577812) (xy 8.079005 0.382132) (xy 8.114026 0.282348) (xy 8.165159 0.254007) 157 | (xy 8.166153 0.254000) (xy 8.258040 0.320276) (xy 8.421117 0.501385) (xy 8.633426 0.770747) (xy 8.873012 1.101782) (xy 8.906986 1.150818) (xy 9.525000 2.047635) (xy 9.549031 1.150818) 158 | (xy 9.564462 0.738946) (xy 9.587249 0.470312) (xy 9.621698 0.318846) (xy 9.672118 0.258480) (xy 9.697198 0.254000) (xy 9.748952 0.280361) )(layer F.SilkS) (width 0.010000) 159 | ) 160 | (fp_poly (pts (xy -10.414000 1.227667) (xy -10.456333 1.270000) (xy -10.498666 1.227667) (xy -10.456333 1.185334) (xy -10.414000 1.227667) )(layer F.SilkS) (width 0.010000) 161 | ) 162 | (fp_poly (pts (xy -7.112000 0.296334) (xy -7.154333 0.338667) (xy -7.196666 0.296334) (xy -7.154333 0.254000) (xy -7.112000 0.296334) )(layer F.SilkS) (width 0.010000) 163 | ) 164 | (fp_poly (pts (xy -5.080000 -1.403145) (xy -5.081610 -0.985072) (xy -5.090914 -0.701962) (xy -5.114617 -0.519446) (xy -5.159429 -0.403158) (xy -5.232057 -0.318729) (xy -5.303085 -0.260145) (xy -5.622487 -0.110874) 165 | (xy -5.987527 -0.117562) (xy -6.153965 -0.169924) (xy -6.376697 -0.343229) (xy -6.503632 -0.614437) (xy -6.519333 -0.756434) (xy -6.462200 -0.899840) (xy -6.329674 -0.944018) (xy -6.180067 -0.893647) 166 | (xy -6.071690 -0.753408) (xy -6.061232 -0.719666) (xy -5.964023 -0.549432) (xy -5.807928 -0.508000) (xy -5.683682 -0.530743) (xy -5.598057 -0.615693) (xy -5.544267 -0.787933) (xy -5.515529 -1.072546) 167 | (xy -5.505057 -1.494616) (xy -5.504489 -1.629833) (xy -5.502117 -1.984483) (xy -5.490025 -2.202846) (xy -5.458721 -2.317966) (xy -5.398710 -2.362889) (xy -5.300501 -2.370660) (xy -5.291666 -2.370666) 168 | (xy -5.080000 -2.370666) (xy -5.080000 -1.403145) )(layer F.SilkS) (width 0.010000) 169 | ) 170 | (fp_poly (pts (xy -4.027855 -2.354453) (xy -3.663152 -2.323084) (xy -3.371271 -2.274697) (xy -3.196546 -2.217043) (xy -3.181188 -2.206469) (xy -3.083449 -2.034623) (xy -3.051052 -1.790264) (xy -3.087825 -1.558645) 171 | (xy -3.147599 -1.458267) (xy -3.194103 -1.350180) (xy -3.110273 -1.207839) (xy -3.091155 -1.186241) (xy -2.957573 -0.932188) (xy -2.947515 -0.647068) (xy -3.058207 -0.395819) (xy -3.127935 -0.325473) 172 | (xy -3.267494 -0.243319) (xy -3.463659 -0.194880) (xy -3.758459 -0.172889) (xy -4.031046 -0.169333) (xy -4.741333 -0.169333) (xy -4.741333 -0.915098) (xy -4.264724 -0.915098) (xy -4.261016 -0.825506) 173 | (xy -4.249167 -0.629408) (xy -4.240254 -0.526282) (xy -4.239850 -0.524298) (xy -4.155951 -0.493388) (xy -3.973606 -0.507092) (xy -3.753685 -0.552654) (xy -3.557060 -0.617317) (xy -3.444602 -0.688322) 174 | (xy -3.442532 -0.691403) (xy -3.404480 -0.867651) (xy -3.512574 -1.005724) (xy -3.744755 -1.086957) (xy -3.926200 -1.100673) (xy -4.147048 -1.092650) (xy -4.244567 -1.043384) (xy -4.264724 -0.915098) 175 | (xy -4.741333 -0.915098) (xy -4.741333 -1.562621) (xy -4.268538 -1.562621) (xy -4.249434 -1.483656) (xy -4.110199 -1.438809) (xy -3.893547 -1.445226) (xy -3.680114 -1.493406) (xy -3.556895 -1.565255) 176 | (xy -3.479524 -1.740293) (xy -3.554214 -1.871489) (xy -3.765684 -1.940892) (xy -3.882139 -1.947333) (xy -4.103431 -1.931816) (xy -4.210596 -1.864982) (xy -4.253675 -1.737656) (xy -4.268538 -1.562621) 177 | (xy -4.741333 -1.562621) (xy -4.741333 -2.391901) (xy -4.027855 -2.354453) )(layer F.SilkS) (width 0.010000) 178 | ) 179 | (fp_poly (pts (xy -1.991986 -2.358188) (xy -1.620143 -2.335923) (xy -1.374654 -2.299721) (xy -1.212580 -2.239367) (xy -1.090985 -2.144645) (xy -1.089937 -2.143599) (xy -0.955677 -1.920688) (xy -0.914227 -1.656175) 180 | (xy -0.967657 -1.416375) (xy -1.063526 -1.298066) (xy -1.159461 -1.205834) (xy -1.123969 -1.114725) (xy -1.068661 -1.056566) (xy -0.965466 -0.870938) (xy -0.931333 -0.678210) (xy -0.913670 -0.450706) 181 | (xy -0.879941 -0.303258) (xy -0.880450 -0.208202) (xy -1.003598 -0.171885) (xy -1.091608 -0.169333) (xy -1.269474 -0.185517) (xy -1.341465 -0.268702) (xy -1.354666 -0.459619) (xy -1.415288 -0.764527) 182 | (xy -1.596298 -0.950382) (xy -1.896413 -1.015900) (xy -1.911047 -1.016000) (xy -2.201333 -1.016000) (xy -2.201333 -0.592666) (xy -2.206882 -0.342064) (xy -2.241003 -0.217097) (xy -2.329902 -0.174087) 183 | (xy -2.455333 -0.169333) (xy -2.709333 -0.169333) (xy -2.709333 -1.651000) (xy -2.201333 -1.651000) (xy -2.190462 -1.459220) (xy -2.124817 -1.375501) (xy -1.954848 -1.355118) (xy -1.873033 -1.354666) 184 | (xy -1.629166 -1.385222) (xy -1.458770 -1.461488) (xy -1.442705 -1.477604) (xy -1.382661 -1.653033) (xy -1.395710 -1.773937) (xy -1.465441 -1.886102) (xy -1.612755 -1.937137) (xy -1.826039 -1.947333) 185 | (xy -2.057865 -1.940711) (xy -2.166792 -1.896403) (xy -2.199249 -1.777748) (xy -2.201333 -1.651000) (xy -2.709333 -1.651000) (xy -2.709333 -2.388043) (xy -1.991986 -2.358188) )(layer F.SilkS) (width 0.010000) 186 | ) 187 | (fp_poly (pts (xy -9.059333 -1.735666) (xy -9.101666 -1.693333) (xy -9.144000 -1.735666) (xy -9.101666 -1.778000) (xy -9.059333 -1.735666) )(layer F.SilkS) (width 0.010000) 188 | ) 189 | (fp_poly (pts (xy -8.720666 -1.735666) (xy -8.763000 -1.693333) (xy -8.805333 -1.735666) (xy -8.763000 -1.778000) (xy -8.720666 -1.735666) )(layer F.SilkS) (width 0.010000) 190 | ) 191 | ) 192 | -------------------------------------------------------------------------------- /pcb/kicad/WS2812B.pretty/jbr_logo.kicad_mod: -------------------------------------------------------------------------------- 1 | (module LOGO (layer F.Cu) 2 | (at 0 0) 3 | (fp_text reference "G***" (at 0 0) (layer F.SilkS) hide 4 | (effects (font (thickness 0.3))) 5 | ) 6 | (fp_text value "LOGO" (at 0.75 0) (layer F.SilkS) hide 7 | (effects (font (thickness 0.3))) 8 | ) 9 | (fp_poly (pts (xy -9.210193 -2.610951) (xy -9.128895 -2.542285) (xy -9.068601 -2.377388) (xy -9.022458 -2.180166) (xy -8.954345 -2.012400) (xy -8.812082 -1.951937) (xy -8.709179 -1.947333) (xy -8.529854 -1.930046) 10 | (xy -8.478276 -1.857551) (xy -8.491199 -1.778000) (xy -8.491820 -1.643202) (xy -8.448157 -1.608666) (xy -8.398539 -1.680610) (xy -8.407415 -1.817427) (xy -8.284645 -1.817427) (xy -8.279077 -1.732928) 11 | (xy -8.194621 -1.638059) (xy -8.119665 -1.608666) (xy -8.097540 -1.657305) (xy -8.145828 -1.727127) (xy -8.249149 -1.812720) (xy -8.284645 -1.817427) (xy -8.407415 -1.817427) (xy -8.409735 -1.853177) 12 | (xy -8.404499 -2.096029) (xy -8.309712 -2.232464) (xy -8.181238 -2.320345) (xy -8.059362 -2.292338) (xy -7.978606 -2.239636) (xy -7.869052 -2.109091) (xy -7.848481 -1.973781) (xy -7.911351 -1.890623) 13 | (xy -8.011925 -1.897477) (xy -8.114100 -1.893471) (xy -8.128000 -1.860009) (xy -8.063490 -1.780364) (xy -8.043333 -1.778000) (xy -7.973861 -1.707311) (xy -7.958666 -1.613663) (xy -7.919119 -1.451125) 14 | (xy -7.872619 -1.396146) (xy -7.815237 -1.308117) (xy -7.822200 -1.285316) (xy -7.779863 -1.241317) (xy -7.662333 -1.227666) (xy -7.525736 -1.248086) (xy -7.502314 -1.285071) (xy -7.462159 -1.350715) 15 | (xy -7.352514 -1.401280) (xy -7.159074 -1.399511) (xy -7.053810 -1.304966) (xy -6.972091 -1.138403) (xy -6.989484 -1.030096) (xy -7.058907 -1.014094) (xy -7.138078 -0.953402) (xy -7.253071 -0.788320) 16 | (xy -7.296258 -0.712040) (xy -7.393348 -0.472252) (xy -7.363785 -0.326598) (xy -7.201058 -0.249884) (xy -7.175500 -0.244713) (xy -7.037800 -0.214255) (xy -7.027333 -0.211666) (xy -6.869131 -0.185394) 17 | (xy -6.815666 -0.179916) (xy -6.714715 -0.096002) (xy -6.688666 0.047330) (xy -6.713517 0.190662) (xy -6.766102 0.216136) (xy -6.860867 0.233920) (xy -6.886656 0.274639) (xy -6.944197 0.329624) 18 | (xy -7.017362 0.254708) (xy -7.106374 0.172634) (xy -7.206195 0.237331) (xy -7.214308 0.245962) (xy -7.279035 0.326155) (xy -7.216038 0.303200) (xy -7.196666 0.292502) (xy -7.114832 0.256413) 19 | (xy -7.149974 0.319677) (xy -7.185867 0.364748) (xy -7.340392 0.485121) (xy -7.439867 0.514684) (xy -7.515018 0.535920) (xy -7.471833 0.564073) (xy -7.373429 0.675802) (xy -7.366000 0.720577) 20 | (xy -7.304521 0.846280) (xy -7.154703 1.000232) (xy -7.136689 1.014753) (xy -6.982090 1.193174) (xy -6.983015 1.341018) (xy -7.125866 1.436175) (xy -7.397045 1.456535) (xy -7.407870 1.455690) 21 | (xy -7.712220 1.480399) (xy -7.872588 1.565055) (xy -8.034891 1.661995) (xy -8.138570 1.675699) (xy -8.234745 1.723081) (xy -8.255000 1.813278) (xy -8.206941 1.957842) (xy -8.147050 1.997428) 22 | (xy -8.097848 1.993902) (xy -8.125883 1.976261) (xy -8.198448 1.865248) (xy -8.205982 1.792111) (xy -8.184562 1.715354) (xy -8.156593 1.756834) (xy -8.044833 1.854005) (xy -7.993944 1.862667) 23 | (xy -7.885822 1.906852) (xy -7.874000 1.940409) (xy -7.846068 2.084832) (xy -7.828395 2.136995) (xy -7.861362 2.260695) (xy -7.988588 2.349606) (xy -8.151253 2.395873) (xy -8.285779 2.336291) 24 | (xy -8.387618 2.237687) (xy -8.597992 2.068470) (xy -8.786242 2.057953) (xy -8.988785 2.205948) (xy -9.015837 2.234411) (xy -9.142204 2.421703) (xy -9.127172 2.573077) (xy -9.102456 2.668526) 25 | (xy -9.197468 2.705468) (xy -9.309126 2.709334) (xy -9.501403 2.680298) (xy -9.565418 2.580512) (xy -9.566037 2.561167) (xy -9.552054 2.463123) (xy -9.493273 2.523782) (xy -9.482666 2.540000) 26 | (xy -9.414612 2.605567) (xy -9.399296 2.565529) (xy -9.456096 2.430124) (xy -9.592559 2.256937) (xy -9.754071 2.104807) (xy -9.886015 2.032572) (xy -9.894542 2.032000) (xy -9.985793 1.977229) 27 | (xy -9.990666 1.952195) (xy -9.922047 1.901360) (xy -9.821333 1.905000) (xy -9.685733 1.877406) (xy -9.652300 1.769879) (xy -9.739390 1.649626) (xy -9.749748 1.642915) (xy -9.807685 1.632936) 28 | (xy -9.787085 1.680252) (xy -9.785155 1.759921) (xy -9.878788 1.772983) (xy -10.007780 1.719238) (xy -10.053663 1.681137) (xy -10.117255 1.646212) (xy -10.112982 1.751822) (xy -10.105585 1.786971) 29 | (xy -10.085753 1.917392) (xy -10.125354 1.900741) (xy -10.155227 1.862667) (xy -10.216365 1.800561) (xy -10.215640 1.878623) (xy -10.200109 1.951038) (xy -10.209845 2.179014) (xy -10.325092 2.342356) 30 | (xy -10.503319 2.403735) (xy -10.660892 2.355457) (xy -10.785964 2.219598) (xy -10.790073 2.116841) (xy -10.705632 1.820334) (xy -10.482161 1.820334) (xy -10.473009 1.964929) (xy -10.446505 1.977660) 31 | (xy -10.443131 1.970112) (xy -10.426382 1.802032) (xy -10.439993 1.716112) (xy -10.466944 1.681584) (xy -10.481602 1.794041) (xy -10.482161 1.820334) (xy -10.705632 1.820334) (xy -10.693941 1.779286) 32 | (xy -10.713895 1.555570) (xy -10.811707 1.453048) (xy -11.014491 1.413737) (xy -11.095895 1.443945) (xy -11.318521 1.520679) (xy -11.520557 1.488700) (xy -11.640600 1.357973) (xy -11.641426 1.355424) 33 | (xy -11.654652 1.227667) (xy -11.514666 1.227667) (xy -11.472333 1.270000) (xy -11.430000 1.227667) (xy -11.472333 1.185334) (xy -11.514666 1.227667) (xy -11.654652 1.227667) (xy -11.659600 1.179882) 34 | (xy -11.627414 1.100667) (xy -11.162631 1.100667) (xy -11.149326 1.220862) (xy -11.119927 1.206500) (xy -11.118562 1.185334) (xy -10.922000 1.185334) (xy -10.891022 1.255024) (xy -10.865555 1.241778) 35 | (xy -10.864132 1.227667) (xy -10.752666 1.227667) (xy -10.710333 1.270000) (xy -10.668000 1.227667) (xy -10.710333 1.185334) (xy -10.752666 1.227667) (xy -10.864132 1.227667) (xy -10.855422 1.141298) 36 | (xy -10.865555 1.128889) (xy -10.915890 1.140511) (xy -10.922000 1.185334) (xy -11.118562 1.185334) (xy -11.108744 1.033158) (xy -11.119927 0.994834) (xy -11.150829 0.984197) (xy -11.162631 1.100667) 37 | (xy -11.627414 1.100667) (xy -11.611392 1.061237) (xy -11.521577 1.054063) (xy -11.439084 1.019792) (xy -11.405725 0.973667) (xy -10.922000 0.973667) (xy -10.879666 1.016000) (xy -10.752666 1.016000) 38 | (xy -10.721688 1.085690) (xy -10.696222 1.072445) (xy -10.686089 0.971965) (xy -10.696222 0.959556) (xy -10.746556 0.971178) (xy -10.752666 1.016000) (xy -10.879666 1.016000) (xy -10.837333 0.973667) 39 | (xy -10.879666 0.931334) (xy -10.922000 0.973667) (xy -11.405725 0.973667) (xy -11.347733 0.893484) (xy -11.284046 0.710891) (xy -11.318788 0.519907) (xy -11.353764 0.434948) (xy -11.386285 0.381000) 40 | (xy -11.159494 0.381000) (xy -11.150343 0.525596) (xy -11.123838 0.538327) (xy -11.120464 0.530778) (xy -11.103715 0.362699) (xy -11.117327 0.276778) (xy -11.144277 0.242251) (xy -11.158936 0.354708) 41 | (xy -11.159494 0.381000) (xy -11.386285 0.381000) (xy -11.445447 0.282859) (xy -11.517509 0.260924) (xy -11.524370 0.269700) (xy -11.643430 0.321479) (xy -11.801912 0.306180) (xy -11.974965 0.214878) 42 | (xy -11.979709 0.197556) (xy -11.825111 0.197556) (xy -11.813489 0.247890) (xy -11.768666 0.254000) (xy -11.698976 0.223022) (xy -11.712222 0.197556) (xy -11.812702 0.187423) (xy -11.825111 0.197556) 43 | (xy -11.979709 0.197556) (xy -12.022666 0.040720) (xy -11.993682 -0.101338) (xy -11.882476 -0.173936) (xy -11.652668 -0.194887) (xy -11.544346 -0.193497) (xy -11.436321 -0.258541) (xy -11.378258 -0.338666) 44 | (xy -11.162631 -0.338666) (xy -11.149326 -0.218471) (xy -11.119927 -0.232833) (xy -11.108744 -0.406175) (xy -11.119927 -0.444500) (xy -11.150829 -0.455136) (xy -11.162631 -0.338666) (xy -11.378258 -0.338666) 45 | (xy -11.338990 -0.392853) (xy -11.282348 -0.538600) (xy -11.315540 -0.662781) (xy -11.457001 -0.830646) (xy -11.465065 -0.839080) (xy -11.612059 -1.015115) (xy -11.634769 -1.100666) (xy -11.501298 -1.100666) 46 | (xy -11.487993 -0.980471) (xy -11.458593 -0.994833) (xy -11.447411 -1.168175) (xy -11.458593 -1.206500) (xy -11.489496 -1.217136) (xy -11.501298 -1.100666) (xy -11.634769 -1.100666) (xy -11.646600 -1.145233) 47 | (xy -11.603943 -1.261387) (xy -11.456583 -1.418062) (xy -11.273811 -1.409933) (xy -11.212157 -1.374537) (xy -11.101301 -1.242173) (xy -11.054237 -1.082148) (xy -11.093578 -0.972304) (xy -11.095031 -0.971381) 48 | (xy -11.162438 -0.995132) (xy -11.176000 -1.067448) (xy -11.199632 -1.165446) (xy -11.228793 -1.160762) (xy -11.247867 -1.047268) (xy -11.227791 -0.967783) (xy -11.156462 -0.876159) (xy -11.055536 -0.925909) 49 | (xy -10.934507 -0.978524) (xy -10.879667 -0.931333) (xy -10.789996 -0.885510) (xy -10.702795 -0.937589) (xy -10.603215 -0.985151) (xy -10.583333 -0.951378) (xy -10.617263 -0.816923) (xy -10.696138 -0.650817) 50 | (xy -10.785585 -0.513851) (xy -10.851231 -0.466819) (xy -10.855610 -0.469832) (xy -10.893213 -0.446626) (xy -10.903502 -0.300200) (xy -10.891007 -0.073646) (xy -10.860255 0.189943) (xy -10.815774 0.447476) 51 | (xy -10.762091 0.655859) (xy -10.728842 0.736629) (xy -10.630325 0.958694) (xy -10.583870 1.139409) (xy -10.583333 1.152907) (xy -10.559554 1.250289) (xy -10.530444 1.245333) (xy -10.432596 1.251852) 52 | (xy -10.238705 1.325669) (xy -10.086617 1.400555) (xy -9.841716 1.519694) (xy -9.646351 1.595000) (xy -9.579303 1.608667) (xy -9.497778 1.674149) (xy -9.503389 1.820334) (xy -9.509194 1.977661) 53 | (xy -9.470926 2.032000) (xy -9.416922 1.959214) (xy -9.414850 1.943007) (xy -9.226958 1.943007) (xy -9.183470 2.014170) (xy -9.122833 2.010873) (xy -9.015614 1.906266) (xy -8.989682 1.834781) 54 | (xy -9.008431 1.734676) (xy -9.095516 1.745022) (xy -9.195344 1.830947) (xy -9.226958 1.943007) (xy -9.414850 1.943007) (xy -9.398000 1.811275) (xy -9.369417 1.652642) (xy -9.364150 1.651757) 55 | (xy -8.846546 1.651757) (xy -8.830405 1.775831) (xy -8.828090 1.784787) (xy -8.777879 1.898276) (xy -8.738636 1.874242) (xy -8.745146 1.820834) (xy -8.521175 1.820834) (xy -8.484560 1.986145) 56 | (xy -8.426320 2.026646) (xy -8.385209 1.929299) (xy -8.382000 1.867664) (xy -8.416548 1.708543) (xy -8.457675 1.656557) (xy -8.509545 1.691056) (xy -8.521175 1.820834) (xy -8.745146 1.820834) 57 | (xy -8.757333 1.720875) (xy -8.791071 1.673729) (xy -8.846546 1.651757) (xy -9.364150 1.651757) (xy -9.276757 1.637075) (xy -9.139870 1.626782) (xy -8.910758 1.552125) (xy -8.705257 1.460898) 58 | (xy -8.441301 1.343510) (xy -8.225218 1.270687) (xy -8.128000 1.257628) (xy -8.048136 1.257647) (xy -8.083028 1.227667) (xy -7.789333 1.227667) (xy -7.747000 1.270000) (xy -7.704666 1.227667) 59 | (xy -7.450666 1.227667) (xy -7.408333 1.270000) (xy -7.366000 1.227667) (xy -7.380111 1.213556) (xy -7.168444 1.213556) (xy -7.156822 1.263890) (xy -7.112000 1.270000) (xy -7.042310 1.239022) 60 | (xy -7.055555 1.213556) (xy -7.156035 1.203423) (xy -7.168444 1.213556) (xy -7.380111 1.213556) (xy -7.408333 1.185334) (xy -7.450666 1.227667) (xy -7.704666 1.227667) (xy -7.747000 1.185334) 61 | (xy -7.789333 1.227667) (xy -8.083028 1.227667) (xy -8.115872 1.199447) (xy -8.181130 1.112580) (xy -8.170208 1.100667) (xy -7.958666 1.100667) (xy -7.927688 1.170357) (xy -7.902222 1.157111) 62 | (xy -7.892089 1.056632) (xy -7.902222 1.044222) (xy -7.952556 1.055845) (xy -7.958666 1.100667) (xy -8.170208 1.100667) (xy -8.135829 1.063172) (xy -8.105710 1.029314) (xy -7.764454 1.029314) 63 | (xy -7.692041 1.129089) (xy -7.586551 1.196014) (xy -7.546180 1.167200) (xy -7.578681 1.054001) (xy -7.622423 1.016000) (xy -7.450666 1.016000) (xy -7.419688 1.085690) (xy -7.394222 1.072445) 64 | (xy -7.384089 0.971965) (xy -7.394222 0.959556) (xy -7.444556 0.971178) (xy -7.450666 1.016000) (xy -7.622423 1.016000) (xy -7.628395 1.010812) (xy -7.753486 0.965295) (xy -7.764454 1.029314) 65 | (xy -8.105710 1.029314) (xy -8.039419 0.954794) (xy -7.916536 0.757384) (xy -7.882291 0.692756) (xy -7.759501 0.269910) (xy -7.760371 0.254000) (xy -7.535333 0.254000) (xy -7.504355 0.323690) 66 | (xy -7.478889 0.310445) (xy -7.468756 0.209965) (xy -7.478889 0.197556) (xy -7.529223 0.209178) (xy -7.535333 0.254000) (xy -7.760371 0.254000) (xy -7.785368 -0.203033) (xy -7.788362 -0.211666) 67 | (xy -7.450666 -0.211666) (xy -7.408333 -0.169333) (xy -7.366000 -0.211666) (xy -7.408333 -0.254000) (xy -7.450666 -0.211666) (xy -7.788362 -0.211666) (xy -7.849536 -0.388055) (xy -7.613316 -0.388055) 68 | (xy -7.597749 -0.278241) (xy -7.568847 -0.276930) (xy -7.548636 -0.390247) (xy -7.562163 -0.439208) (xy -7.599758 -0.471278) (xy -7.613316 -0.388055) (xy -7.849536 -0.388055) (xy -7.957557 -0.699522) 69 | (xy -8.014280 -0.808257) (xy -8.108601 -0.987778) (xy -7.845778 -0.987778) (xy -7.834155 -0.937443) (xy -7.789333 -0.931333) (xy -7.719643 -0.962311) (xy -7.725549 -0.973666) (xy -7.535333 -0.973666) 70 | (xy -7.493000 -0.931333) (xy -7.450666 -0.973666) (xy -7.493000 -1.016000) (xy -7.535333 -0.973666) (xy -7.725549 -0.973666) (xy -7.732889 -0.987778) (xy -7.833368 -0.997911) (xy -7.845778 -0.987778) 71 | (xy -8.108601 -0.987778) (xy -8.133506 -1.035178) (xy -8.166018 -1.134380) (xy -8.115724 -1.121188) (xy -8.088855 -1.100666) (xy -7.975714 -1.018914) (xy -7.958014 -1.049492) (xy -7.973108 -1.100666) 72 | (xy -8.061715 -1.185333) (xy -7.196666 -1.185333) (xy -7.165688 -1.115643) (xy -7.140222 -1.128889) (xy -7.130089 -1.229368) (xy -7.140222 -1.241778) (xy -7.190556 -1.230155) (xy -7.196666 -1.185333) 73 | (xy -8.061715 -1.185333) (xy -8.081080 -1.203836) (xy -8.219710 -1.240811) (xy -8.423489 -1.278380) (xy -8.695449 -1.357468) (xy -8.805333 -1.396146) (xy -9.270541 -1.497788) (xy -9.517267 -1.485686) 74 | (xy -9.782258 -1.418609) (xy -10.055298 -1.311806) (xy -10.279520 -1.191410) (xy -10.398060 -1.083553) (xy -10.399663 -1.080176) (xy -10.484558 -1.064270) (xy -10.590163 -1.104322) (xy -10.716320 -1.146985) 75 | (xy -10.752454 -1.069306) (xy -10.752666 -1.055264) (xy -10.765578 -0.964760) (xy -10.832292 -1.000486) (xy -10.887205 -1.053776) (xy -10.968631 -1.160379) (xy -10.942685 -1.227666) (xy -10.583333 -1.227666) 76 | (xy -10.541000 -1.185333) (xy -10.498666 -1.227666) (xy -10.541000 -1.270000) (xy -10.583333 -1.227666) (xy -10.942685 -1.227666) (xy -10.933238 -1.252164) (xy -10.827442 -1.345651) (xy -10.704195 -1.467767) 77 | (xy -10.676340 -1.598273) (xy -10.719677 -1.778000) (xy -10.569965 -1.778000) (xy -10.556659 -1.657804) (xy -10.527260 -1.672166) (xy -10.525895 -1.693333) (xy -10.244666 -1.693333) (xy -10.213688 -1.623643) 78 | (xy -10.188222 -1.636889) (xy -10.178089 -1.737368) (xy -10.188222 -1.749778) (xy -10.238556 -1.738155) (xy -10.244666 -1.693333) (xy -10.525895 -1.693333) (xy -10.516077 -1.845509) (xy -10.521083 -1.862666) 79 | (xy -10.414000 -1.862666) (xy -10.383022 -1.792976) (xy -10.357555 -1.806222) (xy -10.347422 -1.906702) (xy -10.357555 -1.919111) (xy -10.407890 -1.907489) (xy -10.414000 -1.862666) (xy -10.521083 -1.862666) 80 | (xy -10.527260 -1.883833) (xy -10.558163 -1.894469) (xy -10.569965 -1.778000) (xy -10.719677 -1.778000) (xy -10.727501 -1.810444) (xy -10.778962 -2.021654) (xy -10.753228 -2.144821) (xy -10.639098 -2.247035) 81 | (xy -10.507636 -2.321449) (xy -10.407063 -2.295206) (xy -10.274045 -2.150225) (xy -10.266254 -2.140585) (xy -10.137008 -1.947783) (xy -10.074210 -1.790325) (xy -10.073179 -1.778000) (xy -10.054647 -1.707165) 82 | (xy -10.026233 -1.742722) (xy -9.814649 -1.742722) (xy -9.799082 -1.632908) (xy -9.770180 -1.631597) (xy -9.751960 -1.733755) (xy -9.552728 -1.733755) (xy -9.520732 -1.671273) (xy -9.352479 -1.646261) 83 | (xy -9.129435 -1.645484) (xy -8.816438 -1.674798) (xy -8.664628 -1.748334) (xy -8.652216 -1.771685) (xy -8.665105 -1.852041) (xy -8.748736 -1.837522) (xy -8.890422 -1.833096) (xy -8.935472 -1.867745) 84 | (xy -9.024766 -1.916375) (xy -9.097680 -1.857529) (xy -9.088494 -1.750983) (xy -9.097090 -1.723712) (xy -9.198335 -1.798010) (xy -9.346774 -1.891808) (xy -9.456877 -1.854174) (xy -9.466889 -1.844577) 85 | (xy -9.552728 -1.733755) (xy -9.751960 -1.733755) (xy -9.749969 -1.744914) (xy -9.763496 -1.793875) (xy -9.801091 -1.825945) (xy -9.814649 -1.742722) (xy -10.026233 -1.742722) (xy -9.991583 -1.786080) 86 | (xy -9.983885 -1.799166) (xy -9.858114 -1.922186) (xy -9.775793 -1.947333) (xy -9.676785 -2.027616) (xy -9.605625 -2.252310) (xy -9.599846 -2.286000) (xy -9.552911 -2.488130) (xy -9.284229 -2.488130) 87 | (xy -9.271000 -2.455333) (xy -9.194918 -2.374563) (xy -9.181336 -2.370666) (xy -9.144971 -2.436172) (xy -9.144000 -2.455333) (xy -9.209088 -2.536746) (xy -9.233663 -2.540000) (xy -9.284229 -2.488130) 88 | (xy -9.552911 -2.488130) (xy -9.548465 -2.507274) (xy -9.466597 -2.604872) (xy -9.342188 -2.624666) (xy -9.210193 -2.610951) )(layer F.SilkS) (width 0.010000) 89 | ) 90 | (fp_poly (pts (xy -5.222881 0.262881) (xy -4.962429 0.287464) (xy -4.834440 0.324661) (xy -4.826000 0.338667) (xy -4.904792 0.381328) (xy -5.118078 0.411063) (xy -5.431222 0.423254) (xy -5.461000 0.423334) 91 | (xy -6.096000 0.423334) (xy -6.096000 1.185334) (xy -5.503333 1.185334) (xy -5.199309 1.196521) (xy -4.989232 1.226504) (xy -4.910667 1.269918) (xy -4.910666 1.270000) (xy -4.988976 1.313432) 92 | (xy -5.198862 1.343443) (xy -5.502758 1.354667) (xy -6.096000 1.354667) (xy -6.096000 2.286000) (xy -5.461000 2.286000) (xy -5.141040 2.296506) (xy -4.918026 2.324944) (xy -4.826594 2.366696) 93 | (xy -4.826000 2.370667) (xy -4.905926 2.411236) (xy -5.127175 2.440175) (xy -5.461950 2.454396) (xy -5.588000 2.455334) (xy -6.350000 2.455334) (xy -6.350000 0.254000) (xy -5.588000 0.254000) 94 | (xy -5.222881 0.262881) )(layer F.SilkS) (width 0.010000) 95 | ) 96 | (fp_poly (pts (xy -2.950922 0.280427) (xy -2.915349 0.376146) (xy -2.893305 0.565814) (xy -2.882007 0.874090) (xy -2.878674 1.325631) (xy -2.878666 1.354667) (xy -2.881585 1.813996) (xy -2.892223 2.128887) 97 | (xy -2.913407 2.324164) (xy -2.947964 2.424650) (xy -2.998718 2.455170) (xy -3.003962 2.455334) (xy -3.096810 2.389009) (xy -3.260564 2.207801) (xy -3.473159 1.938352) (xy -3.712533 1.607308) 98 | (xy -3.744795 1.560663) (xy -4.360333 0.665992) (xy -4.384364 1.560663) (xy -4.399823 1.971983) (xy -4.422671 2.240087) (xy -4.457228 2.391063) (xy -4.507814 2.451000) (xy -4.532531 2.455334) 99 | (xy -4.584285 2.428973) (xy -4.619815 2.333491) (xy -4.641881 2.144287) (xy -4.653241 1.836761) (xy -4.656654 1.386313) (xy -4.656666 1.348459) (xy -4.651894 0.849588) (xy -4.629493 0.508665) 100 | (xy -4.577334 0.323094) (xy -4.483289 0.290278) (xy -4.335231 0.407622) (xy -4.121030 0.672531) (xy -3.828559 1.082408) (xy -3.774771 1.159712) (xy -3.175000 2.023090) (xy -3.150969 1.138545) 101 | (xy -3.135373 0.729830) (xy -3.112233 0.464235) (xy -3.077163 0.315577) (xy -3.025775 0.257672) (xy -3.002802 0.254000) (xy -2.950922 0.280427) )(layer F.SilkS) (width 0.010000) 102 | ) 103 | (fp_poly (pts (xy -1.477469 0.206868) (xy -1.244816 0.297023) (xy -1.013720 0.457136) (xy -0.835646 0.643401) (xy -0.762056 0.812014) (xy -0.762000 0.815879) (xy -0.799641 0.922352) (xy -0.905228 0.883452) 104 | (xy -1.067754 0.703605) (xy -1.079198 0.688264) (xy -1.340459 0.463554) (xy -1.667798 0.388224) (xy -1.963498 0.441655) (xy -2.210636 0.609870) (xy -2.377550 0.885867) (xy -2.456444 1.224368) 105 | (xy -2.439525 1.580095) (xy -2.318999 1.907770) (xy -2.236140 2.025504) (xy -2.041248 2.208735) (xy -1.822935 2.279459) (xy -1.681958 2.286000) (xy -1.378421 2.225584) (xy -1.123551 2.068309) 106 | (xy -0.963195 1.850138) (xy -0.931333 1.697182) (xy -0.958462 1.584140) (xy -1.069780 1.534120) (xy -1.270000 1.524000) (xy -1.482074 1.505222) (xy -1.600031 1.458312) (xy -1.608666 1.439334) 107 | (xy -1.532115 1.392967) (xy -1.334642 1.362214) (xy -1.143000 1.354667) (xy -0.677333 1.354667) (xy -0.677333 1.857670) (xy -0.690561 2.134981) (xy -0.724847 2.338701) (xy -0.762000 2.413000) 108 | (xy -0.828640 2.387077) (xy -0.846666 2.290997) (xy -0.863582 2.148656) (xy -0.931644 2.139278) (xy -1.076828 2.262354) (xy -1.100666 2.286000) (xy -1.325925 2.408123) (xy -1.637910 2.452359) 109 | (xy -1.971806 2.416371) (xy -2.215037 2.326150) (xy -2.449589 2.109935) (xy -2.605718 1.787876) (xy -2.675538 1.408072) (xy -2.651163 1.018621) (xy -2.524705 0.667621) (xy -2.494951 0.618973) 110 | (xy -2.261258 0.395514) (xy -1.935589 0.244490) (xy -1.589644 0.194942) (xy -1.477469 0.206868) )(layer F.SilkS) (width 0.010000) 111 | ) 112 | (fp_poly (pts (xy -0.240043 0.275659) (xy -0.204922 0.357892) (xy -0.185886 0.526586) (xy -0.180380 0.807628) (xy -0.185851 1.226902) (xy -0.187970 1.326575) (xy -0.204794 1.820408) (xy -0.230967 2.159840) 113 | (xy -0.268216 2.359631) (xy -0.317500 2.434297) (xy -0.362686 2.409214) (xy -0.393869 2.285767) (xy -0.412989 2.044300) (xy -0.421987 1.665156) (xy -0.423333 1.361722) (xy -0.420651 0.902878) 114 | (xy -0.410634 0.588044) (xy -0.390329 0.391952) (xy -0.356780 0.289335) (xy -0.307033 0.254926) (xy -0.293804 0.254000) (xy -0.240043 0.275659) )(layer F.SilkS) (width 0.010000) 115 | ) 116 | (fp_poly (pts (xy 1.788560 0.278530) (xy 1.824812 0.368817) (xy 1.847314 0.549909) (xy 1.858954 0.846853) (xy 1.862624 1.284697) (xy 1.862667 1.354667) (xy 1.859367 1.818411) (xy 1.847763 2.136620) 117 | (xy 1.825297 2.332993) (xy 1.789410 2.431233) (xy 1.743877 2.455334) (xy 1.654039 2.388899) (xy 1.493014 2.207238) (xy 1.282340 1.936812) (xy 1.043556 1.604081) (xy 1.003043 1.545167) 118 | (xy 0.381000 0.635000) (xy 0.356969 1.545167) (xy 0.340072 1.979066) (xy 0.313523 2.261964) (xy 0.272706 2.412117) (xy 0.213006 2.447782) (xy 0.141111 2.398889) (xy 0.119475 2.297040) 119 | (xy 0.101673 2.060510) (xy 0.089483 1.723940) (xy 0.084681 1.321969) (xy 0.084667 1.298222) (xy 0.090792 0.810039) (xy 0.116604 0.476444) (xy 0.173256 0.295765) (xy 0.271904 0.266331) 120 | (xy 0.423701 0.386471) (xy 0.639803 0.654515) (xy 0.931364 1.068791) (xy 0.994834 1.161871) (xy 1.608667 2.064572) (xy 1.608667 1.159286) (xy 1.612454 0.749095) (xy 1.626354 0.480978) 121 | (xy 1.654175 0.327794) (xy 1.699723 0.262399) (xy 1.735667 0.254000) (xy 1.788560 0.278530) )(layer F.SilkS) (width 0.010000) 122 | ) 123 | (fp_poly (pts (xy 3.328452 0.262881) (xy 3.588904 0.287464) (xy 3.716893 0.324661) (xy 3.725334 0.338667) (xy 3.646117 0.380596) (xy 3.429848 0.410060) (xy 3.108593 0.423051) (xy 3.048000 0.423334) 124 | (xy 2.370667 0.423334) (xy 2.370667 1.185334) (xy 2.958337 1.185334) (xy 3.319765 1.199021) (xy 3.530821 1.233403) (xy 3.587683 1.278459) (xy 3.486535 1.324170) (xy 3.223556 1.360514) 125 | (xy 3.029505 1.372070) (xy 2.413000 1.397000) (xy 2.361818 2.286000) (xy 3.043576 2.286000) (xy 3.380600 2.295843) (xy 3.617629 2.322737) (xy 3.722844 2.362732) (xy 3.725334 2.370667) 126 | (xy 3.645407 2.411236) (xy 3.424159 2.440175) (xy 3.089383 2.454396) (xy 2.963334 2.455334) (xy 2.201334 2.455334) (xy 2.201334 0.254000) (xy 2.963334 0.254000) (xy 3.328452 0.262881) )(layer F.SilkS) (width 0.010000) 127 | ) 128 | (fp_poly (pts (xy 5.021786 0.262881) (xy 5.282237 0.287464) (xy 5.410226 0.324661) (xy 5.418667 0.338667) (xy 5.339451 0.380596) (xy 5.123181 0.410060) (xy 4.801926 0.423051) (xy 4.741334 0.423334) 129 | (xy 4.064000 0.423334) (xy 4.064000 1.185334) (xy 4.651670 1.185334) (xy 5.013099 1.199021) (xy 5.224154 1.233403) (xy 5.281017 1.278459) (xy 5.179868 1.324170) (xy 4.916890 1.360514) 130 | (xy 4.722838 1.372070) (xy 4.106334 1.397000) (xy 4.080742 1.841500) (xy 4.055151 2.286000) (xy 4.736909 2.286000) (xy 5.073933 2.295843) (xy 5.310962 2.322737) (xy 5.416177 2.362732) 131 | (xy 5.418667 2.370667) (xy 5.338741 2.411236) (xy 5.117492 2.440175) (xy 4.782717 2.454396) (xy 4.656667 2.455334) (xy 3.894667 2.455334) (xy 3.894667 0.254000) (xy 4.656667 0.254000) 132 | (xy 5.021786 0.262881) )(layer F.SilkS) (width 0.010000) 133 | ) 134 | (fp_poly (pts (xy 6.565344 0.260059) (xy 6.784379 0.286603) (xy 6.933641 0.346185) (xy 7.062818 0.451355) (xy 7.081624 0.469928) (xy 7.234902 0.724594) (xy 7.226616 1.003792) (xy 7.064801 1.274755) 135 | (xy 6.989222 1.400215) (xy 7.049923 1.516285) (xy 7.061487 1.528755) (xy 7.145269 1.682930) (xy 7.202332 1.906662) (xy 7.227827 2.145438) (xy 7.216902 2.344745) (xy 7.164709 2.450070) 136 | (xy 7.143933 2.455334) (xy 7.059649 2.383173) (xy 7.027802 2.160080) (xy 7.027334 2.116667) (xy 6.977521 1.781018) (xy 6.820074 1.567167) (xy 6.542976 1.465037) (xy 6.239890 1.456224) 137 | (xy 5.799667 1.481667) (xy 5.774275 1.968500) (xy 5.747944 2.230106) (xy 5.705873 2.406823) (xy 5.668442 2.455334) (xy 5.636511 2.375002) (xy 5.611205 2.151212) (xy 5.594411 1.809774) 138 | (xy 5.588013 1.376497) (xy 5.588000 1.354667) (xy 5.588000 0.423334) (xy 5.757334 0.423334) (xy 5.757334 1.270000) (xy 6.228566 1.270000) (xy 6.523036 1.254630) (xy 6.767545 1.215229) 139 | (xy 6.863566 1.182355) (xy 6.999297 1.018687) (xy 7.027334 0.846667) (xy 6.984201 0.639741) (xy 6.840087 0.508079) (xy 6.572915 0.439980) (xy 6.228566 0.423334) (xy 5.757334 0.423334) 140 | (xy 5.588000 0.423334) (xy 5.588000 0.254000) (xy 6.226849 0.254000) (xy 6.565344 0.260059) )(layer F.SilkS) (width 0.010000) 141 | ) 142 | (fp_poly (pts (xy 7.656210 0.335667) (xy 7.683269 0.569026) (xy 7.699835 0.936616) (xy 7.704667 1.354667) (xy 7.698385 1.825392) (xy 7.680434 2.177164) (xy 7.652158 2.392523) (xy 7.620000 2.455334) 143 | (xy 7.583791 2.373667) (xy 7.556731 2.140308) (xy 7.540165 1.772717) (xy 7.535334 1.354667) (xy 7.541616 0.883942) (xy 7.559566 0.532170) (xy 7.587842 0.316811) (xy 7.620000 0.254000) 144 | (xy 7.656210 0.335667) )(layer F.SilkS) (width 0.010000) 145 | ) 146 | (fp_poly (pts (xy 9.752256 0.277214) (xy 9.786541 0.363866) (xy 9.805016 0.539478) (xy 9.810114 0.829566) (xy 9.804271 1.259651) (xy 9.802696 1.333500) (xy 9.789284 1.791135) (xy 9.770483 2.103659) 147 | (xy 9.743006 2.295283) (xy 9.703564 2.390216) (xy 9.656047 2.413000) (xy 9.563800 2.346570) (xy 9.401401 2.165317) (xy 9.191131 1.896300) (xy 8.955270 1.566578) (xy 8.936380 1.538999) 148 | (xy 8.339667 0.664999) (xy 8.315636 1.560166) (xy 8.300183 1.971614) (xy 8.277350 2.239841) (xy 8.242818 2.390930) (xy 8.192270 2.450966) (xy 8.167469 2.455334) (xy 8.115715 2.428973) 149 | (xy 8.080185 2.333491) (xy 8.058119 2.144287) (xy 8.046759 1.836761) (xy 8.043346 1.386313) (xy 8.043334 1.348459) (xy 8.048404 0.849231) (xy 8.071451 0.507639) (xy 8.124225 0.321326) 150 | (xy 8.218478 0.287931) (xy 8.365961 0.405096) (xy 8.578427 0.670462) (xy 8.867627 1.081672) (xy 8.928586 1.170772) (xy 9.525000 2.044335) (xy 9.549031 1.149168) (xy 9.564248 0.739388) 151 | (xy 9.586576 0.472292) (xy 9.620501 0.321254) (xy 9.670503 0.259644) (xy 9.699727 0.254000) (xy 9.752256 0.277214) )(layer F.SilkS) (width 0.010000) 152 | ) 153 | (fp_poly (pts (xy 11.221042 0.213929) (xy 11.452371 0.292535) (xy 11.647599 0.425708) (xy 11.810292 0.603830) (xy 11.906999 0.780021) (xy 11.904271 0.907400) (xy 11.897082 0.915807) (xy 11.818108 0.888757) 154 | (xy 11.676755 0.764314) (xy 11.618745 0.701797) (xy 11.322860 0.461866) (xy 11.019832 0.375385) (xy 10.735167 0.429649) (xy 10.494370 0.611950) (xy 10.322949 0.909582) (xy 10.246408 1.309841) 155 | (xy 10.244667 1.386300) (xy 10.308630 1.778122) (xy 10.488379 2.071819) (xy 10.765707 2.246206) (xy 11.018042 2.286000) (xy 11.321579 2.225584) (xy 11.576449 2.068309) (xy 11.736805 1.850138) 156 | (xy 11.768667 1.697182) (xy 11.741070 1.583489) (xy 11.628252 1.533639) (xy 11.434997 1.524000) (xy 11.209552 1.504319) (xy 11.065048 1.455436) (xy 11.049000 1.439334) (xy 11.094059 1.389890) 157 | (xy 11.289982 1.360969) (xy 11.509670 1.354667) (xy 12.022667 1.354667) (xy 12.022667 1.857670) (xy 12.009439 2.134981) (xy 11.975153 2.338701) (xy 11.938000 2.413000) (xy 11.871360 2.387077) 158 | (xy 11.853334 2.290997) (xy 11.836418 2.148656) (xy 11.768356 2.139278) (xy 11.623172 2.262354) (xy 11.599334 2.286000) (xy 11.374673 2.407797) (xy 11.063335 2.452422) (xy 10.730611 2.417401) 159 | (xy 10.488632 2.328072) (xy 10.264722 2.125531) (xy 10.089923 1.818964) (xy 9.997453 1.472932) (xy 9.990667 1.360319) (xy 10.058139 0.937403) (xy 10.242299 0.591301) (xy 10.515760 0.342018) 160 | (xy 10.851136 0.209559) (xy 11.221042 0.213929) )(layer F.SilkS) (width 0.010000) 161 | ) 162 | (fp_poly (pts (xy -5.080000 -1.448713) (xy -5.084959 -1.016352) (xy -5.102924 -0.718636) (xy -5.138524 -0.521084) (xy -5.196392 -0.389216) (xy -5.228166 -0.345471) (xy -5.443966 -0.194347) (xy -5.736484 -0.118757) 163 | (xy -6.024306 -0.133665) (xy -6.138333 -0.178182) (xy -6.404472 -0.402939) (xy -6.516327 -0.678656) (xy -6.519333 -0.735849) (xy -6.458309 -0.885105) (xy -6.319229 -0.941419) (xy -6.168079 -0.900875) 164 | (xy -6.071579 -0.762427) (xy -5.968194 -0.595863) (xy -5.880128 -0.537004) (xy -5.722951 -0.529631) (xy -5.610804 -0.653155) (xy -5.540017 -0.917765) (xy -5.506916 -1.333652) (xy -5.503333 -1.582515) 165 | (xy -5.501785 -1.950621) (xy -5.491405 -2.181435) (xy -5.463587 -2.306999) (xy -5.409726 -2.359356) (xy -5.321217 -2.370546) (xy -5.291666 -2.370666) (xy -5.080000 -2.370666) (xy -5.080000 -1.448713) )(layer F.SilkS) (width 0.010000) 166 | ) 167 | (fp_poly (pts (xy -4.127500 -2.369418) (xy -3.671612 -2.347959) (xy -3.358964 -2.278984) (xy -3.167639 -2.152338) (xy -3.075715 -1.957864) (xy -3.063390 -1.876372) (xy -3.073930 -1.645667) (xy -3.136794 -1.476740) 168 | (xy -3.138575 -1.474548) (xy -3.190806 -1.353239) (xy -3.116206 -1.214988) (xy -3.087907 -1.182652) (xy -2.956449 -0.930207) (xy -2.947904 -0.645534) (xy -3.059186 -0.394714) (xy -3.127935 -0.325473) 169 | (xy -3.267494 -0.243319) (xy -3.463659 -0.194880) (xy -3.758459 -0.172889) (xy -4.031046 -0.169333) (xy -4.741333 -0.169333) (xy -4.741333 -0.804333) (xy -4.233333 -0.804333) (xy -4.219871 -0.605590) 170 | (xy -4.146852 -0.524074) (xy -3.965332 -0.508013) (xy -3.953182 -0.508000) (xy -3.708520 -0.541424) (xy -3.519473 -0.620284) (xy -3.409557 -0.777683) (xy -3.424329 -0.916618) (xy -3.492037 -1.034664) 171 | (xy -3.629557 -1.088715) (xy -3.858039 -1.100666) (xy -4.089865 -1.094044) (xy -4.198792 -1.049736) (xy -4.231249 -0.931082) (xy -4.233333 -0.804333) (xy -4.741333 -0.804333) (xy -4.741333 -1.693333) 172 | (xy -4.233333 -1.693333) (xy -4.215869 -1.520566) (xy -4.128776 -1.451332) (xy -3.947367 -1.439333) (xy -3.720168 -1.474586) (xy -3.561543 -1.559958) (xy -3.556895 -1.565255) (xy -3.478880 -1.740208) 173 | (xy -3.553445 -1.870682) (xy -3.766172 -1.940238) (xy -3.892009 -1.947333) (xy -4.110266 -1.937505) (xy -4.207719 -1.884030) (xy -4.232727 -1.750922) (xy -4.233333 -1.693333) (xy -4.741333 -1.693333) 174 | (xy -4.741333 -2.370666) (xy -4.127500 -2.369418) )(layer F.SilkS) (width 0.010000) 175 | ) 176 | (fp_poly (pts (xy -1.607558 -2.349209) (xy -1.277889 -2.279113) (xy -1.065875 -2.151790) (xy -0.948077 -1.958654) (xy -0.947263 -1.956266) (xy -0.920134 -1.749865) (xy -0.948265 -1.525061) (xy -1.016768 -1.344293) 177 | (xy -1.110755 -1.270000) (xy -1.110901 -1.270000) (xy -1.130434 -1.210404) (xy -1.070172 -1.079500) (xy -0.983216 -0.872244) (xy -0.916855 -0.597142) (xy -0.906944 -0.529166) (xy -0.886160 -0.304286) 178 | (xy -0.915135 -0.200404) (xy -1.020046 -0.170837) (xy -1.108723 -0.169333) (xy -1.281841 -0.190564) (xy -1.346646 -0.289858) (xy -1.354666 -0.428899) (xy -1.393756 -0.748086) (xy -1.523330 -0.935227) 179 | (xy -1.761844 -1.011528) (xy -1.865645 -1.016000) (xy -2.201333 -1.016000) (xy -2.201333 -0.592666) (xy -2.206882 -0.342064) (xy -2.241003 -0.217097) (xy -2.329902 -0.174087) (xy -2.455333 -0.169333) 180 | (xy -2.709333 -0.169333) (xy -2.709333 -1.646132) (xy -2.201333 -1.646132) (xy -2.193291 -1.456514) (xy -2.137299 -1.374273) (xy -1.985556 -1.361958) (xy -1.850123 -1.370965) (xy -1.586280 -1.422720) 181 | (xy -1.423560 -1.519524) (xy -1.413315 -1.533658) (xy -1.350810 -1.732365) (xy -1.441453 -1.870633) (xy -1.677362 -1.940399) (xy -1.817676 -1.947333) (xy -2.052832 -1.941245) (xy -2.164582 -1.898942) 182 | (xy -2.198851 -1.784369) (xy -2.201333 -1.646132) (xy -2.709333 -1.646132) (xy -2.709333 -2.370666) (xy -2.078317 -2.370666) (xy -1.607558 -2.349209) )(layer F.SilkS) (width 0.010000) 183 | ) 184 | (fp_poly (pts (xy -9.059333 1.905000) (xy -9.101666 1.947334) (xy -9.144000 1.905000) (xy -9.101666 1.862667) (xy -9.059333 1.905000) )(layer F.SilkS) (width 0.010000) 185 | ) 186 | (fp_poly (pts (xy -9.398000 -1.735666) (xy -9.440333 -1.693333) (xy -9.482666 -1.735666) (xy -9.440333 -1.778000) (xy -9.398000 -1.735666) )(layer F.SilkS) (width 0.010000) 187 | ) 188 | (fp_poly (pts (xy -8.720666 -1.735666) (xy -8.763000 -1.693333) (xy -8.805333 -1.735666) (xy -8.763000 -1.778000) (xy -8.720666 -1.735666) )(layer F.SilkS) (width 0.010000) 189 | ) 190 | ) 191 | -------------------------------------------------------------------------------- /pcb/kicad/WS2812B.pretty/np_logo.kicad_mod: -------------------------------------------------------------------------------- 1 | (module LOGO (layer F.Cu) 2 | (at 0 0) 3 | (fp_text reference "G***" (at 0 0) (layer F.SilkS) hide 4 | (effects (font (thickness 0.3))) 5 | ) 6 | (fp_text value "LOGO" (at 0.75 0) (layer F.SilkS) hide 7 | (effects (font (thickness 0.3))) 8 | ) 9 | (fp_poly (pts (xy -9.493809 6.686932) (xy -9.319084 7.075554) (xy -9.499802 7.327969) (xy -9.578900 7.337778) (xy -9.963845 7.133740) (xy -10.006837 7.075057) (xy -9.993349 6.740055) (xy -9.694988 6.594231) 10 | (xy -9.493809 6.686932) )(layer F.SilkS) (width 0.010000) 11 | ) 12 | (fp_poly (pts (xy -7.628201 6.988097) (xy -7.620000 7.055556) (xy -7.834764 7.329577) (xy -7.902222 7.337778) (xy -8.176244 7.123014) (xy -8.184445 7.055556) (xy -7.969681 6.781534) (xy -7.902222 6.773333) 13 | (xy -7.628201 6.988097) )(layer F.SilkS) (width 0.010000) 14 | ) 15 | (fp_poly (pts (xy -5.934868 6.988097) (xy -5.926667 7.055556) (xy -6.141431 7.329577) (xy -6.208889 7.337778) (xy -6.482910 7.123014) (xy -6.491111 7.055556) (xy -6.276347 6.781534) (xy -6.208889 6.773333) 16 | (xy -5.934868 6.988097) )(layer F.SilkS) (width 0.010000) 17 | ) 18 | (fp_poly (pts (xy -4.241535 6.988097) (xy -4.233333 7.055556) (xy -4.448098 7.329577) (xy -4.515556 7.337778) (xy -4.789577 7.123014) (xy -4.797778 7.055556) (xy -4.583014 6.781534) (xy -4.515556 6.773333) 19 | (xy -4.241535 6.988097) )(layer F.SilkS) (width 0.010000) 20 | ) 21 | (fp_poly (pts (xy -2.548201 6.988097) (xy -2.540000 7.055556) (xy -2.754764 7.329577) (xy -2.822222 7.337778) (xy -3.096244 7.123014) (xy -3.104445 7.055556) (xy -2.889681 6.781534) (xy -2.822222 6.773333) 22 | (xy -2.548201 6.988097) )(layer F.SilkS) (width 0.010000) 23 | ) 24 | (fp_poly (pts (xy -0.763321 6.978480) (xy -0.705556 7.055556) (xy -0.769535 7.297166) (xy -0.971122 7.337778) (xy -1.357262 7.190430) (xy -1.411111 7.055556) (xy -1.208553 6.781411) (xy -1.145545 6.773333) 25 | (xy -0.763321 6.978480) )(layer F.SilkS) (width 0.010000) 26 | ) 27 | (fp_poly (pts (xy 1.121287 6.988596) (xy 1.128889 7.055556) (xy 0.899171 7.303238) (xy 0.688899 7.337778) (xy 0.396783 7.200959) (xy 0.423333 7.055556) (xy 0.784142 6.784099) (xy 0.863322 6.773333) 28 | (xy 1.121287 6.988596) )(layer F.SilkS) (width 0.010000) 29 | ) 30 | (fp_poly (pts (xy 2.814021 6.988097) (xy 2.822222 7.055556) (xy 2.607458 7.329577) (xy 2.540000 7.337778) (xy 2.265979 7.123014) (xy 2.257778 7.055556) (xy 2.472542 6.781534) (xy 2.540000 6.773333) 31 | (xy 2.814021 6.988097) )(layer F.SilkS) (width 0.010000) 32 | ) 33 | (fp_poly (pts (xy 4.507354 6.988097) (xy 4.515555 7.055556) (xy 4.300791 7.329577) (xy 4.233333 7.337778) (xy 3.959312 7.123014) (xy 3.951111 7.055556) (xy 4.165875 6.781534) (xy 4.233333 6.773333) 34 | (xy 4.507354 6.988097) )(layer F.SilkS) (width 0.010000) 35 | ) 36 | (fp_poly (pts (xy 6.200688 6.988097) (xy 6.208889 7.055556) (xy 5.994125 7.329577) (xy 5.926667 7.337778) (xy 5.652645 7.123014) (xy 5.644444 7.055556) (xy 5.859208 6.781534) (xy 5.926667 6.773333) 37 | (xy 6.200688 6.988097) )(layer F.SilkS) (width 0.010000) 38 | ) 39 | (fp_poly (pts (xy 7.894021 6.988097) (xy 7.902222 7.055556) (xy 7.687458 7.329577) (xy 7.620000 7.337778) (xy 7.345979 7.123014) (xy 7.337778 7.055556) (xy 7.552542 6.781534) (xy 7.620000 6.773333) 40 | (xy 7.894021 6.988097) )(layer F.SilkS) (width 0.010000) 41 | ) 42 | (fp_poly (pts (xy 9.678901 6.978480) (xy 9.736667 7.055556) (xy 9.672687 7.297166) (xy 9.471100 7.337778) (xy 9.084960 7.190430) (xy 9.031111 7.055556) (xy 9.233670 6.781411) (xy 9.296677 6.773333) 43 | (xy 9.678901 6.978480) )(layer F.SilkS) (width 0.010000) 44 | ) 45 | (fp_poly (pts (xy 11.006667 6.067778) (xy 11.278123 6.428587) (xy 11.288889 6.507767) (xy 11.073626 6.765732) (xy 11.006667 6.773333) (xy 10.758985 6.543615) (xy 10.724444 6.333344) (xy 10.861263 6.041228) 46 | (xy 11.006667 6.067778) )(layer F.SilkS) (width 0.010000) 47 | ) 48 | (fp_poly (pts (xy -10.732646 5.859209) (xy -10.724445 5.926667) (xy -10.939209 6.200688) (xy -11.006667 6.208889) (xy -11.280688 5.994125) (xy -11.288889 5.926667) (xy -11.074125 5.652646) (xy -11.006667 5.644445) 49 | (xy -10.732646 5.859209) )(layer F.SilkS) (width 0.010000) 50 | ) 51 | (fp_poly (pts (xy -8.754803 4.940029) (xy -8.553544 5.233253) (xy -8.673730 5.445748) (xy -9.109492 5.477495) (xy -9.242778 5.441730) (xy -9.571347 5.158790) (xy -9.470936 4.870373) (xy -9.188878 4.797778) 52 | (xy -8.754803 4.940029) )(layer F.SilkS) (width 0.010000) 53 | ) 54 | (fp_poly (pts (xy -1.725174 5.026366) (xy -1.693333 5.221111) (xy -1.845725 5.596684) (xy -1.975556 5.644445) (xy -2.225937 5.415857) (xy -2.257778 5.221111) (xy -2.105386 4.845539) (xy -1.975556 4.797778) 55 | (xy -1.725174 5.026366) )(layer F.SilkS) (width 0.010000) 56 | ) 57 | (fp_poly (pts (xy -0.589896 5.138776) (xy -0.624487 5.401238) (xy -0.779928 5.613683) (xy -0.964368 5.400101) (xy -1.067926 4.984618) (xy -1.016038 4.873075) (xy -0.737040 4.826730) (xy -0.589896 5.138776) )(layer F.SilkS) (width 0.010000) 58 | ) 59 | (fp_poly (pts (xy 2.152043 4.909061) (xy 2.257778 5.063344) (xy 2.041370 5.439586) (xy 1.516952 5.453712) (xy 1.481667 5.441730) (xy 1.144031 5.166909) (xy 1.278501 4.892404) (xy 1.693333 4.797778) 60 | (xy 2.152043 4.909061) )(layer F.SilkS) (width 0.010000) 61 | ) 62 | (fp_poly (pts (xy -7.651841 4.744144) (xy -7.620000 4.938889) (xy -7.772392 5.314462) (xy -7.902222 5.362222) (xy -8.152604 5.133634) (xy -8.184445 4.938889) (xy -8.032053 4.563316) (xy -7.902222 4.515556) 63 | (xy -7.651841 4.744144) )(layer F.SilkS) (width 0.010000) 64 | ) 65 | (fp_poly (pts (xy 12.110104 4.856553) (xy 12.075513 5.119016) (xy 11.920072 5.331461) (xy 11.735632 5.117878) (xy 11.632074 4.702395) (xy 11.683962 4.590853) (xy 11.962960 4.544508) (xy 12.110104 4.856553) )(layer F.SilkS) (width 0.010000) 66 | ) 67 | (fp_poly (pts (xy 3.096243 4.730320) (xy 3.104444 4.797778) (xy 2.889680 5.071799) (xy 2.822222 5.080000) (xy 2.548201 4.865236) (xy 2.540000 4.797778) (xy 2.754764 4.523757) (xy 2.822222 4.515556) 68 | (xy 3.096243 4.730320) )(layer F.SilkS) (width 0.010000) 69 | ) 70 | (fp_poly (pts (xy -11.320730 4.179699) (xy -11.288889 4.374445) (xy -11.441281 4.750017) (xy -11.571111 4.797778) (xy -11.821493 4.569190) (xy -11.853333 4.374445) (xy -11.700942 3.998872) (xy -11.571111 3.951111) 71 | (xy -11.320730 4.179699) )(layer F.SilkS) (width 0.010000) 72 | ) 73 | (fp_poly (pts (xy -2.759564 4.135282) (xy -2.696009 4.209229) (xy -2.724171 4.578214) (xy -2.798118 4.641769) (xy -3.167103 4.613607) (xy -3.230658 4.539660) (xy -3.202496 4.170675) (xy -3.128549 4.107120) 74 | (xy -2.759564 4.135282) )(layer F.SilkS) (width 0.010000) 75 | ) 76 | (fp_poly (pts (xy -0.596285 3.615255) (xy -0.564445 3.810000) (xy -0.716837 4.185573) (xy -0.846667 4.233333) (xy -1.097049 4.004745) (xy -1.128889 3.810000) (xy -0.976497 3.434427) (xy -0.846667 3.386667) 77 | (xy -0.596285 3.615255) )(layer F.SilkS) (width 0.010000) 78 | ) 79 | (fp_poly (pts (xy -9.039312 3.601431) (xy -9.031111 3.668889) (xy -9.245875 3.942910) (xy -9.313333 3.951111) (xy -9.587355 3.736347) (xy -9.595556 3.668889) (xy -9.380792 3.394868) (xy -9.313333 3.386667) 80 | (xy -9.039312 3.601431) )(layer F.SilkS) (width 0.010000) 81 | ) 82 | (fp_poly (pts (xy -7.628201 3.601431) (xy -7.620000 3.668889) (xy -7.834764 3.942910) (xy -7.902222 3.951111) (xy -8.176244 3.736347) (xy -8.184445 3.668889) (xy -7.969681 3.394868) (xy -7.902222 3.386667) 83 | (xy -7.628201 3.601431) )(layer F.SilkS) (width 0.010000) 84 | ) 85 | (fp_poly (pts (xy 1.685132 3.601431) (xy 1.693333 3.668889) (xy 1.478569 3.942910) (xy 1.411111 3.951111) (xy 1.137090 3.736347) (xy 1.128889 3.668889) (xy 1.343653 3.394868) (xy 1.411111 3.386667) 86 | (xy 1.685132 3.601431) )(layer F.SilkS) (width 0.010000) 87 | ) 88 | (fp_poly (pts (xy 3.096243 3.601431) (xy 3.104444 3.668889) (xy 2.889680 3.942910) (xy 2.822222 3.951111) (xy 2.548201 3.736347) (xy 2.540000 3.668889) (xy 2.754764 3.394868) (xy 2.822222 3.386667) 89 | (xy 3.096243 3.601431) )(layer F.SilkS) (width 0.010000) 90 | ) 91 | (fp_poly (pts (xy -3.394868 3.319209) (xy -3.386667 3.386667) (xy -3.601431 3.660688) (xy -3.668889 3.668889) (xy -3.942910 3.454125) (xy -3.951111 3.386667) (xy -3.736347 3.112646) (xy -3.668889 3.104445) 92 | (xy -3.394868 3.319209) )(layer F.SilkS) (width 0.010000) 93 | ) 94 | (fp_poly (pts (xy 12.103715 3.050810) (xy 12.135555 3.245556) (xy 11.983163 3.621128) (xy 11.853333 3.668889) (xy 11.602951 3.440301) (xy 11.571111 3.245556) (xy 11.723503 2.869983) (xy 11.853333 2.822222) 95 | (xy 12.103715 3.050810) )(layer F.SilkS) (width 0.010000) 96 | ) 97 | (fp_poly (pts (xy -11.571111 2.398889) (xy -11.299655 2.759698) (xy -11.288889 2.838878) (xy -11.504152 3.096843) (xy -11.571111 3.104445) (xy -11.818793 2.874726) (xy -11.853333 2.664455) (xy -11.716514 2.372339) 98 | (xy -11.571111 2.398889) )(layer F.SilkS) (width 0.010000) 99 | ) 100 | (fp_poly (pts (xy -9.039312 2.472542) (xy -9.031111 2.540000) (xy -9.245875 2.814021) (xy -9.313333 2.822222) (xy -9.587355 2.607458) (xy -9.595556 2.540000) (xy -9.380792 2.265979) (xy -9.313333 2.257778) 101 | (xy -9.039312 2.472542) )(layer F.SilkS) (width 0.010000) 102 | ) 103 | (fp_poly (pts (xy -7.651841 2.204144) (xy -7.620000 2.398889) (xy -7.772392 2.774462) (xy -7.902222 2.822222) (xy -8.152604 2.593634) (xy -8.184445 2.398889) (xy -8.032053 2.023316) (xy -7.902222 1.975556) 104 | (xy -7.651841 2.204144) )(layer F.SilkS) (width 0.010000) 105 | ) 106 | (fp_poly (pts (xy -2.223624 2.263010) (xy -1.976778 2.551247) (xy -1.975556 2.570195) (xy -2.180186 2.794253) (xy -2.605040 2.777641) (xy -2.966559 2.534255) (xy -2.974938 2.521223) (xy -3.065303 2.155523) 107 | (xy -3.031988 2.091247) (xy -2.680875 2.061841) (xy -2.223624 2.263010) )(layer F.SilkS) (width 0.010000) 108 | ) 109 | (fp_poly (pts (xy -0.572646 2.472542) (xy -0.564445 2.540000) (xy -0.779209 2.814021) (xy -0.846667 2.822222) (xy -1.120688 2.607458) (xy -1.128889 2.540000) (xy -0.914125 2.265979) (xy -0.846667 2.257778) 110 | (xy -0.572646 2.472542) )(layer F.SilkS) (width 0.010000) 111 | ) 112 | (fp_poly (pts (xy 1.685132 2.472542) (xy 1.693333 2.540000) (xy 1.478569 2.814021) (xy 1.411111 2.822222) (xy 1.137090 2.607458) (xy 1.128889 2.540000) (xy 1.343653 2.265979) (xy 1.411111 2.257778) 113 | (xy 1.685132 2.472542) )(layer F.SilkS) (width 0.010000) 114 | ) 115 | (fp_poly (pts (xy 3.072604 2.204144) (xy 3.104444 2.398889) (xy 2.952052 2.774462) (xy 2.822222 2.822222) (xy 2.571840 2.593634) (xy 2.540000 2.398889) (xy 2.692392 2.023316) (xy 2.822222 1.975556) 116 | (xy 3.072604 2.204144) )(layer F.SilkS) (width 0.010000) 117 | ) 118 | (fp_poly (pts (xy -4.213832 2.128719) (xy -3.963585 2.401165) (xy -4.248610 2.534480) (xy -4.391101 2.540000) (xy -4.681776 2.401145) (xy -4.653822 2.253174) (xy -4.315594 2.090368) (xy -4.213832 2.128719) )(layer F.SilkS) (width 0.010000) 119 | ) 120 | (fp_poly (pts (xy 12.094944 1.333980) (xy 12.135555 1.535566) (xy 11.988207 1.921707) (xy 11.853333 1.975556) (xy 11.579189 1.772997) (xy 11.571111 1.709989) (xy 11.776258 1.327765) (xy 11.853333 1.270000) 121 | (xy 12.094944 1.333980) )(layer F.SilkS) (width 0.010000) 122 | ) 123 | (fp_poly (pts (xy -9.056563 1.187664) (xy -9.091154 1.450127) (xy -9.246594 1.662572) (xy -9.431034 1.448990) (xy -9.534593 1.033507) (xy -9.482705 0.921964) (xy -9.203707 0.875619) (xy -9.056563 1.187664) )(layer F.SilkS) (width 0.010000) 124 | ) 125 | (fp_poly (pts (xy -4.829618 1.075255) (xy -4.797778 1.270000) (xy -4.950170 1.645573) (xy -5.080000 1.693333) (xy -5.330382 1.464745) (xy -5.362222 1.270000) (xy -5.209830 0.894427) (xy -5.080000 0.846667) 126 | (xy -4.829618 1.075255) )(layer F.SilkS) (width 0.010000) 127 | ) 128 | (fp_poly (pts (xy -3.324009 1.030838) (xy -3.260453 1.104784) (xy -3.288616 1.473769) (xy -3.362562 1.537325) (xy -3.731547 1.509162) (xy -3.795103 1.435216) (xy -3.766940 1.066231) (xy -3.692994 1.002675) 129 | (xy -3.324009 1.030838) )(layer F.SilkS) (width 0.010000) 130 | ) 131 | (fp_poly (pts (xy -1.983757 1.343653) (xy -1.975556 1.411111) (xy -2.190320 1.685132) (xy -2.257778 1.693333) (xy -2.531799 1.478569) (xy -2.540000 1.411111) (xy -2.325236 1.137090) (xy -2.257778 1.128889) 132 | (xy -1.983757 1.343653) )(layer F.SilkS) (width 0.010000) 133 | ) 134 | (fp_poly (pts (xy -0.846667 0.987778) (xy -0.575210 1.348587) (xy -0.564445 1.427767) (xy -0.779707 1.685732) (xy -0.846667 1.693333) (xy -1.094349 1.463615) (xy -1.128889 1.253344) (xy -0.992070 0.961228) 135 | (xy -0.846667 0.987778) )(layer F.SilkS) (width 0.010000) 136 | ) 137 | (fp_poly (pts (xy 1.667881 1.187664) (xy 1.633291 1.450127) (xy 1.477850 1.662572) (xy 1.293410 1.448990) (xy 1.189851 1.033507) (xy 1.241739 0.921964) (xy 1.520738 0.875619) (xy 1.667881 1.187664) )(layer F.SilkS) (width 0.010000) 138 | ) 139 | (fp_poly (pts (xy -11.297090 1.061431) (xy -11.288889 1.128889) (xy -11.503653 1.402910) (xy -11.571111 1.411111) (xy -11.845132 1.196347) (xy -11.853333 1.128889) (xy -11.638569 0.854868) (xy -11.571111 0.846667) 140 | (xy -11.297090 1.061431) )(layer F.SilkS) (width 0.010000) 141 | ) 142 | (fp_poly (pts (xy -7.628201 1.061431) (xy -7.620000 1.128889) (xy -7.834764 1.402910) (xy -7.902222 1.411111) (xy -8.176244 1.196347) (xy -8.184445 1.128889) (xy -7.969681 0.854868) (xy -7.902222 0.846667) 143 | (xy -7.628201 1.061431) )(layer F.SilkS) (width 0.010000) 144 | ) 145 | (fp_poly (pts (xy 3.096243 1.061431) (xy 3.104444 1.128889) (xy 2.889680 1.402910) (xy 2.822222 1.411111) (xy 2.548201 1.196347) (xy 2.540000 1.128889) (xy 2.754764 0.854868) (xy 2.822222 0.846667) 146 | (xy 3.096243 1.061431) )(layer F.SilkS) (width 0.010000) 147 | ) 148 | (fp_poly (pts (xy 4.467795 0.999059) (xy 4.515555 1.128889) (xy 4.286967 1.379271) (xy 4.092222 1.411111) (xy 3.716649 1.258719) (xy 3.668889 1.128889) (xy 3.897477 0.878507) (xy 4.092222 0.846667) 149 | (xy 4.467795 0.999059) )(layer F.SilkS) (width 0.010000) 150 | ) 151 | (fp_poly (pts (xy 5.636243 1.061431) (xy 5.644444 1.128889) (xy 5.429680 1.402910) (xy 5.362222 1.411111) (xy 5.088201 1.196347) (xy 5.080000 1.128889) (xy 5.294764 0.854868) (xy 5.362222 0.846667) 152 | (xy 5.636243 1.061431) )(layer F.SilkS) (width 0.010000) 153 | ) 154 | (fp_poly (pts (xy 7.023715 0.793032) (xy 7.055555 0.987778) (xy 6.903163 1.363350) (xy 6.773333 1.411111) (xy 6.522951 1.182523) (xy 6.491111 0.987778) (xy 6.643503 0.612205) (xy 6.773333 0.564445) 155 | (xy 7.023715 0.793032) )(layer F.SilkS) (width 0.010000) 156 | ) 157 | (fp_poly (pts (xy 8.267790 0.487369) (xy 8.325555 0.564445) (xy 8.261576 0.806055) (xy 8.059989 0.846667) (xy 7.673849 0.699319) (xy 7.620000 0.564445) (xy 7.822559 0.290300) (xy 7.885566 0.282222) 158 | (xy 8.267790 0.487369) )(layer F.SilkS) (width 0.010000) 159 | ) 160 | (fp_poly (pts (xy -5.476784 0.136819) (xy -5.503333 0.282222) (xy -5.864143 0.553679) (xy -5.943323 0.564445) (xy -6.201288 0.349182) (xy -6.208889 0.282222) (xy -5.979171 0.034540) (xy -5.768900 0.000000) 161 | (xy -5.476784 0.136819) )(layer F.SilkS) (width 0.010000) 162 | ) 163 | (fp_poly (pts (xy -3.959312 0.214764) (xy -3.951111 0.282222) (xy -4.165875 0.556243) (xy -4.233333 0.564445) (xy -4.507355 0.349680) (xy -4.515556 0.282222) (xy -4.300792 0.008201) (xy -4.233333 0.000000) 164 | (xy -3.959312 0.214764) )(layer F.SilkS) (width 0.010000) 165 | ) 166 | (fp_poly (pts (xy -9.039312 -0.067458) (xy -9.031111 0.000000) (xy -9.245875 0.274021) (xy -9.313333 0.282222) (xy -9.587355 0.067458) (xy -9.595556 0.000000) (xy -9.380792 -0.274021) (xy -9.313333 -0.282222) 167 | (xy -9.039312 -0.067458) )(layer F.SilkS) (width 0.010000) 168 | ) 169 | (fp_poly (pts (xy -7.628201 -0.067458) (xy -7.620000 0.000000) (xy -7.834764 0.274021) (xy -7.902222 0.282222) (xy -8.176244 0.067458) (xy -8.184445 0.000000) (xy -7.969681 -0.274021) (xy -7.902222 -0.282222) 170 | (xy -7.628201 -0.067458) )(layer F.SilkS) (width 0.010000) 171 | ) 172 | (fp_poly (pts (xy -1.983757 -0.067458) (xy -1.975556 0.000000) (xy -2.190320 0.274021) (xy -2.257778 0.282222) (xy -2.531799 0.067458) (xy -2.540000 0.000000) (xy -2.325236 -0.274021) (xy -2.257778 -0.282222) 173 | (xy -1.983757 -0.067458) )(layer F.SilkS) (width 0.010000) 174 | ) 175 | (fp_poly (pts (xy -0.572646 -0.067458) (xy -0.564445 0.000000) (xy -0.779209 0.274021) (xy -0.846667 0.282222) (xy -1.120688 0.067458) (xy -1.128889 0.000000) (xy -0.914125 -0.274021) (xy -0.846667 -0.282222) 176 | (xy -0.572646 -0.067458) )(layer F.SilkS) (width 0.010000) 177 | ) 178 | (fp_poly (pts (xy 1.685132 -0.067458) (xy 1.693333 0.000000) (xy 1.478569 0.274021) (xy 1.411111 0.282222) (xy 1.137090 0.067458) (xy 1.128889 0.000000) (xy 1.343653 -0.274021) (xy 1.411111 -0.282222) 179 | (xy 1.685132 -0.067458) )(layer F.SilkS) (width 0.010000) 180 | ) 181 | (fp_poly (pts (xy 3.115468 -0.556271) (xy 3.368063 0.021422) (xy 3.211919 0.275067) (xy 3.134639 0.282222) (xy 2.831608 0.056004) (xy 2.704662 -0.181505) (xy 2.633566 -0.676286) (xy 2.818929 -0.828303) 182 | (xy 3.115468 -0.556271) )(layer F.SilkS) (width 0.010000) 183 | ) 184 | (fp_poly (pts (xy 4.578213 -0.380273) (xy 4.641769 -0.306327) (xy 4.613607 0.062658) (xy 4.539660 0.126214) (xy 4.170675 0.098051) (xy 4.107120 0.024105) (xy 4.135282 -0.344880) (xy 4.209229 -0.408436) 185 | (xy 4.578213 -0.380273) )(layer F.SilkS) (width 0.010000) 186 | ) 187 | (fp_poly (pts (xy 5.886055 -0.359354) (xy 5.926667 -0.157767) (xy 5.779318 0.228373) (xy 5.644444 0.282222) (xy 5.370300 0.079664) (xy 5.362222 0.016656) (xy 5.567369 -0.365568) (xy 5.644444 -0.423333) 188 | (xy 5.886055 -0.359354) )(layer F.SilkS) (width 0.010000) 189 | ) 190 | (fp_poly (pts (xy 9.093769 -0.380273) (xy 9.157325 -0.306327) (xy 9.129162 0.062658) (xy 9.055216 0.126214) (xy 8.686231 0.098051) (xy 8.622675 0.024105) (xy 8.650837 -0.344880) (xy 8.724784 -0.408436) 191 | (xy 9.093769 -0.380273) )(layer F.SilkS) (width 0.010000) 192 | ) 193 | (fp_poly (pts (xy 12.127354 -0.067458) (xy 12.135555 0.000000) (xy 11.920791 0.274021) (xy 11.853333 0.282222) (xy 11.579312 0.067458) (xy 11.571111 0.000000) (xy 11.785875 -0.274021) (xy 11.853333 -0.282222) 194 | (xy 12.127354 -0.067458) )(layer F.SilkS) (width 0.010000) 195 | ) 196 | (fp_poly (pts (xy 7.283929 -0.417096) (xy 7.337778 -0.282222) (xy 7.135219 -0.008078) (xy 7.072211 0.000000) (xy 6.689987 -0.205147) (xy 6.632222 -0.282222) (xy 6.696202 -0.523833) (xy 6.897788 -0.564444) 197 | (xy 7.283929 -0.417096) )(layer F.SilkS) (width 0.010000) 198 | ) 199 | (fp_poly (pts (xy -11.297090 -0.631903) (xy -11.288889 -0.564444) (xy -11.503653 -0.290423) (xy -11.571111 -0.282222) (xy -11.845132 -0.496986) (xy -11.853333 -0.564444) (xy -11.638569 -0.838466) (xy -11.571111 -0.846667) 200 | (xy -11.297090 -0.631903) )(layer F.SilkS) (width 0.010000) 201 | ) 202 | (fp_poly (pts (xy -6.217090 -0.914125) (xy -6.208889 -0.846667) (xy -6.423653 -0.572645) (xy -6.491111 -0.564444) (xy -6.765132 -0.779208) (xy -6.773333 -0.846667) (xy -6.558569 -1.120688) (xy -6.491111 -1.128889) 203 | (xy -6.217090 -0.914125) )(layer F.SilkS) (width 0.010000) 204 | ) 205 | (fp_poly (pts (xy -4.523157 -0.913626) (xy -4.515556 -0.846667) (xy -4.745274 -0.598985) (xy -4.955545 -0.564444) (xy -5.247661 -0.701263) (xy -5.221111 -0.846667) (xy -4.860302 -1.118123) (xy -4.781122 -1.128889) 206 | (xy -4.523157 -0.913626) )(layer F.SilkS) (width 0.010000) 207 | ) 208 | (fp_poly (pts (xy -9.062952 -1.464745) (xy -9.031111 -1.270000) (xy -9.183503 -0.894427) (xy -9.313333 -0.846667) (xy -9.563715 -1.075255) (xy -9.595556 -1.270000) (xy -9.443164 -1.645573) (xy -9.313333 -1.693333) 209 | (xy -9.062952 -1.464745) )(layer F.SilkS) (width 0.010000) 210 | ) 211 | (fp_poly (pts (xy -1.983757 -1.196347) (xy -1.975556 -1.128889) (xy -2.190320 -0.854868) (xy -2.257778 -0.846667) (xy -2.531799 -1.061431) (xy -2.540000 -1.128889) (xy -2.325236 -1.402910) (xy -2.257778 -1.411111) 212 | (xy -1.983757 -1.196347) )(layer F.SilkS) (width 0.010000) 213 | ) 214 | (fp_poly (pts (xy -0.572646 -1.196347) (xy -0.564445 -1.128889) (xy -0.779209 -0.854868) (xy -0.846667 -0.846667) (xy -1.120688 -1.061431) (xy -1.128889 -1.128889) (xy -0.914125 -1.402910) (xy -0.846667 -1.411111) 215 | (xy -0.572646 -1.196347) )(layer F.SilkS) (width 0.010000) 216 | ) 217 | (fp_poly (pts (xy 1.661493 -1.464745) (xy 1.693333 -1.270000) (xy 1.540941 -0.894427) (xy 1.411111 -0.846667) (xy 1.160729 -1.075255) (xy 1.128889 -1.270000) (xy 1.281281 -1.645573) (xy 1.411111 -1.693333) 218 | (xy 1.661493 -1.464745) )(layer F.SilkS) (width 0.010000) 219 | ) 220 | (fp_poly (pts (xy 8.176243 -1.196347) (xy 8.184444 -1.128889) (xy 7.969680 -0.854868) (xy 7.902222 -0.846667) (xy 7.628201 -1.061431) (xy 7.620000 -1.128889) (xy 7.834764 -1.402910) (xy 7.902222 -1.411111) 221 | (xy 8.176243 -1.196347) )(layer F.SilkS) (width 0.010000) 222 | ) 223 | (fp_poly (pts (xy 9.836075 -1.353799) (xy 9.679150 -1.099594) (xy 9.325489 -0.960672) (xy 9.199472 -1.084797) (xy 9.224425 -1.467077) (xy 9.327506 -1.560982) (xy 9.728166 -1.626805) (xy 9.836075 -1.353799) )(layer F.SilkS) (width 0.010000) 224 | ) 225 | (fp_poly (pts (xy -7.080955 -1.807685) (xy -7.083778 -1.763889) (xy -7.313643 -1.612847) (xy -7.366000 -1.622778) (xy -7.610566 -1.484570) (xy -7.620000 -1.411111) (xy -7.834764 -1.137090) (xy -7.902222 -1.128889) 226 | (xy -8.176461 -1.321465) (xy -8.184445 -1.380916) (xy -7.963382 -1.699448) (xy -7.831667 -1.768318) (xy -7.256586 -1.932394) (xy -7.080955 -1.807685) )(layer F.SilkS) (width 0.010000) 227 | ) 228 | (fp_poly (pts (xy -5.402834 -2.052687) (xy -5.362222 -1.851100) (xy -5.509570 -1.464960) (xy -5.644445 -1.411111) (xy -5.918589 -1.613670) (xy -5.926667 -1.676677) (xy -5.721520 -2.058901) (xy -5.644445 -2.116667) 229 | (xy -5.402834 -2.052687) )(layer F.SilkS) (width 0.010000) 230 | ) 231 | (fp_poly (pts (xy 3.078992 -1.916780) (xy 3.044402 -1.654317) (xy 2.888961 -1.441873) (xy 2.704521 -1.655455) (xy 2.600962 -2.070938) (xy 2.652850 -2.182480) (xy 2.931849 -2.228826) (xy 3.078992 -1.916780) )(layer F.SilkS) (width 0.010000) 232 | ) 233 | (fp_poly (pts (xy 12.127354 -1.760791) (xy 12.135555 -1.693333) (xy 11.920791 -1.419312) (xy 11.853333 -1.411111) (xy 11.579312 -1.625875) (xy 11.571111 -1.693333) (xy 11.785875 -1.967354) (xy 11.853333 -1.975555) 234 | (xy 12.127354 -1.760791) )(layer F.SilkS) (width 0.010000) 235 | ) 236 | (fp_poly (pts (xy -11.297090 -2.325236) (xy -11.288889 -2.257778) (xy -11.503653 -1.983757) (xy -11.571111 -1.975555) (xy -11.845132 -2.190320) (xy -11.853333 -2.257778) (xy -11.638569 -2.531799) (xy -11.571111 -2.540000) 237 | (xy -11.297090 -2.325236) )(layer F.SilkS) (width 0.010000) 238 | ) 239 | (fp_poly (pts (xy -2.007396 -2.593634) (xy -1.975556 -2.398889) (xy -2.127948 -2.023316) (xy -2.257778 -1.975555) (xy -2.508160 -2.204143) (xy -2.540000 -2.398889) (xy -2.387608 -2.774461) (xy -2.257778 -2.822222) 240 | (xy -2.007396 -2.593634) )(layer F.SilkS) (width 0.010000) 241 | ) 242 | (fp_poly (pts (xy 8.286191 -2.626401) (xy 8.460916 -2.237779) (xy 8.280198 -1.985364) (xy 8.201100 -1.975555) (xy 7.816155 -2.179594) (xy 7.773163 -2.238277) (xy 7.786651 -2.573279) (xy 8.085012 -2.719103) 243 | (xy 8.286191 -2.626401) )(layer F.SilkS) (width 0.010000) 244 | ) 245 | (fp_poly (pts (xy -9.039312 -2.607458) (xy -9.031111 -2.540000) (xy -9.245875 -2.265979) (xy -9.313333 -2.257778) (xy -9.587355 -2.472542) (xy -9.595556 -2.540000) (xy -9.380792 -2.814021) (xy -9.313333 -2.822222) 246 | (xy -9.039312 -2.607458) )(layer F.SilkS) (width 0.010000) 247 | ) 248 | (fp_poly (pts (xy -7.642542 -2.837215) (xy -7.620000 -2.664455) (xy -7.777796 -2.299698) (xy -7.902222 -2.257778) (xy -8.129306 -2.494864) (xy -8.184445 -2.838878) (xy -8.075801 -3.229112) (xy -7.902222 -3.245555) 249 | (xy -7.642542 -2.837215) )(layer F.SilkS) (width 0.010000) 250 | ) 251 | (fp_poly (pts (xy -0.572646 -2.607458) (xy -0.564445 -2.540000) (xy -0.779209 -2.265979) (xy -0.846667 -2.257778) (xy -1.120688 -2.472542) (xy -1.128889 -2.540000) (xy -0.914125 -2.814021) (xy -0.846667 -2.822222) 252 | (xy -0.572646 -2.607458) )(layer F.SilkS) (width 0.010000) 253 | ) 254 | (fp_poly (pts (xy 1.685132 -2.607458) (xy 1.693333 -2.540000) (xy 1.478569 -2.265979) (xy 1.411111 -2.257778) (xy 1.137090 -2.472542) (xy 1.128889 -2.540000) (xy 1.343653 -2.814021) (xy 1.411111 -2.822222) 255 | (xy 1.685132 -2.607458) )(layer F.SilkS) (width 0.010000) 256 | ) 257 | (fp_poly (pts (xy 9.830017 -2.669830) (xy 9.877778 -2.540000) (xy 9.649190 -2.289618) (xy 9.454444 -2.257778) (xy 9.078872 -2.410170) (xy 9.031111 -2.540000) (xy 9.259699 -2.790382) (xy 9.454444 -2.822222) 258 | (xy 9.830017 -2.669830) )(layer F.SilkS) (width 0.010000) 259 | ) 260 | (fp_poly (pts (xy -5.980516 -2.957096) (xy -5.926667 -2.822222) (xy -6.129226 -2.548078) (xy -6.192233 -2.540000) (xy -6.574457 -2.745147) (xy -6.632222 -2.822222) (xy -6.568243 -3.063833) (xy -6.366656 -3.104444) 261 | (xy -5.980516 -2.957096) )(layer F.SilkS) (width 0.010000) 262 | ) 263 | (fp_poly (pts (xy 3.938878 -3.748210) (xy 3.951111 -3.668889) (xy 3.722523 -3.418507) (xy 3.527778 -3.386667) (xy 3.152205 -3.234275) (xy 3.104444 -3.104444) (xy 2.889680 -2.830423) (xy 2.822222 -2.822222) 264 | (xy 2.547479 -2.946652) (xy 2.540000 -2.983492) (xy 2.746840 -3.346148) (xy 3.194288 -3.743739) (xy 3.622738 -3.949699) (xy 3.648730 -3.951111) (xy 3.938878 -3.748210) )(layer F.SilkS) (width 0.010000) 265 | ) 266 | (fp_poly (pts (xy 7.611799 -3.454125) (xy 7.620000 -3.386667) (xy 7.405236 -3.112645) (xy 7.337778 -3.104444) (xy 7.063756 -3.319208) (xy 7.055555 -3.386667) (xy 7.270319 -3.660688) (xy 7.337778 -3.668889) 267 | (xy 7.611799 -3.454125) )(layer F.SilkS) (width 0.010000) 268 | ) 269 | (fp_poly (pts (xy 12.127354 -3.454125) (xy 12.135555 -3.386667) (xy 11.920791 -3.112645) (xy 11.853333 -3.104444) (xy 11.579312 -3.319208) (xy 11.571111 -3.386667) (xy 11.785875 -3.660688) (xy 11.853333 -3.668889) 270 | (xy 12.127354 -3.454125) )(layer F.SilkS) (width 0.010000) 271 | ) 272 | (fp_poly (pts (xy -9.071723 -4.028242) (xy -9.031111 -3.826656) (xy -9.178459 -3.440515) (xy -9.313333 -3.386667) (xy -9.587478 -3.589225) (xy -9.595556 -3.652233) (xy -9.390409 -4.034457) (xy -9.313333 -4.092222) 273 | (xy -9.071723 -4.028242) )(layer F.SilkS) (width 0.010000) 274 | ) 275 | (fp_poly (pts (xy -1.983757 -3.736347) (xy -1.975556 -3.668889) (xy -2.190320 -3.394868) (xy -2.257778 -3.386667) (xy -2.531799 -3.601431) (xy -2.540000 -3.668889) (xy -2.325236 -3.942910) (xy -2.257778 -3.951111) 276 | (xy -1.983757 -3.736347) )(layer F.SilkS) (width 0.010000) 277 | ) 278 | (fp_poly (pts (xy -0.572646 -3.736347) (xy -0.564445 -3.668889) (xy -0.779209 -3.394868) (xy -0.846667 -3.386667) (xy -1.120688 -3.601431) (xy -1.128889 -3.668889) (xy -0.914125 -3.942910) (xy -0.846667 -3.951111) 279 | (xy -0.572646 -3.736347) )(layer F.SilkS) (width 0.010000) 280 | ) 281 | (fp_poly (pts (xy 1.652722 -4.028242) (xy 1.693333 -3.826656) (xy 1.545985 -3.440515) (xy 1.411111 -3.386667) (xy 1.136967 -3.589225) (xy 1.128889 -3.652233) (xy 1.334036 -4.034457) (xy 1.411111 -4.092222) 282 | (xy 1.652722 -4.028242) )(layer F.SilkS) (width 0.010000) 283 | ) 284 | (fp_poly (pts (xy 5.071799 -3.736347) (xy 5.080000 -3.668889) (xy 4.865236 -3.394868) (xy 4.797778 -3.386667) (xy 4.523756 -3.601431) (xy 4.515555 -3.668889) (xy 4.730319 -3.942910) (xy 4.797778 -3.951111) 285 | (xy 5.071799 -3.736347) )(layer F.SilkS) (width 0.010000) 286 | ) 287 | (fp_poly (pts (xy 6.482910 -3.736347) (xy 6.491111 -3.668889) (xy 6.276347 -3.394868) (xy 6.208889 -3.386667) (xy 5.934868 -3.601431) (xy 5.926667 -3.668889) (xy 6.141431 -3.942910) (xy 6.208889 -3.951111) 288 | (xy 6.482910 -3.736347) )(layer F.SilkS) (width 0.010000) 289 | ) 290 | (fp_poly (pts (xy 9.305132 -3.736347) (xy 9.313333 -3.668889) (xy 9.098569 -3.394868) (xy 9.031111 -3.386667) (xy 8.757090 -3.601431) (xy 8.748889 -3.668889) (xy 8.963653 -3.942910) (xy 9.031111 -3.951111) 291 | (xy 9.305132 -3.736347) )(layer F.SilkS) (width 0.010000) 292 | ) 293 | (fp_poly (pts (xy -11.297090 -4.018569) (xy -11.288889 -3.951111) (xy -11.503653 -3.677090) (xy -11.571111 -3.668889) (xy -11.845132 -3.883653) (xy -11.853333 -3.951111) (xy -11.638569 -4.225132) (xy -11.571111 -4.233333) 294 | (xy -11.297090 -4.018569) )(layer F.SilkS) (width 0.010000) 295 | ) 296 | (fp_poly (pts (xy -6.781535 -4.018569) (xy -6.773333 -3.951111) (xy -6.988098 -3.677090) (xy -7.055556 -3.668889) (xy -7.329577 -3.883653) (xy -7.337778 -3.951111) (xy -7.123014 -4.225132) (xy -7.055556 -4.233333) 297 | (xy -6.781535 -4.018569) )(layer F.SilkS) (width 0.010000) 298 | ) 299 | (fp_poly (pts (xy 8.352105 -4.660959) (xy 8.325555 -4.515555) (xy 7.964746 -4.244099) (xy 7.885566 -4.233333) (xy 7.627601 -4.448596) (xy 7.620000 -4.515555) (xy 7.849718 -4.763237) (xy 8.059989 -4.797778) 300 | (xy 8.352105 -4.660959) )(layer F.SilkS) (width 0.010000) 301 | ) 302 | (fp_poly (pts (xy -8.834027 -5.020393) (xy -8.748889 -4.781122) (xy -8.926464 -4.532658) (xy -9.283517 -4.620979) (xy -9.466049 -4.816554) (xy -9.542266 -5.196624) (xy -9.501482 -5.268148) (xy -9.171391 -5.289427) 303 | (xy -8.834027 -5.020393) )(layer F.SilkS) (width 0.010000) 304 | ) 305 | (fp_poly (pts (xy -7.589475 -5.016768) (xy -7.577667 -4.938889) (xy -7.797383 -4.607974) (xy -7.881056 -4.569648) (xy -8.138397 -4.705882) (xy -8.184445 -4.938889) (xy -8.041245 -5.290134) (xy -7.881056 -5.308130) 306 | (xy -7.589475 -5.016768) )(layer F.SilkS) (width 0.010000) 307 | ) 308 | (fp_poly (pts (xy -2.007396 -5.133634) (xy -1.975556 -4.938889) (xy -2.127948 -4.563316) (xy -2.257778 -4.515555) (xy -2.508160 -4.744143) (xy -2.540000 -4.938889) (xy -2.387608 -5.314461) (xy -2.257778 -5.362222) 309 | (xy -2.007396 -5.133634) )(layer F.SilkS) (width 0.010000) 310 | ) 311 | (fp_poly (pts (xy -0.606147 -5.022688) (xy -0.763072 -4.768483) (xy -1.116733 -4.629561) (xy -1.242750 -4.753686) (xy -1.217797 -5.135966) (xy -1.114716 -5.229870) (xy -0.714056 -5.295694) (xy -0.606147 -5.022688) )(layer F.SilkS) (width 0.010000) 312 | ) 313 | (fp_poly (pts (xy 1.722628 -5.163594) (xy 1.861550 -4.809933) (xy 1.737425 -4.683917) (xy 1.355145 -4.708870) (xy 1.261240 -4.811951) (xy 1.195417 -5.212611) (xy 1.468423 -5.320519) (xy 1.722628 -5.163594) )(layer F.SilkS) (width 0.010000) 314 | ) 315 | (fp_poly (pts (xy 3.072604 -5.133634) (xy 3.104444 -4.938889) (xy 2.952052 -4.563316) (xy 2.822222 -4.515555) (xy 2.571840 -4.744143) (xy 2.540000 -4.938889) (xy 2.692392 -5.314461) (xy 2.822222 -5.362222) 316 | (xy 3.072604 -5.133634) )(layer F.SilkS) (width 0.010000) 317 | ) 318 | (fp_poly (pts (xy 4.483715 -5.133634) (xy 4.515555 -4.938889) (xy 4.363163 -4.563316) (xy 4.233333 -4.515555) (xy 3.982951 -4.744143) (xy 3.951111 -4.938889) (xy 4.103503 -5.314461) (xy 4.233333 -5.362222) 319 | (xy 4.483715 -5.133634) )(layer F.SilkS) (width 0.010000) 320 | ) 321 | (fp_poly (pts (xy 5.623790 -5.007732) (xy 5.665611 -4.875389) (xy 5.466985 -4.611380) (xy 5.348111 -4.557889) (xy 5.107344 -4.646661) (xy 5.122333 -4.783667) (xy 5.369536 -5.076206) (xy 5.623790 -5.007732) )(layer F.SilkS) (width 0.010000) 322 | ) 323 | (fp_poly (pts (xy 7.047354 -4.865236) (xy 7.055555 -4.797778) (xy 6.840791 -4.523757) (xy 6.773333 -4.515555) (xy 6.499312 -4.730320) (xy 6.491111 -4.797778) (xy 6.705875 -5.071799) (xy 6.773333 -5.080000) 324 | (xy 7.047354 -4.865236) )(layer F.SilkS) (width 0.010000) 325 | ) 326 | (fp_poly (pts (xy 11.936679 -5.157075) (xy 11.994444 -5.080000) (xy 11.930465 -4.838389) (xy 11.728878 -4.797778) (xy 11.342738 -4.945126) (xy 11.288889 -5.080000) (xy 11.491447 -5.354144) (xy 11.554455 -5.362222) 327 | (xy 11.936679 -5.157075) )(layer F.SilkS) (width 0.010000) 328 | ) 329 | (fp_poly (pts (xy -10.944009 -5.742496) (xy -10.880453 -5.668549) (xy -10.908616 -5.299564) (xy -10.982562 -5.236009) (xy -11.351547 -5.264171) (xy -11.415103 -5.338118) (xy -11.386940 -5.707102) (xy -11.312994 -5.770658) 330 | (xy -10.944009 -5.742496) )(layer F.SilkS) (width 0.010000) 331 | ) 332 | (fp_poly (pts (xy 10.787102 -6.589162) (xy 10.850658 -6.515216) (xy 10.822496 -6.146231) (xy 10.748549 -6.082675) (xy 10.379564 -6.110838) (xy 10.316008 -6.184784) (xy 10.344171 -6.553769) (xy 10.418117 -6.617325) 333 | (xy 10.787102 -6.589162) )(layer F.SilkS) (width 0.010000) 334 | ) 335 | (fp_poly (pts (xy -9.636167 -6.850465) (xy -9.595556 -6.648878) (xy -9.742904 -6.262738) (xy -9.877778 -6.208889) (xy -10.151922 -6.411448) (xy -10.160000 -6.474455) (xy -9.954853 -6.856679) (xy -9.877778 -6.914444) 336 | (xy -9.636167 -6.850465) )(layer F.SilkS) (width 0.010000) 337 | ) 338 | (fp_poly (pts (xy -8.192646 -6.840791) (xy -8.184445 -6.773333) (xy -8.399209 -6.499312) (xy -8.466667 -6.491111) (xy -8.740688 -6.705875) (xy -8.748889 -6.773333) (xy -8.534125 -7.047354) (xy -8.466667 -7.055555) 339 | (xy -8.192646 -6.840791) )(layer F.SilkS) (width 0.010000) 340 | ) 341 | (fp_poly (pts (xy -6.499312 -6.840791) (xy -6.491111 -6.773333) (xy -6.705875 -6.499312) (xy -6.773333 -6.491111) (xy -7.047355 -6.705875) (xy -7.055556 -6.773333) (xy -6.840792 -7.047354) (xy -6.773333 -7.055555) 342 | (xy -6.499312 -6.840791) )(layer F.SilkS) (width 0.010000) 343 | ) 344 | (fp_poly (pts (xy -4.630117 -6.918736) (xy -4.656667 -6.773333) (xy -5.017476 -6.501877) (xy -5.096656 -6.491111) (xy -5.354621 -6.706374) (xy -5.362222 -6.773333) (xy -5.132504 -7.021015) (xy -4.922233 -7.055555) 345 | (xy -4.630117 -6.918736) )(layer F.SilkS) (width 0.010000) 346 | ) 347 | (fp_poly (pts (xy -2.869983 -6.903164) (xy -2.822222 -6.773333) (xy -3.050810 -6.522952) (xy -3.245556 -6.491111) (xy -3.621128 -6.643503) (xy -3.668889 -6.773333) (xy -3.440301 -7.023715) (xy -3.245556 -7.055555) 348 | (xy -2.869983 -6.903164) )(layer F.SilkS) (width 0.010000) 349 | ) 350 | (fp_poly (pts (xy -1.137090 -6.840791) (xy -1.128889 -6.773333) (xy -1.343653 -6.499312) (xy -1.411111 -6.491111) (xy -1.685132 -6.705875) (xy -1.693333 -6.773333) (xy -1.478569 -7.047354) (xy -1.411111 -7.055555) 351 | (xy -1.137090 -6.840791) )(layer F.SilkS) (width 0.010000) 352 | ) 353 | (fp_poly (pts (xy 0.556243 -6.840791) (xy 0.564444 -6.773333) (xy 0.349680 -6.499312) (xy 0.282222 -6.491111) (xy 0.008201 -6.705875) (xy 0.000000 -6.773333) (xy 0.214764 -7.047354) (xy 0.282222 -7.055555) 354 | (xy 0.556243 -6.840791) )(layer F.SilkS) (width 0.010000) 355 | ) 356 | (fp_poly (pts (xy 2.249577 -6.840791) (xy 2.257778 -6.773333) (xy 2.043014 -6.499312) (xy 1.975555 -6.491111) (xy 1.701534 -6.705875) (xy 1.693333 -6.773333) (xy 1.908097 -7.047354) (xy 1.975555 -7.055555) 357 | (xy 2.249577 -6.840791) )(layer F.SilkS) (width 0.010000) 358 | ) 359 | (fp_poly (pts (xy 3.942910 -6.840791) (xy 3.951111 -6.773333) (xy 3.736347 -6.499312) (xy 3.668889 -6.491111) (xy 3.394868 -6.705875) (xy 3.386667 -6.773333) (xy 3.601431 -7.047354) (xy 3.668889 -7.055555) 360 | (xy 3.942910 -6.840791) )(layer F.SilkS) (width 0.010000) 361 | ) 362 | (fp_poly (pts (xy 5.812105 -6.918736) (xy 5.785555 -6.773333) (xy 5.424746 -6.501877) (xy 5.345566 -6.491111) (xy 5.087601 -6.706374) (xy 5.080000 -6.773333) (xy 5.309718 -7.021015) (xy 5.519989 -7.055555) 363 | (xy 5.812105 -6.918736) )(layer F.SilkS) (width 0.010000) 364 | ) 365 | (fp_poly (pts (xy 7.566151 -6.908207) (xy 7.620000 -6.773333) (xy 7.417441 -6.499189) (xy 7.354434 -6.491111) (xy 6.972210 -6.696258) (xy 6.914444 -6.773333) (xy 6.978424 -7.014944) (xy 7.180011 -7.055555) 366 | (xy 7.566151 -6.908207) )(layer F.SilkS) (width 0.010000) 367 | ) 368 | (fp_poly (pts (xy 9.305132 -6.840791) (xy 9.313333 -6.773333) (xy 9.098569 -6.499312) (xy 9.031111 -6.491111) (xy 8.757090 -6.705875) (xy 8.748889 -6.773333) (xy 8.963653 -7.047354) (xy 9.031111 -7.055555) 369 | (xy 9.305132 -6.840791) )(layer F.SilkS) (width 0.010000) 370 | ) 371 | ) 372 | -------------------------------------------------------------------------------- /pcb/kicad/nixie-pipe.net: -------------------------------------------------------------------------------- 1 | (export (version D) 2 | (design 3 | (source /Users/John/Projects/JBR-Engineering/nixie-pipe/pcb/kicad/nixie-pipe.sch) 4 | (date "Saturday, 30 September 2017 'amt' 08:49:24") 5 | (tool "Eeschema 4.0.5") 6 | (sheet (number 1) (name /) (tstamps /) 7 | (title_block 8 | (title "Nixie Pipe") 9 | (company "JBR Engineering Research Ltd") 10 | (rev 2) 11 | (date 30/09/2016) 12 | (source nixie-pipe.sch) 13 | (comment (number 1) (value "")) 14 | (comment (number 2) (value "")) 15 | (comment (number 3) (value "")) 16 | (comment (number 4) (value ""))))) 17 | (components 18 | (comp (ref R1) 19 | (value 4k7) 20 | (footprint Resistors_SMD:R_0603_HandSoldering) 21 | (fields 22 | (field (name Characteristics) 1%)) 23 | (libsource (lib device) (part R)) 24 | (sheetpath (names /) (tstamps /)) 25 | (tstamp 579DEE18)) 26 | (comp (ref R2) 27 | (value 4k7) 28 | (footprint Resistors_SMD:R_0603_HandSoldering) 29 | (fields 30 | (field (name Characteristics) 1%)) 31 | (libsource (lib device) (part R)) 32 | (sheetpath (names /) (tstamps /)) 33 | (tstamp 579DEE53)) 34 | (comp (ref R3) 35 | (value 10k) 36 | (footprint Resistors_SMD:R_0603_HandSoldering) 37 | (fields 38 | (field (name Characteristics) 1%)) 39 | (libsource (lib device) (part R)) 40 | (sheetpath (names /) (tstamps /)) 41 | (tstamp 579DF109)) 42 | (comp (ref C5) 43 | (value 100nF) 44 | (footprint Capacitors_SMD:C_0603_HandSoldering) 45 | (fields 46 | (field (name Characteristics) X7R)) 47 | (libsource (lib device) (part C)) 48 | (sheetpath (names /) (tstamps /)) 49 | (tstamp 579DF18A)) 50 | (comp (ref U1) 51 | (value WS2812B) 52 | (footprint WS2812B:LED_WS2812B-PLCC4) 53 | (fields 54 | (field (name MFN) Worldsemi) 55 | (field (name MFP) WS2812B)) 56 | (libsource (lib nixie-pipe-cache) (part WS2812B)) 57 | (sheetpath (names /) (tstamps /)) 58 | (tstamp 579DF750)) 59 | (comp (ref C1) 60 | (value 100nF) 61 | (footprint Capacitors_SMD:C_0603_HandSoldering) 62 | (fields 63 | (field (name Characteristics) X7R)) 64 | (libsource (lib device) (part C)) 65 | (sheetpath (names /) (tstamps /)) 66 | (tstamp 579DF7D5)) 67 | (comp (ref U3) 68 | (value WS2812B) 69 | (footprint WS2812B:LED_WS2812B-PLCC4) 70 | (fields 71 | (field (name MFN) Worldsemi) 72 | (field (name MFP) WS2812B)) 73 | (libsource (lib nixie-pipe-cache) (part WS2812B)) 74 | (sheetpath (names /) (tstamps /)) 75 | (tstamp 579E0F69)) 76 | (comp (ref U4) 77 | (value WS2812B) 78 | (footprint WS2812B:LED_WS2812B-PLCC4) 79 | (fields 80 | (field (name MFN) Worldsemi) 81 | (field (name MFP) WS2812B)) 82 | (libsource (lib nixie-pipe-cache) (part WS2812B)) 83 | (sheetpath (names /) (tstamps /)) 84 | (tstamp 579E1B7B)) 85 | (comp (ref U5) 86 | (value WS2812B) 87 | (footprint WS2812B:LED_WS2812B-PLCC4) 88 | (fields 89 | (field (name MFN) Worldsemi) 90 | (field (name MFP) WS2812B)) 91 | (libsource (lib nixie-pipe-cache) (part WS2812B)) 92 | (sheetpath (names /) (tstamps /)) 93 | (tstamp 579E1B81)) 94 | (comp (ref U6) 95 | (value WS2812B) 96 | (footprint WS2812B:LED_WS2812B-PLCC4) 97 | (fields 98 | (field (name MFN) Worldsemi) 99 | (field (name MFP) WS2812B)) 100 | (libsource (lib nixie-pipe-cache) (part WS2812B)) 101 | (sheetpath (names /) (tstamps /)) 102 | (tstamp 579E1D24)) 103 | (comp (ref U7) 104 | (value WS2812B) 105 | (footprint WS2812B:LED_WS2812B-PLCC4) 106 | (fields 107 | (field (name MFN) Worldsemi) 108 | (field (name MFP) WS2812B)) 109 | (libsource (lib nixie-pipe-cache) (part WS2812B)) 110 | (sheetpath (names /) (tstamps /)) 111 | (tstamp 579E1D2A)) 112 | (comp (ref U8) 113 | (value WS2812B) 114 | (footprint WS2812B:LED_WS2812B-PLCC4) 115 | (fields 116 | (field (name MFN) Worldsemi) 117 | (field (name MFP) WS2812B)) 118 | (libsource (lib nixie-pipe-cache) (part WS2812B)) 119 | (sheetpath (names /) (tstamps /)) 120 | (tstamp 579E206C)) 121 | (comp (ref U9) 122 | (value WS2812B) 123 | (footprint WS2812B:LED_WS2812B-PLCC4) 124 | (fields 125 | (field (name MFN) Worldsemi) 126 | (field (name MFP) WS2812B)) 127 | (libsource (lib nixie-pipe-cache) (part WS2812B)) 128 | (sheetpath (names /) (tstamps /)) 129 | (tstamp 579E2072)) 130 | (comp (ref U10) 131 | (value WS2812B) 132 | (footprint WS2812B:LED_WS2812B-PLCC4) 133 | (fields 134 | (field (name MFN) Worldsemi) 135 | (field (name MFP) WS2812B)) 136 | (libsource (lib nixie-pipe-cache) (part WS2812B)) 137 | (sheetpath (names /) (tstamps /)) 138 | (tstamp 579E2078)) 139 | (comp (ref P2) 140 | (value CONN_01X05) 141 | (footprint Pin_Headers:Pin_Header_Straight_1x05) 142 | (fields 143 | (field (name Notes) DNF)) 144 | (libsource (lib conn) (part CONN_01X05)) 145 | (sheetpath (names /) (tstamps /)) 146 | (tstamp 579E5BCC)) 147 | (comp (ref P1) 148 | (value CONN_01X03) 149 | (footprint Pin_Headers:Pin_Header_Angled_1x03) 150 | (fields 151 | (field (name MFN) "Stelvio Kontek") 152 | (field (name MFP) 4729716140410) 153 | (field (name Supplier) RS) 154 | (field (name Characteristics) "3 pin male right angle header") 155 | (field (name Notes) "40 pin strip must be broken to 3 pin") 156 | (field (name Cost) 0.57) 157 | (field (name SPN) 156-077) 158 | (field (name Description) "3 pin male right angle 1\" header - any can be used")) 159 | (libsource (lib conn) (part CONN_01X03)) 160 | (sheetpath (names /) (tstamps /)) 161 | (tstamp 579E719A)) 162 | (comp (ref CON1) 163 | (value AVR-ISP-6) 164 | (footprint Pin_Headers:Pin_Header_Straight_2x03) 165 | (fields 166 | (field (name Notes) DNF) 167 | (field (name Description) "Pogo contact point - no header required")) 168 | (libsource (lib atmel) (part AVR-ISP-6)) 169 | (sheetpath (names /) (tstamps /)) 170 | (tstamp 579E7668)) 171 | (comp (ref P3) 172 | (value CONN_01X03) 173 | (footprint Socket_Strips:Socket_Strip_Angled_1x03) 174 | (fields 175 | (field (name MFN) Samtec) 176 | (field (name MFP) SSW-103-02-G-S-RA) 177 | (field (name Supplier) RS) 178 | (field (name Notes) "Can be replaced with equivalent 0.1\" right angle single row: http://www.ebay.co.uk/itm/282120149502?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT") 179 | (field (name Cost) 0.65) 180 | (field (name SPN) "765-5622\r") 181 | (field (name Description) "3-way female right-angle header for joining modules")) 182 | (libsource (lib conn) (part CONN_01X03)) 183 | (sheetpath (names /) (tstamps /)) 184 | (tstamp 579F0944)) 185 | (comp (ref R4) 186 | (value 470R) 187 | (footprint Resistors_SMD:R_0603_HandSoldering) 188 | (fields 189 | (field (name Characteristics) 1%)) 190 | (libsource (lib device) (part R)) 191 | (sheetpath (names /) (tstamps /)) 192 | (tstamp 579F13F1)) 193 | (comp (ref X1) 194 | (value CRYSTAL_SMD) 195 | (footprint Crystals:Crystal_SMD_5032_2Pads) 196 | (fields 197 | (field (name MFN) ABRACON) 198 | (field (name MFP) ABM3-16.000MHZ-B2-T) 199 | (field (name Supplier) RS) 200 | (field (name SPN) 2509498425)) 201 | (libsource (lib device) (part Crystal_Small)) 202 | (sheetpath (names /) (tstamps /)) 203 | (tstamp 579F9362)) 204 | (comp (ref C6) 205 | (value 18pF) 206 | (footprint Capacitors_SMD:C_0603_HandSoldering) 207 | (fields 208 | (field (name Characteristics) NPO)) 209 | (libsource (lib device) (part C)) 210 | (sheetpath (names /) (tstamps /)) 211 | (tstamp 579F95AD)) 212 | (comp (ref C7) 213 | (value 47pF) 214 | (footprint Capacitors_SMD:C_0603_HandSoldering) 215 | (fields 216 | (field (name Characteristics) NPO)) 217 | (libsource (lib device) (part C)) 218 | (sheetpath (names /) (tstamps /)) 219 | (tstamp 579F9610)) 220 | (comp (ref P5) 221 | (value CONN_01X02) 222 | (footprint WS2812B:Touch_Button) 223 | (fields 224 | (field (name Characteristics) "PCB Component") 225 | (field (name Notes) DNF)) 226 | (libsource (lib conn) (part CONN_01X02)) 227 | (sheetpath (names /) (tstamps /)) 228 | (tstamp 57A5CF45)) 229 | (comp (ref P6) 230 | (value CONN_01X02) 231 | (footprint WS2812B:Touch_Button) 232 | (fields 233 | (field (name Characteristics) "PCB Component") 234 | (field (name Notes) DNF)) 235 | (libsource (lib conn) (part CONN_01X02)) 236 | (sheetpath (names /) (tstamps /)) 237 | (tstamp 57A5CFAC)) 238 | (comp (ref R6) 239 | (value 10M) 240 | (footprint Resistors_SMD:R_0603_HandSoldering) 241 | (fields 242 | (field (name Characteristics) 1%)) 243 | (libsource (lib device) (part R)) 244 | (sheetpath (names /) (tstamps /)) 245 | (tstamp 57A5D71E)) 246 | (comp (ref R5) 247 | (value 10M) 248 | (footprint Resistors_SMD:R_0603_HandSoldering) 249 | (fields 250 | (field (name Characteristics) 1%)) 251 | (libsource (lib device) (part R)) 252 | (sheetpath (names /) (tstamps /)) 253 | (tstamp 57A5D792)) 254 | (comp (ref U11) 255 | (value DS3231_8) 256 | (footprint Housings_SOIC:SOIC-8_3.9x4.9mm_Pitch1.27mm) 257 | (datasheet https://datasheets.maximintegrated.com/en/ds/DS3231M.pdf) 258 | (fields 259 | (field (name MFN) Maxim) 260 | (field (name MFP) DS3231MZ+TRL) 261 | (field (name Supplier) Farnell) 262 | (field (name Cost) 5.94) 263 | (field (name SPN) 2515487)) 264 | (libsource (lib jbr-ics) (part DS3231_8)) 265 | (sheetpath (names /) (tstamps /)) 266 | (tstamp 57A60FD1)) 267 | (comp (ref C9) 268 | (value 100nF) 269 | (footprint Capacitors_SMD:C_0603_HandSoldering) 270 | (fields 271 | (field (name Characteristics) X7R)) 272 | (libsource (lib device) (part C)) 273 | (sheetpath (names /) (tstamps /)) 274 | (tstamp 57A6237D)) 275 | (comp (ref C8) 276 | (value 100nF) 277 | (footprint Capacitors_SMD:C_0603_HandSoldering) 278 | (fields 279 | (field (name Characteristics) X7R)) 280 | (libsource (lib device) (part C)) 281 | (sheetpath (names /) (tstamps /)) 282 | (tstamp 57A62902)) 283 | (comp (ref U12) 284 | (value WS2812B) 285 | (footprint WS2812B:LED_WS2812B-PLCC4) 286 | (datasheet https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf) 287 | (fields 288 | (field (name MFN) Worldsemi) 289 | (field (name MFP) WS2812B) 290 | (field (name Notes) "This lib just has a nice model") 291 | (field (name Cost) 0.35)) 292 | (libsource (lib nixie-pipe-cache) (part WS2812B)) 293 | (sheetpath (names /) (tstamps /)) 294 | (tstamp 57C2A486)) 295 | (comp (ref P7) 296 | (value CONN_01X02) 297 | (footprint Pin_Headers:Pin_Header_Straight_1x02) 298 | (fields 299 | (field (name Notes) DNF)) 300 | (libsource (lib conn) (part CONN_01X02)) 301 | (sheetpath (names /) (tstamps /)) 302 | (tstamp 57D8F1B8)) 303 | (comp (ref IC1) 304 | (value ATMEGA328P-A) 305 | (footprint Housings_QFP:TQFP-32_7x7mm_Pitch0.8mm) 306 | (fields 307 | (field (name MFN) Atmel) 308 | (field (name MFP) ATMEGA328P-AU) 309 | (field (name Supplier) RS) 310 | (field (name Cost) 2.07) 311 | (field (name SPN) 738-0432)) 312 | (libsource (lib atmel) (part ATMEGA328P-A)) 313 | (sheetpath (names /) (tstamps /)) 314 | (tstamp 579DEBA4)) 315 | (comp (ref P4) 316 | (value USB_OTG) 317 | (footprint Connect:USB_Micro-B_10103594-0001LF) 318 | (libsource (lib nixie-pipe-rescue) (part USB_OTG-RESCUE-nixie-pipe)) 319 | (sheetpath (names /) (tstamps /)) 320 | (tstamp 57E3E220)) 321 | (comp (ref D2) 322 | (value MBR0520) 323 | (footprint Diodes_SMD:SOD-123) 324 | (fields 325 | (field (name MFN) "ON Semiconductor") 326 | (field (name MFP) MBR0520) 327 | (field (name Supplier) RS) 328 | (field (name SPN) 739-0521) 329 | (field (name Description) "VUSB protection")) 330 | (libsource (lib device) (part D_Schottky)) 331 | (sheetpath (names /) (tstamps /)) 332 | (tstamp 57E3F26B)) 333 | (comp (ref R8) 334 | (value 27R) 335 | (footprint Resistors_SMD:R_0603_HandSoldering) 336 | (fields 337 | (field (name Characteristics) 1%)) 338 | (libsource (lib device) (part R)) 339 | (sheetpath (names /) (tstamps /)) 340 | (tstamp 57EDA724)) 341 | (comp (ref R9) 342 | (value 27R) 343 | (footprint Resistors_SMD:R_0603_HandSoldering) 344 | (fields 345 | (field (name Characteristics) 1%)) 346 | (libsource (lib device) (part R)) 347 | (sheetpath (names /) (tstamps /)) 348 | (tstamp 57EDA809)) 349 | (comp (ref C11) 350 | (value 100nF) 351 | (footprint Capacitors_SMD:C_0603_HandSoldering) 352 | (fields 353 | (field (name Characteristics) X7R)) 354 | (libsource (lib device) (part C)) 355 | (sheetpath (names /) (tstamps /)) 356 | (tstamp 58071AEE)) 357 | (comp (ref L1) 358 | (value FB) 359 | (footprint KiCad/Capacitors_SMD.pretty:C_0603_HandSoldering) 360 | (datasheet http://search.murata.co.jp/Ceramy/image/img/PDF/ENG/L0132S0193BLM18P.pdf) 361 | (fields 362 | (field (name MFN) Murata) 363 | (field (name MFP) BLM18PG331SH1D) 364 | (field (name Description) "Ferrite bead")) 365 | (libsource (lib nixie-pipe-cache) (part INDUCTOR_SMALL)) 366 | (sheetpath (names /) (tstamps /)) 367 | (tstamp 580745B7)) 368 | (comp (ref C4) 369 | (value 4.7uF) 370 | (footprint Capacitors_SMD:C_0603_HandSoldering) 371 | (fields 372 | (field (name Characteristics) X7R)) 373 | (libsource (lib device) (part CP1)) 374 | (sheetpath (names /) (tstamps /)) 375 | (tstamp 58075AEC)) 376 | (comp (ref C2) 377 | (value 47pF) 378 | (footprint Capacitors_SMD:C_0603_HandSoldering) 379 | (fields 380 | (field (name Characteristics) NPO)) 381 | (libsource (lib device) (part C)) 382 | (sheetpath (names /) (tstamps /)) 383 | (tstamp 58076143)) 384 | (comp (ref C3) 385 | (value 47pF) 386 | (footprint Capacitors_SMD:C_0603_HandSoldering) 387 | (fields 388 | (field (name Characteristics) NPO)) 389 | (libsource (lib device) (part C)) 390 | (sheetpath (names /) (tstamps /)) 391 | (tstamp 580761FD)) 392 | (comp (ref C10) 393 | (value 100nF) 394 | (footprint Capacitors_SMD:C_0603_HandSoldering) 395 | (fields 396 | (field (name Characteristics) X7R)) 397 | (libsource (lib device) (part C)) 398 | (sheetpath (names /) (tstamps /)) 399 | (tstamp 58077073)) 400 | (comp (ref U2) 401 | (value FT230XS) 402 | (footprint KiCad/Housings_SSOP.pretty:SSOP-16_3.9x4.9mm_Pitch0.635mm) 403 | (datasheet http://www.ftdichip.com/Support/Documents/DataSheets/ICs/DS_FT230X.pdf) 404 | (fields 405 | (field (name MFN) FTDI) 406 | (field (name MFP) FT230XS) 407 | (field (name Supplier) RS) 408 | (field (name Characteristics) SSOP-16) 409 | (field (name Cost) 1.35) 410 | (field (name SPN) 757-0010) 411 | (field (name Description) "USB serial converter")) 412 | (libsource (lib ftdi) (part FT230XS)) 413 | (sheetpath (names /) (tstamps /)) 414 | (tstamp 580A5E84)) 415 | (comp (ref D3) 416 | (value 3.9V) 417 | (footprint KiCad/Diodes_SMD.pretty:SOD-123) 418 | (datasheet http://www.diodes.com/_files/datasheets/ds18004.pdf) 419 | (fields 420 | (field (name MFN) "ON Semiconductor") 421 | (field (name MFP) MMSZ5228BT1G) 422 | (field (name Supplier) RS) 423 | (field (name Cost) 0.022) 424 | (field (name SPN) 121-9479) 425 | (field (name Description) "3.9V clamp to bring to VH threshold")) 426 | (libsource (lib nixie-pipe-cache) (part ZENERsmall)) 427 | (sheetpath (names /) (tstamps /)) 428 | (tstamp 586A1E15)) 429 | (comp (ref R7) 430 | (value 680R) 431 | (footprint KiCad/Resistors_SMD.pretty:R_0603_HandSoldering) 432 | (fields 433 | (field (name Characteristics) 1%)) 434 | (libsource (lib device) (part R)) 435 | (sheetpath (names /) (tstamps /)) 436 | (tstamp 586A255A))) 437 | (libparts 438 | (libpart (lib atmel) (part ATMEGA168A-A) 439 | (aliases 440 | (alias ATMEGA48A-A) 441 | (alias ATMEGA48PA-A) 442 | (alias ATMEGA88A-A) 443 | (alias ATMEGA88PA-A) 444 | (alias ATMEGA168PA-A) 445 | (alias ATMEGA328-A) 446 | (alias ATMEGA328P-A)) 447 | (description "TQFP32, 16k Flash, 1kB SRAM, 512B EEPROM") 448 | (docs http://www.atmel.com/images/atmel-8271-8-bit-avr-microcontroller-atmega48a-48pa-88a-88pa-168a-168pa-328-328p_datasheet.pdf) 449 | (fields 450 | (field (name Reference) IC) 451 | (field (name Value) ATMEGA168A-A) 452 | (field (name Footprint) TQFP32)) 453 | (pins 454 | (pin (num 1) (name "(PCINT19/OC2B/INT1)PD3") (type BiDi)) 455 | (pin (num 2) (name "(PCINT20/XCK/T0)PD4") (type BiDi)) 456 | (pin (num 3) (name GND) (type power_in)) 457 | (pin (num 4) (name VCC) (type power_in)) 458 | (pin (num 5) (name GND) (type power_in)) 459 | (pin (num 6) (name VCC) (type power_in)) 460 | (pin (num 7) (name "(PCINT6/XTAL1/TOSC1)PB6") (type BiDi)) 461 | (pin (num 8) (name "(PCINT7/XTAL2/TOSC2)PB7") (type BiDi)) 462 | (pin (num 9) (name "(PCINT21/OC0B/T1)PD5") (type BiDi)) 463 | (pin (num 10) (name "(PCINT22/OC0A/AIN0)PD6") (type BiDi)) 464 | (pin (num 11) (name "(PCINT23/AIN1)PD7") (type BiDi)) 465 | (pin (num 12) (name "(PCINT0/CLKO/ICP1)PB0") (type BiDi)) 466 | (pin (num 13) (name "(PCINT1/OC1A)PB1") (type BiDi)) 467 | (pin (num 14) (name "(PCINT2/OC1B/~SS~)PB2") (type BiDi)) 468 | (pin (num 15) (name "(PCINT3/OC2A/MOSI)PB3") (type BiDi)) 469 | (pin (num 16) (name "(PCINT4/MISO)PB4") (type BiDi)) 470 | (pin (num 17) (name "(PCINT5/SCK)PB5") (type BiDi)) 471 | (pin (num 18) (name AVCC) (type power_in)) 472 | (pin (num 19) (name ADC6) (type input)) 473 | (pin (num 20) (name AREF) (type BiDi)) 474 | (pin (num 21) (name GND) (type power_in)) 475 | (pin (num 22) (name ADC7) (type input)) 476 | (pin (num 23) (name "(PCINT8/ADC0)PC0") (type BiDi)) 477 | (pin (num 24) (name "(PCINT9/ADC1)PC1") (type BiDi)) 478 | (pin (num 25) (name "(PCINT10/ADC2)PC2") (type BiDi)) 479 | (pin (num 26) (name "(PCINT11/ADC3)PC3") (type BiDi)) 480 | (pin (num 27) (name "(PCINT12/SDA/ADC4)PC4") (type BiDi)) 481 | (pin (num 28) (name "(PCINT13/SCL/ADC5)PC5") (type BiDi)) 482 | (pin (num 29) (name "(PCINT14/~RESET~)PC6") (type BiDi)) 483 | (pin (num 30) (name "(PCINT16/RXD)PD0") (type BiDi)) 484 | (pin (num 31) (name "(PCINT17/TXD)PD1") (type BiDi)) 485 | (pin (num 32) (name "(PCINT18/INT0)PD2") (type BiDi)))) 486 | (libpart (lib atmel) (part AVR-ISP-6) 487 | (description "Standard IDC6 Male Connector, ATMEL ISP 6pin") 488 | (fields 489 | (field (name Reference) CON) 490 | (field (name Value) AVR-ISP-6) 491 | (field (name Footprint) AVR-ISP-6)) 492 | (pins 493 | (pin (num 1) (name ~) (type passive)) 494 | (pin (num 2) (name ~) (type passive)) 495 | (pin (num 3) (name ~) (type passive)) 496 | (pin (num 4) (name ~) (type passive)) 497 | (pin (num 5) (name ~) (type passive)) 498 | (pin (num 6) (name ~) (type passive)))) 499 | (libpart (lib device) (part C) 500 | (description "Unpolarized capacitor") 501 | (footprints 502 | (fp C?) 503 | (fp C_????_*) 504 | (fp C_????) 505 | (fp SMD*_c) 506 | (fp Capacitor*)) 507 | (fields 508 | (field (name Reference) C) 509 | (field (name Value) C)) 510 | (pins 511 | (pin (num 1) (name ~) (type passive)) 512 | (pin (num 2) (name ~) (type passive)))) 513 | (libpart (lib conn) (part CONN_01X02) 514 | (description "Connector, single row, 01x02") 515 | (footprints 516 | (fp Pin_Header_Straight_1X02) 517 | (fp Pin_Header_Angled_1X02) 518 | (fp Socket_Strip_Straight_1X02) 519 | (fp Socket_Strip_Angled_1X02)) 520 | (fields 521 | (field (name Reference) P) 522 | (field (name Value) CONN_01X02)) 523 | (pins 524 | (pin (num 1) (name P1) (type passive)) 525 | (pin (num 2) (name P2) (type passive)))) 526 | (libpart (lib conn) (part CONN_01X03) 527 | (description "Connector, single row, 01x03") 528 | (footprints 529 | (fp Pin_Header_Straight_1X03) 530 | (fp Pin_Header_Angled_1X03) 531 | (fp Socket_Strip_Straight_1X03) 532 | (fp Socket_Strip_Angled_1X03)) 533 | (fields 534 | (field (name Reference) P) 535 | (field (name Value) CONN_01X03)) 536 | (pins 537 | (pin (num 1) (name P1) (type passive)) 538 | (pin (num 2) (name P2) (type passive)) 539 | (pin (num 3) (name P3) (type passive)))) 540 | (libpart (lib conn) (part CONN_01X05) 541 | (description "Connector, single row, 01x05") 542 | (footprints 543 | (fp Pin_Header_Straight_1X05) 544 | (fp Pin_Header_Angled_1X05) 545 | (fp Socket_Strip_Straight_1X05) 546 | (fp Socket_Strip_Angled_1X05)) 547 | (fields 548 | (field (name Reference) P) 549 | (field (name Value) CONN_01X05)) 550 | (pins 551 | (pin (num 1) (name P1) (type passive)) 552 | (pin (num 2) (name P2) (type passive)) 553 | (pin (num 3) (name P3) (type passive)) 554 | (pin (num 4) (name P4) (type passive)) 555 | (pin (num 5) (name P5) (type passive)))) 556 | (libpart (lib device) (part CP1) 557 | (description "Polarised capacitor") 558 | (footprints 559 | (fp SMD*_Pol) 560 | (fp C_Axial*) 561 | (fp C_Radial*) 562 | (fp c_elec*) 563 | (fp C*elec) 564 | (fp TantalC*) 565 | (fp CP*)) 566 | (fields 567 | (field (name Reference) C) 568 | (field (name Value) CP1)) 569 | (pins 570 | (pin (num 1) (name ~) (type passive)) 571 | (pin (num 2) (name ~) (type passive)))) 572 | (libpart (lib device) (part Crystal_Small) 573 | (description "Two pin crystal, small symbol") 574 | (footprints 575 | (fp Crystal*)) 576 | (fields 577 | (field (name Reference) Y) 578 | (field (name Value) Crystal_Small)) 579 | (pins 580 | (pin (num 1) (name 1) (type passive)) 581 | (pin (num 2) (name 2) (type passive)))) 582 | (libpart (lib jbr-ics) (part DS3231_8) 583 | (footprints 584 | (fp W16#H2)) 585 | (fields 586 | (field (name Reference) U) 587 | (field (name Value) DS3231_8)) 588 | (pins 589 | (pin (num 1) (name 32kHz) (type BiDi)) 590 | (pin (num 2) (name VCC) (type power_in)) 591 | (pin (num 3) (name ~INT~/SQW) (type BiDi)) 592 | (pin (num 4) (name ~RST) (type BiDi)) 593 | (pin (num 5) (name GND) (type power_in)) 594 | (pin (num 6) (name V.BAT) (type power_in)) 595 | (pin (num 7) (name SDA) (type BiDi)) 596 | (pin (num 8) (name SCL) (type BiDi)))) 597 | (libpart (lib device) (part D_Schottky) 598 | (description "Schottky diode") 599 | (footprints 600 | (fp Diode_*) 601 | (fp D-*) 602 | (fp *SingleDiode) 603 | (fp *_Diode_*) 604 | (fp *SingleDiode*) 605 | (fp D_*)) 606 | (fields 607 | (field (name Reference) D) 608 | (field (name Value) D_Schottky)) 609 | (pins 610 | (pin (num 1) (name K) (type passive)) 611 | (pin (num 2) (name A) (type passive)))) 612 | (libpart (lib ftdi) (part FT230XS) 613 | (description "Full Speed USB to Basic UART, SSOP-16") 614 | (docs http://www.ftdichip.com/Products/ICs/FT230X.html) 615 | (footprints 616 | (fp SSOP*)) 617 | (fields 618 | (field (name Reference) U) 619 | (field (name Value) FT230XS) 620 | (field (name Footprint) SSOP-16)) 621 | (pins 622 | (pin (num 1) (name TXD) (type output)) 623 | (pin (num 2) (name ~RTS) (type input)) 624 | (pin (num 3) (name VCCIO) (type power_in)) 625 | (pin (num 4) (name RXD) (type input)) 626 | (pin (num 5) (name GND) (type power_in)) 627 | (pin (num 6) (name ~CTS) (type input)) 628 | (pin (num 7) (name CBUS2) (type BiDi)) 629 | (pin (num 8) (name USBDP) (type BiDi)) 630 | (pin (num 9) (name USBDM) (type BiDi)) 631 | (pin (num 10) (name 3V3OUT) (type power_out)) 632 | (pin (num 11) (name ~RESET) (type input)) 633 | (pin (num 12) (name VCC) (type power_in)) 634 | (pin (num 13) (name GND) (type power_in)) 635 | (pin (num 14) (name CBUS1) (type BiDi)) 636 | (pin (num 15) (name CBUS0) (type BiDi)) 637 | (pin (num 16) (name CBUS3) (type BiDi)))) 638 | (libpart (lib nixie-pipe-cache) (part INDUCTOR_SMALL) 639 | (fields 640 | (field (name Reference) L) 641 | (field (name Value) INDUCTOR_SMALL)) 642 | (pins 643 | (pin (num 1) (name 1) (type input)) 644 | (pin (num 2) (name 2) (type input)))) 645 | (libpart (lib device) (part R) 646 | (description Resistor) 647 | (footprints 648 | (fp R_*) 649 | (fp Resistor_*)) 650 | (fields 651 | (field (name Reference) R) 652 | (field (name Value) R)) 653 | (pins 654 | (pin (num 1) (name ~) (type passive)) 655 | (pin (num 2) (name ~) (type passive)))) 656 | (libpart (lib nixie-pipe-rescue) (part USB_OTG-RESCUE-nixie-pipe) 657 | (footprints 658 | (fp USB*)) 659 | (fields 660 | (field (name Reference) P) 661 | (field (name Value) USB_OTG-RESCUE-nixie-pipe)) 662 | (pins 663 | (pin (num 1) (name VCC) (type power_out)) 664 | (pin (num 2) (name D-) (type passive)) 665 | (pin (num 3) (name D+) (type passive)) 666 | (pin (num 4) (name ID) (type power_in)) 667 | (pin (num 5) (name GND) (type power_in)) 668 | (pin (num 6) (name shield) (type passive)))) 669 | (libpart (lib nixie-pipe-cache) (part WS2812B) 670 | (fields 671 | (field (name Reference) U) 672 | (field (name Value) WS2812B)) 673 | (pins 674 | (pin (num 1) (name VDD) (type power_in)) 675 | (pin (num 2) (name DOUT) (type output)) 676 | (pin (num 3) (name GND) (type power_in)) 677 | (pin (num 4) (name DIN) (type input)))) 678 | (libpart (lib nixie-pipe-cache) (part ZENERsmall) 679 | (footprints 680 | (fp D?) 681 | (fp SO*) 682 | (fp SM*)) 683 | (fields 684 | (field (name Reference) D) 685 | (field (name Value) ZENERsmall)) 686 | (pins 687 | (pin (num 1) (name K) (type passive)) 688 | (pin (num 2) (name A) (type passive))))) 689 | (libraries 690 | (library (logical conn) 691 | (uri "/Library/Application Support/kicad/library/conn.lib")) 692 | (library (logical ftdi) 693 | (uri "/Library/Application Support/kicad/library/ftdi.lib")) 694 | (library (logical jbr-ics) 695 | (uri /Users/John/Dropbox/Documents/libs/KiCad/kicad_footprints/tunaf1sh/jbr-ics.lib)) 696 | (library (logical nixie-pipe-cache) 697 | (uri /Users/John/Projects/JBR-Engineering/nixie-pipe/pcb/kicad/nixie-pipe-cache.lib)) 698 | (library (logical nixie-pipe-rescue) 699 | (uri /Users/John/Projects/JBR-Engineering/nixie-pipe/pcb/kicad/nixie-pipe-rescue.lib)) 700 | (library (logical device) 701 | (uri "/Library/Application Support/kicad/library/device.lib")) 702 | (library (logical atmel) 703 | (uri "/Library/Application Support/kicad/library/atmel.lib"))) 704 | (nets 705 | (net (code 1) (name "Net-(P1-Pad2)") 706 | (node (ref P1) (pin 2)) 707 | (node (ref U10) (pin 2))) 708 | (net (code 2) (name "Net-(U10-Pad4)") 709 | (node (ref U9) (pin 2)) 710 | (node (ref U10) (pin 4))) 711 | (net (code 3) (name "Net-(U8-Pad2)") 712 | (node (ref U9) (pin 4)) 713 | (node (ref U8) (pin 2))) 714 | (net (code 4) (name "Net-(U7-Pad2)") 715 | (node (ref U8) (pin 4)) 716 | (node (ref U7) (pin 2))) 717 | (net (code 5) (name "Net-(U6-Pad2)") 718 | (node (ref U7) (pin 4)) 719 | (node (ref U6) (pin 2))) 720 | (net (code 6) (name "Net-(U5-Pad2)") 721 | (node (ref U6) (pin 4)) 722 | (node (ref U5) (pin 2))) 723 | (net (code 7) (name "Net-(IC1-Pad10)") 724 | (node (ref R4) (pin 2)) 725 | (node (ref IC1) (pin 10))) 726 | (net (code 8) (name NRST) 727 | (node (ref R3) (pin 2)) 728 | (node (ref IC1) (pin 29)) 729 | (node (ref C5) (pin 1)) 730 | (node (ref CON1) (pin 5))) 731 | (net (code 9) (name SCK) 732 | (node (ref CON1) (pin 3)) 733 | (node (ref IC1) (pin 17))) 734 | (net (code 10) (name MISO) 735 | (node (ref IC1) (pin 16)) 736 | (node (ref CON1) (pin 1))) 737 | (net (code 11) (name MOSI) 738 | (node (ref IC1) (pin 15)) 739 | (node (ref CON1) (pin 4))) 740 | (net (code 12) (name "Net-(U3-Pad2)") 741 | (node (ref U4) (pin 4)) 742 | (node (ref U3) (pin 2))) 743 | (net (code 13) (name "Net-(U1-Pad2)") 744 | (node (ref U1) (pin 2)) 745 | (node (ref U3) (pin 4))) 746 | (net (code 14) (name "Net-(U4-Pad2)") 747 | (node (ref U4) (pin 2)) 748 | (node (ref U5) (pin 4))) 749 | (net (code 15) (name "Net-(C2-Pad1)") 750 | (node (ref C2) (pin 1)) 751 | (node (ref R8) (pin 2)) 752 | (node (ref P4) (pin 3))) 753 | (net (code 16) (name "Net-(C3-Pad1)") 754 | (node (ref P4) (pin 2)) 755 | (node (ref R9) (pin 2)) 756 | (node (ref C3) (pin 1))) 757 | (net (code 17) (name "Net-(U2-Pad16)") 758 | (node (ref U2) (pin 16))) 759 | (net (code 18) (name "Net-(U2-Pad7)") 760 | (node (ref U2) (pin 7))) 761 | (net (code 19) (name "Net-(U2-Pad14)") 762 | (node (ref U2) (pin 14))) 763 | (net (code 20) (name "Net-(U2-Pad15)") 764 | (node (ref U2) (pin 15))) 765 | (net (code 21) (name "Net-(U2-Pad6)") 766 | (node (ref U2) (pin 6))) 767 | (net (code 22) (name RTS) 768 | (node (ref U2) (pin 2)) 769 | (node (ref C5) (pin 2))) 770 | (net (code 23) (name GND) 771 | (node (ref U2) (pin 5)) 772 | (node (ref IC1) (pin 21)) 773 | (node (ref U2) (pin 13)) 774 | (node (ref D3) (pin 2)) 775 | (node (ref P2) (pin 5)) 776 | (node (ref U5) (pin 3)) 777 | (node (ref U6) (pin 3)) 778 | (node (ref U10) (pin 3)) 779 | (node (ref U1) (pin 3)) 780 | (node (ref C1) (pin 1)) 781 | (node (ref P1) (pin 3)) 782 | (node (ref U9) (pin 3)) 783 | (node (ref U8) (pin 3)) 784 | (node (ref CON1) (pin 6)) 785 | (node (ref U7) (pin 3)) 786 | (node (ref P3) (pin 3)) 787 | (node (ref P4) (pin 5)) 788 | (node (ref U3) (pin 3)) 789 | (node (ref U4) (pin 3)) 790 | (node (ref C6) (pin 2)) 791 | (node (ref C7) (pin 2)) 792 | (node (ref P5) (pin 2)) 793 | (node (ref P6) (pin 2)) 794 | (node (ref U11) (pin 5)) 795 | (node (ref P4) (pin 6)) 796 | (node (ref C9) (pin 1)) 797 | (node (ref C8) (pin 1)) 798 | (node (ref U12) (pin 3)) 799 | (node (ref IC1) (pin 3)) 800 | (node (ref IC1) (pin 5)) 801 | (node (ref C3) (pin 2)) 802 | (node (ref C2) (pin 2)) 803 | (node (ref C4) (pin 2)) 804 | (node (ref C11) (pin 2)) 805 | (node (ref C10) (pin 2))) 806 | (net (code 24) (name "Net-(R9-Pad1)") 807 | (node (ref R9) (pin 1)) 808 | (node (ref U2) (pin 9))) 809 | (net (code 25) (name "Net-(R8-Pad1)") 810 | (node (ref R8) (pin 1)) 811 | (node (ref U2) (pin 8))) 812 | (net (code 26) (name TB1) 813 | (node (ref IC1) (pin 1)) 814 | (node (ref R5) (pin 2)) 815 | (node (ref P6) (pin 1))) 816 | (net (code 27) (name TB0) 817 | (node (ref R6) (pin 2)) 818 | (node (ref P5) (pin 1)) 819 | (node (ref IC1) (pin 32))) 820 | (net (code 28) (name "Net-(D3-Pad1)") 821 | (node (ref D3) (pin 1)) 822 | (node (ref R7) (pin 2)) 823 | (node (ref R6) (pin 1)) 824 | (node (ref R5) (pin 1))) 825 | (net (code 29) (name "Net-(L1-Pad1)") 826 | (node (ref L1) (pin 1)) 827 | (node (ref P4) (pin 1))) 828 | (net (code 30) (name "Net-(C11-Pad1)") 829 | (node (ref U2) (pin 11)) 830 | (node (ref U2) (pin 10)) 831 | (node (ref U2) (pin 3)) 832 | (node (ref C11) (pin 1))) 833 | (net (code 31) (name "Net-(U1-Pad4)") 834 | (node (ref U12) (pin 2)) 835 | (node (ref U1) (pin 4))) 836 | (net (code 32) (name VCC) 837 | (node (ref C9) (pin 2)) 838 | (node (ref U4) (pin 1)) 839 | (node (ref R3) (pin 1)) 840 | (node (ref U5) (pin 1)) 841 | (node (ref U6) (pin 1)) 842 | (node (ref R2) (pin 1)) 843 | (node (ref R1) (pin 1)) 844 | (node (ref C8) (pin 2)) 845 | (node (ref U12) (pin 1)) 846 | (node (ref IC1) (pin 18)) 847 | (node (ref IC1) (pin 4)) 848 | (node (ref U7) (pin 1)) 849 | (node (ref D2) (pin 1)) 850 | (node (ref U11) (pin 2)) 851 | (node (ref U3) (pin 1)) 852 | (node (ref IC1) (pin 6)) 853 | (node (ref R7) (pin 1)) 854 | (node (ref P2) (pin 1)) 855 | (node (ref U10) (pin 1)) 856 | (node (ref U9) (pin 1)) 857 | (node (ref U8) (pin 1)) 858 | (node (ref P1) (pin 1)) 859 | (node (ref U1) (pin 1)) 860 | (node (ref C1) (pin 2)) 861 | (node (ref CON1) (pin 2)) 862 | (node (ref P3) (pin 1))) 863 | (net (code 33) (name "Net-(P2-Pad4)") 864 | (node (ref P2) (pin 4))) 865 | (net (code 34) (name SCL) 866 | (node (ref U11) (pin 8)) 867 | (node (ref R2) (pin 2)) 868 | (node (ref P2) (pin 3)) 869 | (node (ref IC1) (pin 28))) 870 | (net (code 35) (name SDA) 871 | (node (ref R1) (pin 2)) 872 | (node (ref U11) (pin 7)) 873 | (node (ref P2) (pin 2)) 874 | (node (ref IC1) (pin 27))) 875 | (net (code 36) (name PIXELS) 876 | (node (ref R4) (pin 1)) 877 | (node (ref P3) (pin 2)) 878 | (node (ref U12) (pin 4))) 879 | (net (code 37) (name "Net-(IC1-Pad9)") 880 | (node (ref IC1) (pin 9))) 881 | (net (code 38) (name "Net-(IC1-Pad26)") 882 | (node (ref IC1) (pin 26))) 883 | (net (code 39) (name "Net-(IC1-Pad25)") 884 | (node (ref IC1) (pin 25))) 885 | (net (code 40) (name "Net-(IC1-Pad24)") 886 | (node (ref IC1) (pin 24))) 887 | (net (code 41) (name "Net-(IC1-Pad23)") 888 | (node (ref IC1) (pin 23))) 889 | (net (code 42) (name "Net-(IC1-Pad14)") 890 | (node (ref IC1) (pin 14))) 891 | (net (code 43) (name "Net-(IC1-Pad13)") 892 | (node (ref IC1) (pin 13))) 893 | (net (code 44) (name "Net-(IC1-Pad12)") 894 | (node (ref IC1) (pin 12))) 895 | (net (code 45) (name "Net-(P4-Pad4)") 896 | (node (ref P4) (pin 4))) 897 | (net (code 46) (name "Net-(IC1-Pad19)") 898 | (node (ref IC1) (pin 19))) 899 | (net (code 47) (name "Net-(IC1-Pad22)") 900 | (node (ref IC1) (pin 22))) 901 | (net (code 48) (name "Net-(IC1-Pad11)") 902 | (node (ref IC1) (pin 11))) 903 | (net (code 49) (name "Net-(IC1-Pad20)") 904 | (node (ref IC1) (pin 20))) 905 | (net (code 50) (name /VUSB) 906 | (node (ref U2) (pin 12)) 907 | (node (ref C10) (pin 1)) 908 | (node (ref C4) (pin 1)) 909 | (node (ref L1) (pin 2)) 910 | (node (ref D2) (pin 2))) 911 | (net (code 51) (name "Net-(IC1-Pad2)") 912 | (node (ref IC1) (pin 2))) 913 | (net (code 52) (name "Net-(U11-Pad4)") 914 | (node (ref U11) (pin 4))) 915 | (net (code 53) (name "Net-(U11-Pad3)") 916 | (node (ref U11) (pin 3))) 917 | (net (code 54) (name "Net-(U11-Pad1)") 918 | (node (ref U11) (pin 1))) 919 | (net (code 55) (name XTAL2) 920 | (node (ref IC1) (pin 8)) 921 | (node (ref X1) (pin 2)) 922 | (node (ref C7) (pin 1))) 923 | (net (code 56) (name XTAL1) 924 | (node (ref C6) (pin 1)) 925 | (node (ref X1) (pin 1)) 926 | (node (ref IC1) (pin 7))) 927 | (net (code 57) (name RXD) 928 | (node (ref P7) (pin 2)) 929 | (node (ref U2) (pin 1)) 930 | (node (ref IC1) (pin 30))) 931 | (net (code 58) (name TXD) 932 | (node (ref P7) (pin 1)) 933 | (node (ref U2) (pin 4)) 934 | (node (ref IC1) (pin 31))) 935 | (net (code 61) (name "Net-(U11-Pad6)") 936 | (node (ref U11) (pin 6))))) --------------------------------------------------------------------------------