├── .gitignore
├── .vscode
├── extensions.json
├── launch.json
└── settings.json
├── README.md
├── doc
├── 44buttonIR.jpg
├── BranchController.jpg
└── OpenPixelControl.html
├── gerber
├── branchControllerPCB-B_Cu.gbr
├── branchControllerPCB-B_Mask.gbr
├── branchControllerPCB-B_Paste.gbr
├── branchControllerPCB-B_SilkS.gbr
├── branchControllerPCB-Edge_Cuts.gbr
├── branchControllerPCB-F_Cu.gbr
├── branchControllerPCB-F_Mask.gbr
├── branchControllerPCB-F_Paste.gbr
├── branchControllerPCB-F_SilkS.gbr
├── branchControllerPCB-In1_Cu.gbr
├── branchControllerPCB-In2_Cu.gbr
├── branchControllerPCB-NPTH.drl
└── branchControllerPCB-PTH.drl
├── include
├── BranchController.h
└── README.md
├── kicad
├── BranchControllerSchematic.png
├── branchController.dcm
├── branchController.lib
├── branchController.pretty
│ ├── 4116R-1-101LF.kicad_mod
│ ├── ASSMANN_A-2004-1-4-LP-N-R.kicad_mod
│ ├── AdaFruit4400LED.kicad_mod
│ ├── SN74HCT245N.kicad_mod
│ └── WIZ850io.kicad_mod
├── branchControllerPCB-cache.lib
├── branchControllerPCB.kicad_pcb
├── branchControllerPCB.kicad_pcb-bak
├── branchControllerPCB.pro
├── branchControllerPCB.sch
├── branchControllerPCB.sch-bak
├── fp-info-cache
├── fp-lib-table
├── sym-lib-table
└── teensy.pretty
│ └── Teensy30_31_32_LC.kicad_mod
├── lib
├── Display
│ ├── Display.cpp
│ └── Display.h
├── Heartbeat
│ ├── Heartbeat.cpp
│ └── Heartbeat.h
├── IRremote_ID4
│ ├── .library.json
│ ├── Contributing.md
│ ├── Contributors.md
│ ├── IRremote.cpp
│ ├── IRremote.h
│ ├── IRremoteInt.h
│ ├── ISSUE_TEMPLATE.md
│ ├── LICENSE.txt
│ ├── README.md
│ ├── boarddefs.h
│ ├── changelog.md
│ ├── irPronto.cpp
│ ├── irRecv.cpp
│ ├── ir_NEC.cpp
│ ├── keywords.txt
│ ├── library.json
│ └── library.properties
├── LED
│ ├── LED.cpp
│ └── LED.h
├── OpenPixelControl
│ ├── OpenPixelControl.cpp
│ └── OpenPixelControl.h
├── Persist
│ ├── Persist.cpp
│ └── Persist.h
├── README
├── Remote
│ ├── Remote.cpp
│ └── Remote.h
├── ResizeableOctoWS2811Controller
│ └── ResizeableOctoWS2811Controller.h
├── TcpServer
│ ├── MacAddress.cpp
│ ├── MacAddress.h
│ ├── TcpServer.cpp
│ └── TcpServer.h
├── Util
│ ├── Util.cpp
│ └── Util.h
└── WebServer
│ ├── WebServer.cpp
│ └── WebServer.h
├── platformio.ini
└── src
└── BranchController.cpp
/.gitignore:
--------------------------------------------------------------------------------
1 | .pioenvs
2 | .piolibdeps
3 | *.[oa]
4 | .pio/build/*
5 | .DS_Store
6 | branchController.code-workspace
7 | .vscode/c_cpp_properties.json
8 | .vscode/launch.json
9 |
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | // See http://go.microsoft.com/fwlink/?LinkId=827846
3 | // for the documentation about the extensions.json format
4 | "recommendations": [
5 | "platformio.platformio-ide"
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | // AUTOMATICALLY GENERATED FILE. PLEASE DO NOT MODIFY IT MANUALLY
2 |
3 | // PIO Unified Debugger
4 | //
5 | // Documentation: https://docs.platformio.org/page/plus/debugging.html
6 | // Configuration: https://docs.platformio.org/page/projectconf/section_env_debug.html
7 |
8 | {
9 | "version": "0.2.0",
10 | "configurations": [
11 | {
12 | "type": "platformio-debug",
13 | "request": "launch",
14 | "name": "PIO Debug",
15 | "executable": "/Users/spolsky/Dropbox/Arduino/branchController2/.pio/build/debug/firmware.elf",
16 | "toolchainBinDir": "/Users/spolsky/.platformio/packages/toolchain-gccarmnoneeabi@1.50401.190816/bin",
17 | "svdPath": "/Users/spolsky/.platformio/platforms/teensy/misc/svd/MK20D5.svd",
18 | "preLaunchTask": {
19 | "type": "PlatformIO",
20 | "task": "Pre-Debug"
21 | },
22 | "internalConsoleOptions": "openOnSessionStart"
23 | },
24 | {
25 | "type": "platformio-debug",
26 | "request": "launch",
27 | "name": "PIO Debug (skip Pre-Debug)",
28 | "executable": "/Users/spolsky/Dropbox/Arduino/branchController2/.pio/build/debug/firmware.elf",
29 | "toolchainBinDir": "/Users/spolsky/.platformio/packages/toolchain-gccarmnoneeabi@1.50401.190816/bin",
30 | "svdPath": "/Users/spolsky/.platformio/platforms/teensy/misc/svd/MK20D5.svd",
31 | "internalConsoleOptions": "openOnSessionStart"
32 | }
33 | ]
34 | }
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "C_Cpp.dimInactiveRegions": true
3 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | branchController
2 | ================
3 |
4 | The Branch Controller is a small hardware board based on the [Teensy 3.2 development board](https://www.pjrc.com/store/teensy32.html) to allow it to control up to 8 separate pixel-addressible LED strips.
5 |
6 | Although it can be used standalone to send its own patterns to the light strips, it really shines when connected, over ethernet, to a network. That allows you to generate the patterns on a computer (say, with a high powered graphics card) and send them to one or more Branch Controllers. In particular you can drive a lot more LEDs than any single controller can drive by using multiple Branch Controllers.
7 |
8 | 
9 |
10 | It is designed for WS2812b-style LED strips, with a single wire protocol. These are what Adafruit calls "NeoPixels".
11 |
12 | Personally I like to use the WS2815 variant which runs on 12 volts and has a backup wire allowing any single pixel to fail.
13 |
14 | Branch Controller does *not* handle APA102c-type strips, which use a two wire protocol consisting of both the signal and a clock.
15 |
16 | Features:
17 |
18 | * Supports up to 4400 pixels (550 per strip) at a frame rate of 60 Hz, the theoretical limit of the protocol
19 |
20 | * Ethernet control. Connects to an ethernet network to receive pixel data over TCP/IP. This allows you to use many branch controllers controlled from a single PC
21 |
22 | * 128x32 OLED display for diagnostics and network configuration
23 |
24 | * IR sensor allows you to use an IR remote control for basic controls
25 |
26 | Basic Operation
27 | ---------------
28 |
29 | By default branchController assumes you have 8 strips of 550 pixels each. You can operate a single branchController with a 44 button IR remote control like this one:
30 |
31 | 
32 |
33 | The brightness and color buttons work out of the box so you can use your branch controller to create basic solid colors.
34 |
35 | Use the On/Off button on the remote to turn off the LEDs. When you press OFF, any changes you have made to the state of the branchController is saved to EEPROM so that it will come back in the same state when you power up. *If you don't press off, the state is never saved*.
36 |
37 | The DIY1-6 buttons are reserved for internal test patterns and chases. You can edit the code for these to provide something that is a good backup if your PC or network fails.
38 |
39 | DIY1 shows a test pattern where the first pixel is brown on the first strip, the first two pixels are brown on the second strip, etc. This is useful for making sure you have the 8 strips hooked up in the right order.
40 |
41 | Network Operation
42 | -----------------
43 |
44 | You can connect your branchController to a LAN using the built-in ethernet port and control it from any kind of computer that speaks TCP/IP.
45 |
46 | When branchController starts up, it will look for a DHCP server and try to get an IP address and network configuration. If that works it will show you the IP address on the screen.
47 |
48 | Every branch controller has a unique MAC address which will never change, so you can configure your DHCP server to always hand out the same IP address to the same branch controller, which makes it easier to sort out multiple branch controllers.
49 |
50 | If you would like to use a static IP address:
51 |
52 | * Start up the branch controller once using DHCP
53 | * Connect to the web server running at the IP address that you see on the OLED display
54 | * Check the "static IP" box and enter the IP address you want to use. Click submit
55 | * Restart the branch controller. From now on it will use your static IP address.
56 |
57 | Web-based Hardware Configuration
58 | --------------------------------
59 |
60 | If you don't like the default configuration, you can use a web browser to connect to your
61 | branchController and modify some things:
62 |
63 | * the maximum power that LEDs will be allowed to consume (in milliwatts). If the total power budget is exceeded, all LEDs will be dimmed equally.
64 | * the RGB order in your LED strips (some strips expect RGB, others expect GRB). Use the "red", "green", and "blue" buttons to diagnose incorrect RGB order.
65 | * the color correction you want applied to all output, as a six digit hex RGB value
66 | * the color temperature you want applied to all output, as a six digit hex RGB value
67 | * the overall brightness of the LEDs, on a scale from 0 (off) to 255 (full). This can
68 | also be adjusted with an IR remote
69 | * whether to use a static IP address
70 |
71 | See http://fastled.io/docs/3.1/group___color_enums.html for options for color correction and
72 | color temperature.
73 |
74 |
75 | Open Pixel Control
76 | ------------------
77 |
78 | If branchController successfully gets on the Internet, it will listen for TCP connections on port 7890, where it will receive data sent to it using the Open Pixel Control format, documented [here](http://openpixelcontrol.org/). You can use Christopher Schardt's app [L.E.D. Lab](https://apps.apple.com/us/app/l-e-d-lab/id832042156) for iPhone or iPad to send cool animations -- all you need to do is set up the controller as if it were a FadeCandy controller.
79 |
80 | We use TCP and not UDP for Open Pixel Control. The w5500 ethernet chip used in this design has a tiny buffer and will lose UDP packets if they are sent too fast. TCP solves this problem.
81 |
82 | About the project
83 | -----------------
84 |
85 | This code was built using PlatformIO, an open source platform for embedded development which is a zillion times better than using the Arduino IDE. You will still need Teensyduino to flash the Teensy. For more about the research behind this project, follow my blog, [BlinkyLights](https://blinkylights.blog/).
86 |
87 | Want to build one?
88 | -------------------
89 | * The gerber directory has gerber and drill files so you can order PCBs.
90 | * This [BOM](https://octopart.com/bom-tool/tv6ZDeDl) lists the parts you need.
91 | * The PCB is designed to be mounted in a Polycase SK-16-03 if you want a weatherproof enclosure
92 |
93 |
94 | Next Up
95 | -------
96 |
97 | Recently implemented:
98 | - [X] Static IP address
99 | - [X] Faster brightness adjust
100 |
101 | These features are planned REAL SOON NOW:
102 | - [ ] Improve power limiting feature by showing stats on display for diagnosis
103 | - [ ] "Count Pixels" mode
104 | - [ ] Investigate temporal dithering - it's not really happening.
105 | - [ ] Internet cable disconnected / reconnected
106 | - [ ] Better built-in (DIY1-6) displays maybe
107 | - [ ] Support remote control Play/Pause button for internal DIY1-6 displays
108 | - [ ] Either implement gamma correction or stop pretending
109 |
110 | Ideas for future improvements:
111 | - [ ] New hardware design with ESP32 and logic shifters to handle way more LEDs
112 | - [ ] TouchDesigner support
113 | - [ ] DMX/ArtNet bridge mode
114 | - [ ] Multicast DNS (mDNS) and service discovery (DNS-SD)
115 | try https://github.com/TrippyLighting/EthernetBonjour
116 |
--------------------------------------------------------------------------------
/doc/44buttonIR.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jspolsky/branchController2/214cceb3d85411d83ebd88c1b07040e1b2c9dc87/doc/44buttonIR.jpg
--------------------------------------------------------------------------------
/doc/BranchController.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jspolsky/branchController2/214cceb3d85411d83ebd88c1b07040e1b2c9dc87/doc/BranchController.jpg
--------------------------------------------------------------------------------
/doc/OpenPixelControl.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
31 |
32 |
Open Pixel Control (OPC) is a simple protocol
33 | for controlling arrays of RGB lights,
34 | such as Total Control Lighting LEDs.
35 |
36 |
37 | Get the code at github.com.
38 |
39 | Show off your creations!
40 | Tag your photos with openpixelcontrol
41 | on flickr,
42 | and see everyone else's photos.
43 |
44 |
71 |
72 |
75 |
Overview
76 |
77 |
OPC describes the format of a stream of bytes,
78 | typically sent over a TCP connection,
79 | to control an array of RGB lights (pixels).
80 | The pixels are assumed to be arranged in strands,
81 | where each pixel has a fixed index in its strand.
82 |
83 |
84 | The purpose of OPC is to separate the generation of light patterns
85 | from the control of hardware lights.
86 | If you write a program that emits OPC messages,
87 | it will be independent of the lighting hardware.
88 | You can write your animation or interactive display program once,
89 | and then use the same program with many kinds of lighting hardware,
90 | as well as a simulator that lets you test and visualize your program
91 | before wiring it to real lights.
92 |
93 |
Specification
94 |
95 |
96 | An OPC stream consists of a sequence of messages.
97 | Each message has a 4-byte header followed by a variable-length data block:
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 | data |
106 |
107 |
108 |
109 |
110 |
111 |
112 | n bytes of message data |
113 |
114 |
115 |
116 |
117 | Channel:
118 | Up to 255 separate strands of pixels can be controlled.
119 | Each strand is given a channel number from 1 to 255
120 | and listens for messages with that channel number.
121 | Messages with channel 0 are considered broadcast messages;
122 | all strands should treat a message with channel 0
123 | as if it were sent on all channels.
124 |
125 |
126 | Command:
127 | The command code determines the format of the data
128 | and the expected behaviour in response to the message.
129 | Individual commands are defined below.
130 |
131 |
132 | Length:
133 | The message data block can have any length from 0 to 65535,
134 | transmitted as an unsigned two-byte number with the high byte first.
135 |
136 |
137 | Data:
138 | The data block must contain
139 | exactly the number of bytes indicated by the length field,
140 | from 0 to 65535.
141 |
142 |
Commands
143 |
144 |
145 | Set 8-bit pixel colours (command 0):
146 | The data block contains 8-bit RGB values:
147 | three bytes in red, green, blue order for each pixel to set.
148 | If the data block has length 3*n,
149 | then the first n pixels of the specified channel are set.
150 | All other pixels are unaffected and retain their current colour values.
151 | If the data length is not a multiple of 3,
152 | or there is data for more pixels than are present, the extra data is ignored.
153 | (Because the maximum data length is 65535,
154 | this command can control a maximum of 21845 pixels per channel,
155 | or a maximum of 5570475 pixels on all 255 channels.)
156 |
157 |
158 | Set 16-bit pixel colours (command 2):
159 | The data block contains 16-bit RGB values:
160 | six bytes for each pixel to set,
161 | consisting of three 16-bit words in red, green, blue order
162 | with each two-byte word in big-endian order.
163 | If the data block has length 6*n,
164 | then the first n pixels of the specified channel are set.
165 | All other pixels are unaffected and retain their current colour values.
166 | If the data length is not a multiple of 6,
167 | or there is data for more pixels than are present, the extra data is ignored.
168 | (Because the maximum data length is 65535,
169 | this command can control a maximum of 10922 pixels per channel,
170 | or a maximum of 2785110 pixels on all 255 channels.)
171 |
172 |
173 | System exclusive (command 255):
174 | Command 0xff is used to send a message that is specific
175 | to a particular device or software system.
176 | The data block should begin with a two-byte system ID;
177 | designers of that system are then free to define any message format
178 | for the rest of the data block.
179 |
180 |
System IDs
181 |
182 |
183 | Currently assigned system IDs are as follows:
184 |
188 |
189 |
--------------------------------------------------------------------------------
/gerber/branchControllerPCB-B_Paste.gbr:
--------------------------------------------------------------------------------
1 | G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,(5.1.5-0-10_14)*
2 | G04 #@! TF.CreationDate,2020-01-09T16:24:32-05:00*
3 | G04 #@! TF.ProjectId,branchControllerPCB,6272616e-6368-4436-9f6e-74726f6c6c65,rev?*
4 | G04 #@! TF.SameCoordinates,Original*
5 | G04 #@! TF.FileFunction,Paste,Bot*
6 | G04 #@! TF.FilePolarity,Positive*
7 | %FSLAX46Y46*%
8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
9 | G04 Created by KiCad (PCBNEW (5.1.5-0-10_14)) date 2020-01-09 16:24:32*
10 | %MOMM*%
11 | %LPD*%
12 | G04 APERTURE LIST*
13 | G04 APERTURE END LIST*
14 | M02*
15 |
--------------------------------------------------------------------------------
/gerber/branchControllerPCB-Edge_Cuts.gbr:
--------------------------------------------------------------------------------
1 | G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,(5.1.5-0-10_14)*
2 | G04 #@! TF.CreationDate,2020-01-09T16:24:32-05:00*
3 | G04 #@! TF.ProjectId,branchControllerPCB,6272616e-6368-4436-9f6e-74726f6c6c65,rev?*
4 | G04 #@! TF.SameCoordinates,Original*
5 | G04 #@! TF.FileFunction,Profile,NP*
6 | %FSLAX46Y46*%
7 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
8 | G04 Created by KiCad (PCBNEW (5.1.5-0-10_14)) date 2020-01-09 16:24:32*
9 | %MOMM*%
10 | %LPD*%
11 | G04 APERTURE LIST*
12 | %ADD10C,0.050000*%
13 | G04 APERTURE END LIST*
14 | D10*
15 | X142240000Y-139700000D02*
16 | G75*
17 | G02X140970000Y-138430000I0J1270000D01*
18 | G01*
19 | X248920000Y-138430000D02*
20 | G75*
21 | G02X247650000Y-139700000I-1270000J0D01*
22 | G01*
23 | X146050000Y-69850000D02*
24 | G75*
25 | G02X140970000Y-74930000I-5080000J0D01*
26 | G01*
27 | X248920000Y-74930000D02*
28 | G75*
29 | G02X243840000Y-69850000I0J5080000D01*
30 | G01*
31 | X140970000Y-138430000D02*
32 | X140970000Y-74930000D01*
33 | X247650000Y-139700000D02*
34 | X142240000Y-139700000D01*
35 | X248920000Y-74930000D02*
36 | X248920000Y-138430000D01*
37 | X146050000Y-69850000D02*
38 | X243840000Y-69850000D01*
39 | X149479000Y-76200000D02*
40 | G75*
41 | G03X149479000Y-76200000I-2159000J0D01*
42 | G01*
43 | X245491000Y-76200000D02*
44 | G75*
45 | G03X245491000Y-76200000I-2159000J0D01*
46 | G01*
47 | M02*
48 |
--------------------------------------------------------------------------------
/gerber/branchControllerPCB-F_Paste.gbr:
--------------------------------------------------------------------------------
1 | G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,(5.1.5-0-10_14)*
2 | G04 #@! TF.CreationDate,2020-01-09T16:24:32-05:00*
3 | G04 #@! TF.ProjectId,branchControllerPCB,6272616e-6368-4436-9f6e-74726f6c6c65,rev?*
4 | G04 #@! TF.SameCoordinates,Original*
5 | G04 #@! TF.FileFunction,Paste,Top*
6 | G04 #@! TF.FilePolarity,Positive*
7 | %FSLAX46Y46*%
8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
9 | G04 Created by KiCad (PCBNEW (5.1.5-0-10_14)) date 2020-01-09 16:24:32*
10 | %MOMM*%
11 | %LPD*%
12 | G04 APERTURE LIST*
13 | G04 APERTURE END LIST*
14 | M02*
15 |
--------------------------------------------------------------------------------
/gerber/branchControllerPCB-In1_Cu.gbr:
--------------------------------------------------------------------------------
1 | G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,(5.1.5-0-10_14)*
2 | G04 #@! TF.CreationDate,2020-01-09T16:24:32-05:00*
3 | G04 #@! TF.ProjectId,branchControllerPCB,6272616e-6368-4436-9f6e-74726f6c6c65,rev?*
4 | G04 #@! TF.SameCoordinates,Original*
5 | G04 #@! TF.FileFunction,Copper,L2,Inr*
6 | G04 #@! TF.FilePolarity,Positive*
7 | %FSLAX46Y46*%
8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
9 | G04 Created by KiCad (PCBNEW (5.1.5-0-10_14)) date 2020-01-09 16:24:32*
10 | %MOMM*%
11 | %LPD*%
12 | G04 APERTURE LIST*
13 | %ADD10O,1.700000X1.700000*%
14 | %ADD11R,1.700000X1.700000*%
15 | %ADD12C,1.600000*%
16 | %ADD13R,1.600000X1.600000*%
17 | %ADD14C,1.900000*%
18 | %ADD15R,1.665000X1.665000*%
19 | %ADD16C,1.665000*%
20 | %ADD17C,1.800000*%
21 | %ADD18C,0.100000*%
22 | %ADD19R,1.295400X1.295400*%
23 | %ADD20C,1.295400*%
24 | %ADD21O,2.400000X2.400000*%
25 | %ADD22C,2.400000*%
26 | %ADD23C,1.408000*%
27 | %ADD24R,1.408000X1.408000*%
28 | %ADD25C,2.550000*%
29 | %ADD26R,1.800000X1.800000*%
30 | %ADD27C,0.250000*%
31 | G04 APERTURE END LIST*
32 | D10*
33 | X179070000Y-96520000D03*
34 | X176530000Y-96520000D03*
35 | X173990000Y-96520000D03*
36 | X171450000Y-96520000D03*
37 | X168910000Y-96520000D03*
38 | D11*
39 | X166370000Y-96520000D03*
40 | D12*
41 | X187960000Y-104140000D03*
42 | X185420000Y-104140000D03*
43 | X182880000Y-104140000D03*
44 | X180340000Y-104140000D03*
45 | X190500000Y-104140000D03*
46 | X193040000Y-104140000D03*
47 | X195580000Y-104140000D03*
48 | X180340000Y-106680000D03*
49 | X180340000Y-109220000D03*
50 | X180340000Y-111760000D03*
51 | X180340000Y-114300000D03*
52 | X180340000Y-116840000D03*
53 | X180340000Y-119380000D03*
54 | X180340000Y-121920000D03*
55 | X180340000Y-124460000D03*
56 | X180340000Y-127000000D03*
57 | X180340000Y-129540000D03*
58 | X180340000Y-132080000D03*
59 | X180340000Y-134620000D03*
60 | X180340000Y-137160000D03*
61 | X182880000Y-134620000D03*
62 | X182880000Y-129540000D03*
63 | X182880000Y-127000000D03*
64 | X182880000Y-124460000D03*
65 | X195580000Y-106680000D03*
66 | X195580000Y-109220000D03*
67 | X195580000Y-111760000D03*
68 | X195580000Y-114300000D03*
69 | X195580000Y-116840000D03*
70 | X195580000Y-119380000D03*
71 | X195580000Y-121920000D03*
72 | X195580000Y-124460000D03*
73 | X195580000Y-127000000D03*
74 | X195580000Y-129540000D03*
75 | X195580000Y-132080000D03*
76 | X195580000Y-134620000D03*
77 | D13*
78 | X195580000Y-137160000D03*
79 | D14*
80 | X187960000Y-127000000D03*
81 | X187960000Y-130810000D03*
82 | D15*
83 | X171450000Y-132080000D03*
84 | D16*
85 | X171450000Y-129540000D03*
86 | X171450000Y-127000000D03*
87 | X171450000Y-124460000D03*
88 | X171450000Y-121920000D03*
89 | X171450000Y-119380000D03*
90 | D15*
91 | X151130000Y-132080000D03*
92 | D16*
93 | X151130000Y-129540000D03*
94 | X151130000Y-127000000D03*
95 | X151130000Y-124460000D03*
96 | X151130000Y-121920000D03*
97 | X151130000Y-119380000D03*
98 | D17*
99 | X205740000Y-87630000D03*
100 | X203200000Y-87630000D03*
101 | G04 #@! TA.AperFunction,ViaPad*
102 | D18*
103 | G36*
104 | X201335947Y-86731196D02*
105 | G01*
106 | X201360060Y-86734773D01*
107 | X201383707Y-86740696D01*
108 | X201406659Y-86748908D01*
109 | X201428695Y-86759331D01*
110 | X201449604Y-86771863D01*
111 | X201469183Y-86786384D01*
112 | X201487245Y-86802755D01*
113 | X201503616Y-86820817D01*
114 | X201518137Y-86840396D01*
115 | X201530669Y-86861305D01*
116 | X201541092Y-86883341D01*
117 | X201549304Y-86906293D01*
118 | X201555227Y-86929940D01*
119 | X201558804Y-86954053D01*
120 | X201560000Y-86978400D01*
121 | X201560000Y-88281600D01*
122 | X201558804Y-88305947D01*
123 | X201555227Y-88330060D01*
124 | X201549304Y-88353707D01*
125 | X201541092Y-88376659D01*
126 | X201530669Y-88398695D01*
127 | X201518137Y-88419604D01*
128 | X201503616Y-88439183D01*
129 | X201487245Y-88457245D01*
130 | X201469183Y-88473616D01*
131 | X201449604Y-88488137D01*
132 | X201428695Y-88500669D01*
133 | X201406659Y-88511092D01*
134 | X201383707Y-88519304D01*
135 | X201360060Y-88525227D01*
136 | X201335947Y-88528804D01*
137 | X201311600Y-88530000D01*
138 | X200008400Y-88530000D01*
139 | X199984053Y-88528804D01*
140 | X199959940Y-88525227D01*
141 | X199936293Y-88519304D01*
142 | X199913341Y-88511092D01*
143 | X199891305Y-88500669D01*
144 | X199870396Y-88488137D01*
145 | X199850817Y-88473616D01*
146 | X199832755Y-88457245D01*
147 | X199816384Y-88439183D01*
148 | X199801863Y-88419604D01*
149 | X199789331Y-88398695D01*
150 | X199778908Y-88376659D01*
151 | X199770696Y-88353707D01*
152 | X199764773Y-88330060D01*
153 | X199761196Y-88305947D01*
154 | X199760000Y-88281600D01*
155 | X199760000Y-86978400D01*
156 | X199761196Y-86954053D01*
157 | X199764773Y-86929940D01*
158 | X199770696Y-86906293D01*
159 | X199778908Y-86883341D01*
160 | X199789331Y-86861305D01*
161 | X199801863Y-86840396D01*
162 | X199816384Y-86820817D01*
163 | X199832755Y-86802755D01*
164 | X199850817Y-86786384D01*
165 | X199870396Y-86771863D01*
166 | X199891305Y-86759331D01*
167 | X199913341Y-86748908D01*
168 | X199936293Y-86740696D01*
169 | X199959940Y-86734773D01*
170 | X199984053Y-86731196D01*
171 | X200008400Y-86730000D01*
172 | X201311600Y-86730000D01*
173 | X201335947Y-86731196D01*
174 | G37*
175 | G04 #@! TD.AperFunction*
176 | D19*
177 | X214630000Y-88900000D03*
178 | D20*
179 | X214630000Y-91440000D03*
180 | X214630000Y-93980000D03*
181 | X214630000Y-96520000D03*
182 | X214630000Y-99060000D03*
183 | X214630000Y-101600000D03*
184 | X214630000Y-104140000D03*
185 | X214630000Y-106680000D03*
186 | X214630000Y-109220000D03*
187 | X214630000Y-111760000D03*
188 | X222250000Y-111760000D03*
189 | X222250000Y-109220000D03*
190 | X222250000Y-106680000D03*
191 | X222250000Y-104140000D03*
192 | X222250000Y-101600000D03*
193 | X222250000Y-99060000D03*
194 | X222250000Y-96520000D03*
195 | X222250000Y-93980000D03*
196 | X222250000Y-91440000D03*
197 | X222250000Y-88900000D03*
198 | D19*
199 | X229362000Y-93980000D03*
200 | D20*
201 | X229362000Y-96520000D03*
202 | X229362000Y-99060000D03*
203 | X229362000Y-101600000D03*
204 | X229362000Y-104140000D03*
205 | X229362000Y-106680000D03*
206 | X229362000Y-109220000D03*
207 | X229362000Y-111760000D03*
208 | X237490000Y-111760000D03*
209 | X237490000Y-109220000D03*
210 | X237490000Y-106680000D03*
211 | X237490000Y-104140000D03*
212 | X237490000Y-101600000D03*
213 | X237490000Y-99060000D03*
214 | X237490000Y-96520000D03*
215 | X237490000Y-93980000D03*
216 | D21*
217 | X176530000Y-121920000D03*
218 | D22*
219 | X176530000Y-114300000D03*
220 | D23*
221 | X231775000Y-121920000D03*
222 | X229235000Y-121920000D03*
223 | X226695000Y-121920000D03*
224 | X230505000Y-124460000D03*
225 | X227965000Y-124460000D03*
226 | D24*
227 | X225425000Y-124460000D03*
228 | D23*
229 | X233045000Y-124460000D03*
230 | X234315000Y-121920000D03*
231 | D25*
232 | X222155000Y-133860000D03*
233 | X237585000Y-133860000D03*
234 | X217265000Y-133860000D03*
235 | X201835000Y-133860000D03*
236 | D23*
237 | X213995000Y-121920000D03*
238 | X212725000Y-124460000D03*
239 | D24*
240 | X205105000Y-124460000D03*
241 | D23*
242 | X207645000Y-124460000D03*
243 | X210185000Y-124460000D03*
244 | X206375000Y-121920000D03*
245 | X208915000Y-121920000D03*
246 | X211455000Y-121920000D03*
247 | D17*
248 | X160020000Y-107950000D03*
249 | D26*
250 | X157480000Y-107950000D03*
251 | D27*
252 | X167640000Y-107950000D02*
253 | X176530000Y-114300000D01*
254 | X160020000Y-107950000D02*
255 | X167640000Y-107950000D01*
256 | X211455000Y-120924394D02*
257 | X211455000Y-121920000D01*
258 | X221592095Y-110787299D02*
259 | X211455000Y-120924394D01*
260 | X222122299Y-110787299D02*
261 | X221592095Y-110787299D01*
262 | X227796897Y-105112701D02*
263 | X222122299Y-110787299D01*
264 | X231437299Y-105112701D02*
265 | X227796897Y-105112701D01*
266 | X237490000Y-99060000D02*
267 | X231437299Y-105112701D01*
268 | X236842301Y-97167699D02*
269 | X237490000Y-96520000D01*
270 | X229489701Y-102572701D02*
271 | X231437299Y-102572701D01*
272 | X224409701Y-107652701D02*
273 | X229489701Y-102572701D01*
274 | X231437299Y-102572701D02*
275 | X236842301Y-97167699D01*
276 | X222186693Y-107652701D02*
277 | X224409701Y-107652701D01*
278 | X208915000Y-120924394D02*
279 | X222186693Y-107652701D01*
280 | X208915000Y-121920000D02*
281 | X208915000Y-120924394D01*
282 | X231437299Y-100032701D02*
283 | X236842301Y-94627699D01*
284 | X229489701Y-100032701D02*
285 | X231437299Y-100032701D01*
286 | X224409701Y-105112701D02*
287 | X229489701Y-100032701D01*
288 | X236842301Y-94627699D02*
289 | X237490000Y-93980000D01*
290 | X222377701Y-105112701D02*
291 | X224409701Y-105112701D01*
292 | X221277299Y-106213103D02*
293 | X222377701Y-105112701D01*
294 | X221277299Y-107017701D02*
295 | X221277299Y-106213103D01*
296 | X206375000Y-121920000D02*
297 | X221277299Y-107017701D01*
298 | X214698999Y-121216001D02*
299 | X213995000Y-121920000D01*
300 | X223222701Y-112692299D02*
301 | X214698999Y-121216001D01*
302 | X223222701Y-111379701D02*
303 | X223222701Y-112692299D01*
304 | X228895103Y-105707299D02*
305 | X223222701Y-111379701D01*
306 | X233382701Y-105707299D02*
307 | X228895103Y-105707299D01*
308 | X237490000Y-101600000D02*
309 | X233382701Y-105707299D01*
310 | X235400010Y-111309990D02*
311 | X236842301Y-109867699D01*
312 | X236842301Y-109867699D02*
313 | X237490000Y-109220000D01*
314 | X235400010Y-118294990D02*
315 | X235400010Y-111309990D01*
316 | X231775000Y-121920000D02*
317 | X235400010Y-118294990D01*
318 | X236842301Y-107327699D02*
319 | X237490000Y-106680000D01*
320 | X234950000Y-115209394D02*
321 | X234950000Y-109220000D01*
322 | X234950000Y-109220000D02*
323 | X236842301Y-107327699D01*
324 | X229235000Y-120924394D02*
325 | X234950000Y-115209394D01*
326 | X229235000Y-121920000D02*
327 | X229235000Y-120924394D01*
328 | X237490000Y-105055986D02*
329 | X237490000Y-104140000D01*
330 | X226695000Y-115850986D02*
331 | X237490000Y-105055986D01*
332 | X226695000Y-121920000D02*
333 | X226695000Y-115850986D01*
334 | X237490000Y-112675986D02*
335 | X237490000Y-111760000D01*
336 | X237490000Y-117749394D02*
337 | X237490000Y-112675986D01*
338 | X234315000Y-120924394D02*
339 | X237490000Y-117749394D01*
340 | X234315000Y-121920000D02*
341 | X234315000Y-120924394D01*
342 | X176530000Y-124460000D02*
343 | X176530000Y-121920000D01*
344 | X180340000Y-129540000D02*
345 | X176530000Y-124460000D01*
346 | X177800000Y-111219999D02*
347 | X177800000Y-106680000D01*
348 | X178640993Y-114249497D02*
349 | X177800000Y-111219999D01*
350 | X176530000Y-118110000D02*
351 | X178640993Y-114249497D01*
352 | X177800000Y-106680000D02*
353 | X180340000Y-104140000D01*
354 | X171006898Y-120650000D02*
355 | X171893102Y-120650000D01*
356 | X171893102Y-120650000D02*
357 | X175260000Y-118110000D01*
358 | X175260000Y-118110000D02*
359 | X176530000Y-118110000D01*
360 | X170292499Y-121364399D02*
361 | X171006898Y-120650000D01*
362 | X170292499Y-123302499D02*
363 | X170292499Y-121364399D01*
364 | X171450000Y-124460000D02*
365 | X170292499Y-123302499D01*
366 | X194780001Y-104939999D02*
367 | X195580000Y-104140000D01*
368 | X151130000Y-119380000D02*
369 | X151130000Y-107950000D01*
370 | X151130000Y-107950000D02*
371 | X158750000Y-100330000D01*
372 | X191770000Y-100330000D02*
373 | X195580000Y-104140000D01*
374 | X158750000Y-100330000D02*
375 | X191770000Y-100330000D01*
376 | X179070000Y-96520000D02*
377 | X179070000Y-90170000D01*
378 | X179070000Y-90170000D02*
379 | X185420000Y-83820000D01*
380 | X217170000Y-83820000D02*
381 | X222250000Y-88900000D01*
382 | X185420000Y-83820000D02*
383 | X217170000Y-83820000D01*
384 | X179070000Y-90170000D02*
385 | X166370000Y-90170000D01*
386 | X166370000Y-90170000D02*
387 | X146050000Y-110490000D01*
388 | X146050000Y-110490000D02*
389 | X146050000Y-132080000D01*
390 | X151130000Y-137160000D02*
391 | X180340000Y-137160000D01*
392 | X146050000Y-132080000D02*
393 | X151130000Y-137160000D01*
394 | X194780001Y-107479999D02*
395 | X195580000Y-106680000D01*
396 | X181465001Y-130080001D02*
397 | X181465001Y-120794999D01*
398 | X180880001Y-130665001D02*
399 | X181465001Y-130080001D01*
400 | X179799999Y-130665001D02*
401 | X180880001Y-130665001D01*
402 | X181465001Y-120794999D02*
403 | X194780001Y-107479999D01*
404 | X174530001Y-130080001D02*
405 | X179214999Y-130080001D01*
406 | X179214999Y-130080001D02*
407 | X179799999Y-130665001D01*
408 | X171450000Y-127000000D02*
409 | X174530001Y-130080001D01*
410 | X196379999Y-108420001D02*
411 | X195580000Y-109220000D01*
412 | X196705001Y-108094999D02*
413 | X196379999Y-108420001D01*
414 | X196120001Y-105554999D02*
415 | X196705001Y-106139999D01*
416 | X196705001Y-106139999D02*
417 | X196705001Y-108094999D01*
418 | X195039999Y-105554999D02*
419 | X196120001Y-105554999D01*
420 | X194454999Y-106139999D02*
421 | X195039999Y-105554999D01*
422 | X194454999Y-106930003D02*
423 | X194454999Y-106139999D01*
424 | X180880001Y-120505001D02*
425 | X194454999Y-106930003D01*
426 | X178925001Y-120505001D02*
427 | X180880001Y-120505001D01*
428 | X175260000Y-119380000D02*
429 | X177800000Y-119380000D01*
430 | X177800000Y-119380000D02*
431 | X178925001Y-120505001D01*
432 | X172864999Y-120505001D02*
433 | X175260000Y-119380000D01*
434 | X171450000Y-121920000D02*
435 | X172864999Y-120505001D01*
436 | X201930000Y-121920000D02*
437 | X214630000Y-109220000D01*
438 | X195580000Y-121920000D02*
439 | X201930000Y-121920000D01*
440 | X199760000Y-87630000D02*
441 | X200660000Y-87630000D01*
442 | X194780001Y-126200001D02*
443 | X195580000Y-127000000D01*
444 | X194454999Y-125874999D02*
445 | X194780001Y-126200001D01*
446 | X194454999Y-121379999D02*
447 | X194454999Y-125874999D01*
448 | X195039999Y-120794999D02*
449 | X194454999Y-121379999D01*
450 | X195830003Y-120794999D02*
451 | X195039999Y-120794999D01*
452 | X200660000Y-115965002D02*
453 | X195830003Y-120794999D01*
454 | X200660000Y-87630000D02*
455 | X200660000Y-115965002D01*
456 | M02*
457 |
--------------------------------------------------------------------------------
/gerber/branchControllerPCB-In2_Cu.gbr:
--------------------------------------------------------------------------------
1 | G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,(5.1.5-0-10_14)*
2 | G04 #@! TF.CreationDate,2020-01-09T16:24:32-05:00*
3 | G04 #@! TF.ProjectId,branchControllerPCB,6272616e-6368-4436-9f6e-74726f6c6c65,rev?*
4 | G04 #@! TF.SameCoordinates,Original*
5 | G04 #@! TF.FileFunction,Copper,L3,Inr*
6 | G04 #@! TF.FilePolarity,Positive*
7 | %FSLAX46Y46*%
8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
9 | G04 Created by KiCad (PCBNEW (5.1.5-0-10_14)) date 2020-01-09 16:24:32*
10 | %MOMM*%
11 | %LPD*%
12 | G04 APERTURE LIST*
13 | %ADD10O,1.700000X1.700000*%
14 | %ADD11R,1.700000X1.700000*%
15 | %ADD12C,1.600000*%
16 | %ADD13R,1.600000X1.600000*%
17 | %ADD14C,1.900000*%
18 | %ADD15R,1.665000X1.665000*%
19 | %ADD16C,1.665000*%
20 | %ADD17C,1.800000*%
21 | %ADD18C,0.100000*%
22 | %ADD19R,1.295400X1.295400*%
23 | %ADD20C,1.295400*%
24 | %ADD21O,2.400000X2.400000*%
25 | %ADD22C,2.400000*%
26 | %ADD23C,1.408000*%
27 | %ADD24R,1.408000X1.408000*%
28 | %ADD25C,2.550000*%
29 | %ADD26R,1.800000X1.800000*%
30 | %ADD27C,0.250000*%
31 | G04 APERTURE END LIST*
32 | D10*
33 | X179070000Y-96520000D03*
34 | X176530000Y-96520000D03*
35 | X173990000Y-96520000D03*
36 | X171450000Y-96520000D03*
37 | X168910000Y-96520000D03*
38 | D11*
39 | X166370000Y-96520000D03*
40 | D12*
41 | X187960000Y-104140000D03*
42 | X185420000Y-104140000D03*
43 | X182880000Y-104140000D03*
44 | X180340000Y-104140000D03*
45 | X190500000Y-104140000D03*
46 | X193040000Y-104140000D03*
47 | X195580000Y-104140000D03*
48 | X180340000Y-106680000D03*
49 | X180340000Y-109220000D03*
50 | X180340000Y-111760000D03*
51 | X180340000Y-114300000D03*
52 | X180340000Y-116840000D03*
53 | X180340000Y-119380000D03*
54 | X180340000Y-121920000D03*
55 | X180340000Y-124460000D03*
56 | X180340000Y-127000000D03*
57 | X180340000Y-129540000D03*
58 | X180340000Y-132080000D03*
59 | X180340000Y-134620000D03*
60 | X180340000Y-137160000D03*
61 | X182880000Y-134620000D03*
62 | X182880000Y-129540000D03*
63 | X182880000Y-127000000D03*
64 | X182880000Y-124460000D03*
65 | X195580000Y-106680000D03*
66 | X195580000Y-109220000D03*
67 | X195580000Y-111760000D03*
68 | X195580000Y-114300000D03*
69 | X195580000Y-116840000D03*
70 | X195580000Y-119380000D03*
71 | X195580000Y-121920000D03*
72 | X195580000Y-124460000D03*
73 | X195580000Y-127000000D03*
74 | X195580000Y-129540000D03*
75 | X195580000Y-132080000D03*
76 | X195580000Y-134620000D03*
77 | D13*
78 | X195580000Y-137160000D03*
79 | D14*
80 | X187960000Y-127000000D03*
81 | X187960000Y-130810000D03*
82 | D15*
83 | X171450000Y-132080000D03*
84 | D16*
85 | X171450000Y-129540000D03*
86 | X171450000Y-127000000D03*
87 | X171450000Y-124460000D03*
88 | X171450000Y-121920000D03*
89 | X171450000Y-119380000D03*
90 | D15*
91 | X151130000Y-132080000D03*
92 | D16*
93 | X151130000Y-129540000D03*
94 | X151130000Y-127000000D03*
95 | X151130000Y-124460000D03*
96 | X151130000Y-121920000D03*
97 | X151130000Y-119380000D03*
98 | D17*
99 | X205740000Y-87630000D03*
100 | X203200000Y-87630000D03*
101 | G04 #@! TA.AperFunction,ViaPad*
102 | D18*
103 | G36*
104 | X201335947Y-86731196D02*
105 | G01*
106 | X201360060Y-86734773D01*
107 | X201383707Y-86740696D01*
108 | X201406659Y-86748908D01*
109 | X201428695Y-86759331D01*
110 | X201449604Y-86771863D01*
111 | X201469183Y-86786384D01*
112 | X201487245Y-86802755D01*
113 | X201503616Y-86820817D01*
114 | X201518137Y-86840396D01*
115 | X201530669Y-86861305D01*
116 | X201541092Y-86883341D01*
117 | X201549304Y-86906293D01*
118 | X201555227Y-86929940D01*
119 | X201558804Y-86954053D01*
120 | X201560000Y-86978400D01*
121 | X201560000Y-88281600D01*
122 | X201558804Y-88305947D01*
123 | X201555227Y-88330060D01*
124 | X201549304Y-88353707D01*
125 | X201541092Y-88376659D01*
126 | X201530669Y-88398695D01*
127 | X201518137Y-88419604D01*
128 | X201503616Y-88439183D01*
129 | X201487245Y-88457245D01*
130 | X201469183Y-88473616D01*
131 | X201449604Y-88488137D01*
132 | X201428695Y-88500669D01*
133 | X201406659Y-88511092D01*
134 | X201383707Y-88519304D01*
135 | X201360060Y-88525227D01*
136 | X201335947Y-88528804D01*
137 | X201311600Y-88530000D01*
138 | X200008400Y-88530000D01*
139 | X199984053Y-88528804D01*
140 | X199959940Y-88525227D01*
141 | X199936293Y-88519304D01*
142 | X199913341Y-88511092D01*
143 | X199891305Y-88500669D01*
144 | X199870396Y-88488137D01*
145 | X199850817Y-88473616D01*
146 | X199832755Y-88457245D01*
147 | X199816384Y-88439183D01*
148 | X199801863Y-88419604D01*
149 | X199789331Y-88398695D01*
150 | X199778908Y-88376659D01*
151 | X199770696Y-88353707D01*
152 | X199764773Y-88330060D01*
153 | X199761196Y-88305947D01*
154 | X199760000Y-88281600D01*
155 | X199760000Y-86978400D01*
156 | X199761196Y-86954053D01*
157 | X199764773Y-86929940D01*
158 | X199770696Y-86906293D01*
159 | X199778908Y-86883341D01*
160 | X199789331Y-86861305D01*
161 | X199801863Y-86840396D01*
162 | X199816384Y-86820817D01*
163 | X199832755Y-86802755D01*
164 | X199850817Y-86786384D01*
165 | X199870396Y-86771863D01*
166 | X199891305Y-86759331D01*
167 | X199913341Y-86748908D01*
168 | X199936293Y-86740696D01*
169 | X199959940Y-86734773D01*
170 | X199984053Y-86731196D01*
171 | X200008400Y-86730000D01*
172 | X201311600Y-86730000D01*
173 | X201335947Y-86731196D01*
174 | G37*
175 | G04 #@! TD.AperFunction*
176 | D19*
177 | X214630000Y-88900000D03*
178 | D20*
179 | X214630000Y-91440000D03*
180 | X214630000Y-93980000D03*
181 | X214630000Y-96520000D03*
182 | X214630000Y-99060000D03*
183 | X214630000Y-101600000D03*
184 | X214630000Y-104140000D03*
185 | X214630000Y-106680000D03*
186 | X214630000Y-109220000D03*
187 | X214630000Y-111760000D03*
188 | X222250000Y-111760000D03*
189 | X222250000Y-109220000D03*
190 | X222250000Y-106680000D03*
191 | X222250000Y-104140000D03*
192 | X222250000Y-101600000D03*
193 | X222250000Y-99060000D03*
194 | X222250000Y-96520000D03*
195 | X222250000Y-93980000D03*
196 | X222250000Y-91440000D03*
197 | X222250000Y-88900000D03*
198 | D19*
199 | X229362000Y-93980000D03*
200 | D20*
201 | X229362000Y-96520000D03*
202 | X229362000Y-99060000D03*
203 | X229362000Y-101600000D03*
204 | X229362000Y-104140000D03*
205 | X229362000Y-106680000D03*
206 | X229362000Y-109220000D03*
207 | X229362000Y-111760000D03*
208 | X237490000Y-111760000D03*
209 | X237490000Y-109220000D03*
210 | X237490000Y-106680000D03*
211 | X237490000Y-104140000D03*
212 | X237490000Y-101600000D03*
213 | X237490000Y-99060000D03*
214 | X237490000Y-96520000D03*
215 | X237490000Y-93980000D03*
216 | D21*
217 | X176530000Y-121920000D03*
218 | D22*
219 | X176530000Y-114300000D03*
220 | D23*
221 | X231775000Y-121920000D03*
222 | X229235000Y-121920000D03*
223 | X226695000Y-121920000D03*
224 | X230505000Y-124460000D03*
225 | X227965000Y-124460000D03*
226 | D24*
227 | X225425000Y-124460000D03*
228 | D23*
229 | X233045000Y-124460000D03*
230 | X234315000Y-121920000D03*
231 | D25*
232 | X222155000Y-133860000D03*
233 | X237585000Y-133860000D03*
234 | X217265000Y-133860000D03*
235 | X201835000Y-133860000D03*
236 | D23*
237 | X213995000Y-121920000D03*
238 | X212725000Y-124460000D03*
239 | D24*
240 | X205105000Y-124460000D03*
241 | D23*
242 | X207645000Y-124460000D03*
243 | X210185000Y-124460000D03*
244 | X206375000Y-121920000D03*
245 | X208915000Y-121920000D03*
246 | X211455000Y-121920000D03*
247 | D17*
248 | X160020000Y-107950000D03*
249 | D26*
250 | X157480000Y-107950000D03*
251 | D27*
252 | X213714014Y-93980000D02*
253 | X214630000Y-93980000D01*
254 | X193914998Y-93980000D02*
255 | X213714014Y-93980000D01*
256 | X184294999Y-103599999D02*
257 | X193914998Y-93980000D01*
258 | X184294999Y-104390003D02*
259 | X184294999Y-103599999D01*
260 | X182005002Y-106680000D02*
261 | X184294999Y-104390003D01*
262 | X180340000Y-106680000D02*
263 | X182005002Y-106680000D01*
264 | X180340000Y-116840000D02*
265 | X175260000Y-116840000D01*
266 | X166370000Y-95420000D02*
267 | X166370000Y-96520000D01*
268 | X169474001Y-95344999D02*
269 | X166445001Y-95344999D01*
270 | X170085001Y-95955999D02*
271 | X169474001Y-95344999D01*
272 | X166445001Y-95344999D02*
273 | X166370000Y-95420000D01*
274 | X170085001Y-111665001D02*
275 | X170085001Y-95955999D01*
276 | X175260000Y-116840000D02*
277 | X170085001Y-111665001D01*
278 | X168910000Y-97722081D02*
279 | X168910000Y-96520000D01*
280 | X168910000Y-111477002D02*
281 | X168910000Y-97722081D01*
282 | X176812998Y-119380000D02*
283 | X168910000Y-111477002D01*
284 | X180340000Y-119380000D02*
285 | X176812998Y-119380000D01*
286 | X213982301Y-103492301D02*
287 | X214630000Y-104140000D01*
288 | X195039999Y-103014999D02*
289 | X213504999Y-103014999D01*
290 | X213504999Y-103014999D02*
291 | X213982301Y-103492301D01*
292 | X194454999Y-103599999D02*
293 | X195039999Y-103014999D01*
294 | X194454999Y-107805001D02*
295 | X194454999Y-103599999D01*
296 | X180340000Y-121920000D02*
297 | X194454999Y-107805001D01*
298 | X208135001Y-113174999D02*
299 | X213982301Y-107327699D01*
300 | X195039999Y-113174999D02*
301 | X208135001Y-113174999D01*
302 | X194454999Y-113759999D02*
303 | X195039999Y-113174999D01*
304 | X194454999Y-114550003D02*
305 | X194454999Y-113759999D01*
306 | X213982301Y-107327699D02*
307 | X214630000Y-106680000D01*
308 | X183420001Y-125585001D02*
309 | X194454999Y-114550003D01*
310 | X181465001Y-125585001D02*
311 | X183420001Y-125585001D01*
312 | X180340000Y-124460000D02*
313 | X181465001Y-125585001D01*
314 | X215277699Y-99707699D02*
315 | X214630000Y-99060000D01*
316 | X215096897Y-110192701D02*
317 | X215602701Y-109686897D01*
318 | X215602701Y-109686897D02*
319 | X215602701Y-100032701D01*
320 | X214757701Y-110192701D02*
321 | X215096897Y-110192701D01*
322 | X210650402Y-114300000D02*
323 | X214757701Y-110192701D01*
324 | X215602701Y-100032701D02*
325 | X215277699Y-99707699D01*
326 | X195580000Y-114300000D02*
327 | X210650402Y-114300000D01*
328 | X215277699Y-97167699D02*
329 | X214630000Y-96520000D01*
330 | X216052711Y-97942711D02*
331 | X215277699Y-97167699D01*
332 | X216052711Y-111776887D02*
333 | X216052711Y-97942711D01*
334 | X210989598Y-116840000D02*
335 | X216052711Y-111776887D01*
336 | X195580000Y-116840000D02*
337 | X210989598Y-116840000D01*
338 | X213657299Y-100627299D02*
339 | X213982301Y-100952301D01*
340 | X213657299Y-96053103D02*
341 | X213657299Y-100627299D01*
342 | X213982301Y-100952301D02*
343 | X214630000Y-101600000D01*
344 | X214163103Y-95547299D02*
345 | X213657299Y-96053103D01*
346 | X215096897Y-95547299D02*
347 | X214163103Y-95547299D01*
348 | X216502721Y-96953123D02*
349 | X215096897Y-95547299D01*
350 | X216502721Y-111963287D02*
351 | X216502721Y-96953123D01*
352 | X209086008Y-119380000D02*
353 | X216502721Y-111963287D01*
354 | X195580000Y-119380000D02*
355 | X209086008Y-119380000D01*
356 | X215277699Y-92087699D02*
357 | X214630000Y-91440000D01*
358 | X216952731Y-93762731D02*
359 | X215277699Y-92087699D01*
360 | X209272409Y-119830009D02*
361 | X216952731Y-112149687D01*
362 | X205289991Y-119830009D02*
363 | X209272409Y-119830009D01*
364 | X216952731Y-112149687D02*
365 | X216952731Y-93762731D01*
366 | X195580000Y-129540000D02*
367 | X205289991Y-119830009D01*
368 | M02*
369 |
--------------------------------------------------------------------------------
/gerber/branchControllerPCB-NPTH.drl:
--------------------------------------------------------------------------------
1 | M48
2 | ; DRILL file {KiCad (5.1.5-0-10_14)} date Thursday, January 09, 2020 at 04:06:23 PM
3 | ; FORMAT={-:-/ absolute / inch / decimal}
4 | ; #@! TF.CreationDate,2020-01-09T16:06:23-05:00
5 | ; #@! TF.GenerationSoftware,Kicad,Pcbnew,(5.1.5-0-10_14)
6 | ; #@! TF.FileFunction,NonPlated,1,4,NPTH
7 | FMAT,2
8 | INCH
9 | T1C0.1260
10 | %
11 | G90
12 | G05
13 | T1
14 | X8.025Y-5.15
15 | X8.475Y-5.15
16 | X8.825Y-5.15
17 | X9.275Y-5.15
18 | T0
19 | M30
20 |
--------------------------------------------------------------------------------
/gerber/branchControllerPCB-PTH.drl:
--------------------------------------------------------------------------------
1 | M48
2 | ; DRILL file {KiCad (5.1.5-0-10_14)} date Thursday, January 09, 2020 at 04:06:23 PM
3 | ; FORMAT={-:-/ absolute / inch / decimal}
4 | ; #@! TF.CreationDate,2020-01-09T16:06:23-05:00
5 | ; #@! TF.GenerationSoftware,Kicad,Pcbnew,(5.1.5-0-10_14)
6 | ; #@! TF.FileFunction,Plated,1,4,PTH
7 | FMAT,2
8 | INCH
9 | T1C0.0197
10 | T2C0.0310
11 | T3C0.0354
12 | T4C0.0394
13 | T5C0.0433
14 | T6C0.0437
15 | T7C0.0472
16 | T8C0.0669
17 | %
18 | G90
19 | G05
20 | T1
21 | X7.4Y-5.0
22 | X7.4Y-5.15
23 | T2
24 | X9.03Y-3.7
25 | X9.03Y-3.8
26 | X9.03Y-3.9
27 | X9.03Y-4.0
28 | X9.03Y-4.1
29 | X9.03Y-4.2
30 | X9.03Y-4.3
31 | X9.03Y-4.4
32 | X9.35Y-3.7
33 | X9.35Y-3.8
34 | X9.35Y-3.9
35 | X9.35Y-4.0
36 | X9.35Y-4.1
37 | X9.35Y-4.2
38 | X9.35Y-4.3
39 | X9.35Y-4.4
40 | X8.45Y-3.5
41 | X8.45Y-3.6
42 | X8.45Y-3.7
43 | X8.45Y-3.8
44 | X8.45Y-3.9
45 | X8.45Y-4.0
46 | X8.45Y-4.1
47 | X8.45Y-4.2
48 | X8.45Y-4.3
49 | X8.45Y-4.4
50 | X8.75Y-3.5
51 | X8.75Y-3.6
52 | X8.75Y-3.7
53 | X8.75Y-3.8
54 | X8.75Y-3.9
55 | X8.75Y-4.0
56 | X8.75Y-4.1
57 | X8.75Y-4.2
58 | X8.75Y-4.3
59 | X8.75Y-4.4
60 | T3
61 | X7.9Y-3.45
62 | X8.0Y-3.45
63 | X8.1Y-3.45
64 | X6.2Y-4.25
65 | X6.3Y-4.25
66 | X8.075Y-4.9
67 | X8.125Y-4.8
68 | X8.175Y-4.9
69 | X8.225Y-4.8
70 | X8.275Y-4.9
71 | X8.325Y-4.8
72 | X8.375Y-4.9
73 | X8.425Y-4.8
74 | X8.875Y-4.9
75 | X8.925Y-4.8
76 | X8.975Y-4.9
77 | X9.025Y-4.8
78 | X9.075Y-4.9
79 | X9.125Y-4.8
80 | X9.175Y-4.9
81 | X9.225Y-4.8
82 | T4
83 | X6.55Y-3.8
84 | X6.65Y-3.8
85 | X6.75Y-3.8
86 | X6.85Y-3.8
87 | X6.95Y-3.8
88 | X7.05Y-3.8
89 | T5
90 | X7.1Y-4.1
91 | X7.1Y-4.2
92 | X7.1Y-4.3
93 | X7.1Y-4.4
94 | X7.1Y-4.5
95 | X7.1Y-4.6
96 | X7.1Y-4.7
97 | X7.1Y-4.8
98 | X7.1Y-4.9
99 | X7.1Y-5.0
100 | X7.1Y-5.1
101 | X7.1Y-5.2
102 | X7.1Y-5.3
103 | X7.1Y-5.4
104 | X7.2Y-4.1
105 | X7.2Y-4.9
106 | X7.2Y-5.0
107 | X7.2Y-5.1
108 | X7.2Y-5.3
109 | X7.3Y-4.1
110 | X7.4Y-4.1
111 | X7.5Y-4.1
112 | X7.6Y-4.1
113 | X7.7Y-4.1
114 | X7.7Y-4.2
115 | X7.7Y-4.3
116 | X7.7Y-4.4
117 | X7.7Y-4.5
118 | X7.7Y-4.6
119 | X7.7Y-4.7
120 | X7.7Y-4.8
121 | X7.7Y-4.9
122 | X7.7Y-5.0
123 | X7.7Y-5.1
124 | X7.7Y-5.2
125 | X7.7Y-5.3
126 | X7.7Y-5.4
127 | T6
128 | X5.95Y-4.7
129 | X5.95Y-4.8
130 | X5.95Y-4.9
131 | X5.95Y-5.0
132 | X5.95Y-5.1
133 | X5.95Y-5.2
134 | X6.75Y-4.7
135 | X6.75Y-4.8
136 | X6.75Y-4.9
137 | X6.75Y-5.0
138 | X6.75Y-5.1
139 | X6.75Y-5.2
140 | T7
141 | X6.95Y-4.5
142 | X6.95Y-4.8
143 | T8
144 | X7.9463Y-5.2701
145 | X8.5537Y-5.2701
146 | X8.7463Y-5.2701
147 | X9.3537Y-5.2701
148 | T0
149 | M30
150 |
--------------------------------------------------------------------------------
/include/BranchController.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #define pinIRReceiver 3
4 | #define pinEthernetCS 10
5 | #define pinHeartbeat 23
6 |
7 | #define MAX_LEDS_PER_STRIP 550
8 | // Pin layouts for LEDs will be: 2,14,7,8,6,20,21,5
9 |
10 | #define OPEN_PIXEL_PORT 7890
11 |
12 | #define BRIGHTNESS 32
13 |
14 |
--------------------------------------------------------------------------------
/include/README.md:
--------------------------------------------------------------------------------
1 | Hey! I hate C++ objects. So I don't really use them that much. We use namespaces instead.
2 |
3 | Each "module" defines one namespace and consists of a .h file and a .cpp file. The average module implements both setup() and void() which do the usual Arduino things.
4 |
5 | Global constants (like pin assignments) go in BranchController.h.
6 | Specific settings to this module go in ModuleName.h.
7 |
8 | ModuleName.h
9 | ---
10 |
11 | ```
12 | // Description of the module is
13 | // in the .h file
14 |
15 | #pragma once
16 |
17 | namespace ModuleName {
18 | void setup(void);
19 | void loop(void);
20 | }
21 |
22 | ```
23 |
24 | ModuleName.cpp
25 | ---
26 |
27 | ```
28 | #include