├── .gitignore ├── .gitmodules ├── README.md ├── docs ├── button.png ├── connecting.gif ├── connecting_windows.gif ├── demo_screenshot.png ├── demovideo.mp4 ├── header_pic.jpg ├── ibom.html ├── ibom_preview_click.png ├── stand.dxf ├── title.BMP ├── youtube_extension_settings.png └── zoom_controller_notifications.ahk ├── pcb ├── fp-lib-table ├── sym-lib-table ├── zoom_pad.kicad_pcb ├── zoom_pad.kicad_prl ├── zoom_pad.kicad_pro └── zoom_pad.kicad_sch └── software ├── .gitignore ├── .vscode └── extensions.json ├── include └── README ├── lib └── README ├── platformio.ini ├── src ├── bluetooth.h ├── hardware.h └── main.cpp └── test └── README /.gitignore: -------------------------------------------------------------------------------- 1 | pcb/bom 2 | stencils 3 | ignore 4 | pcb/zoom_pad-backups 5 | software/.vscode/settings.json 6 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "pcb/libs"] 2 | path = pcb/libs 3 | url = https://github.com/alustig3/kicad-libraries.git 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![](docs/title.BMP) 2 | ![Zoom Controller](docs/header_pic.jpg) 3 | # Table of Contents 4 | 5 | - [What is this?](#what-is-this) 6 | - [Demo Video](#demo-video) 7 | - [How do I use it?](#how-do-i-use-it) 8 | - [Turning on](#turning-on) 9 | - [Connecting to Bluetooth](#connecting-to-bluetooth) 10 | - [Turning off](#turning-off) 11 | - [Disconnecting Bluetooth](#disconnecting-bluetooth) 12 | - [Adjust volume](#adjust-volume) 13 | - [Controlling Zoom!](#controlling-zoom) 14 | - [Switching modes](#switching-modes) 15 | - [Getting fancy](#getting-fancy) 16 | - [Desktop notifications](#desktop-notifications) 17 | - [YouTube controller](#youtube-controller) 18 | - [How do I make one?](#how-do-i-make-one) 19 | - [Stand](#stand) 20 | - [Electronics](#electronics) 21 | - [Additional hardware](#additional-hardware) 22 | - [Software](#software) 23 | - [Feedback](#feedback) 24 | # What is this? 25 | I, like many others, found myself using Zoom video conference software a lot this past year. 26 | I created this device to make interacting with Zoom faster and more pleasant. 27 | 28 | - The Zoom Controller connects with your computer over Bluetooth and emulates keyboard key presses 29 | - Works with Mac and Windows 30 | - Five buttons are setup to emulate the default keyboard shortcuts in Zoom 31 | - A knob controls the computer's media volume 32 | - Powered by two AA batteries 33 | - The circuit board mounts to a bent piece of 12 Gauge steel 34 | - Bonus features include desktop notifications and YouTube Mode (see [getting fancy](#getting-fancy)) 35 | 36 | ## Demo video 37 |
38 | 39 | 40 | 41 |
42 | 43 | # How do I use it? 44 | - [Turning on](#turning-on) 45 | - [Connecting to Bluetooth](#connecting-to-bluetooth) 46 | - [Turning off](#turning-off) 47 | - [Disconnecting Bluetooth](#disconnecting-bluetooth) 48 | - [Controlling Zoom!](#controlling-zoom) 49 | - [Switching modes](#switching-modes) 50 | 51 | ## Turning on 52 | Press and hold the **VOLUME** knob to turn on. 53 | You can let go of the knob as soon as you see it light up red. 54 | The knob will "breathe" red light while it is trying to connect to Bluetooth. Once connected, the knob will turn green. 55 | 56 | The controller will automatically turn off after 20 seconds attempting and failing to connect. 57 | 58 | ## Connecting to Bluetooth 59 | If it is the first time using Zoom Controller, you will need to add it your computer's list of Bluetooth devices. Once added, the Zoom Controller will automatically connect when turned on and within range of your computer. 60 | ### Mac 61 | - Open System Preferences -> Bluetooth 62 | - [Turn on](#turning-on) Zoom Controller 63 | - When it appears in your list of Bluetooth devices, click connect. Once connected, the light will turn green, and you're good to go! 64 | - There may be a "Keyboard Setup Assistant" window that pops up asking you to press a key to identify your keyboard. You can ignore this and just close the window. 65 | 66 | ![](docs/connecting.gif) 67 | 68 | ### Windows 69 | - Search for "bluetooth" in the search bar and select "Bluetooth and other devices settings" 70 | - At the top, click "Add Bluetooth or other device" 71 | - Click "Bluetooth - Mice, keyboards, pens or other kinds of Bluetooth devices" 72 | - Turn on the Zoom Controller by pressing the **VOLUME** knob until a red light appears 73 | - Zoom controller should appear in the "Add a device" list 74 | 75 | ![](docs/connecting_windows.gif) 76 | 77 | ## Turning off 78 | Press and hold the **LEAVE** button. The volume knob's light will turn off when the controller is powered off. 79 | 80 | There is an idle clock always counting. 81 | Every time you press a button or rotate the knob, the idle clock is reset to 0. 82 | If the idle clock reaches 60 minutes, the controller will automatically turn itself off to save battery. 83 | 84 | ## Disconnecting Bluetooth 85 | The Zoom Controller can only be connected to one device at a time. If you want to use it with a different computer it is important that you first remove it from its current computer's Bluetooth device list. 86 | ### Mac 87 | - Open to System Prefrences -> Bluetooth 88 | - Right click on the Zoom Controller and select "Remove" 89 | ### Windows 90 | - Search for "bluetooth" in the search bar and select "Bluetooth and other devices settings" 91 | - Under the "Mouse, keyboard, & pen" click "Zoom Controller" and then click "Remove device" 92 | 93 | 94 | ## Controlling Zoom! 95 | 96 | ### Adjust volume 97 | Rotate the **VOLUME** knob clockwise to increase volume, counterclockwise to decrease volume. 98 | 99 | ### Send Shortcuts on Mac 100 | The five buttons are setup to execute the following Zoom functions by emulating their default keyboard shortcuts. 101 | 102 | | Button | Zoom Function | Emulated Mac Keypress | 103 | |--------|---------------------------|-------------------------------------------------| 104 | | Mic | mute/unmute microphone | shift + command + a | 105 | | Camera | start/stop video | shift + command + v | 106 | | Share | start/stop screen sharing | shift + command + s | 107 | | View | speaker/gallery view | shift + command + w | 108 | | Leave* | leave meeting | command + w, followed by Return to confirm leave | 109 | 110 | ### Send Shortcuts on Windows 111 | 112 | | Button | Zoom Function | Emulated Windows Keypress | 113 | |---------------------|---------------------------|--------------------------------------------| 114 | | Mic | mute/unmute microphone | alt + a | 115 | | Camera | start/stop video | alt + v | 116 | | Share | start/stop screen sharing | alt + s | 117 | | View (single press) | speaker view | alt + F1 | 118 | | View (double press) | gallery view | alt + F2 | 119 | | Leave* | leave meeting | alt + q, folowed by Enter to confirm leave | 120 | 121 | **Zoom Controller will automatically turn off 8 seconds after pressing **LEAVE**, unless you keep it awake by pressing a button or rotating the knob within those 8 seconds. 122 | The knob will blink green indicating that the controller is about to turn itself off.* 123 | 124 | ## Switching modes 125 | Keyboard shortcuts sent by Zoom Controller depend on which operating system and which application is being used. 126 | Because of this, there are 4 different modes that Zoom controller can be in. 127 | There are 2 operating system modes (Mac, Windows) and 2 application modes (Zoom, YouTube*). 128 | 129 | **see [YouTube Controller](#youtube-controller)* 130 | 131 | ### Mac mode 132 | - Press down the **VOLUME** button. 133 | - While holding the **VOLUME** button, press and hold the **MIC** button for 2 seconds 134 | - The **VOLUME** button will blink **3** times indicating it is now in Mac mode. You can release both buttons. 135 | 136 | ### Windows mode 137 | - Press down the **VOLUME** button. 138 | - While holding the **VOLUME** button, press and hold the **CAMERA** button for 2 seconds 139 | - The **VOLUME** button will blink **7** times indicating it is now in Windows mode. You can release both buttons. 140 | 141 | ### Switch into Zoom mode 142 | - Press and hold the VOLUME knob 143 | - Press and release the MIC button 144 | 145 | ### Switch into YouTube mode 146 | - Press and hold the VOLUME knob 147 | - Press and release the CAMERA button 148 | 149 | # Getting fancy 150 | ## Desktop notifications 151 | You can enable Zoom Controller notifications show up on your desktop. The following notifications will appear when relevant: 152 | - "Mac Mode" 153 | - "Windows Mode" 154 | - "Zoom Mode" 155 | - "YouTube Mode" 156 | - "Controller has been idle for awhile and will soon turn itself off. Press any button or rotate knob to keep awake" 157 | ### Mac notifications setup 158 | - Download [Hammerspoon](https://www.hammerspoon.org/). 159 | - Click the Hammerspooon menu bar icon and select "Open Config". 160 | - Add the following to your `init.lua` file: 161 | ```lua 162 | hs.hotkey.bind({"cmd", "alt", "ctrl"}, "F1", function() 163 | hs.alert.show("Mac Mode") 164 | end) 165 | 166 | hs.hotkey.bind({"cmd", "alt", "ctrl"}, "F2", function() 167 | hs.alert.show("Windows Mode") 168 | end) 169 | 170 | hs.hotkey.bind({"cmd","alt","ctrl"}, "F3", function() 171 | hs.notify.new({title="Zoom Controller Idle", informativeText="Controller will turn off soon\nPress any key to keep awake"}):send() 172 | end)) 173 | 174 | hs.hotkey.bind({"cmd", "alt", "ctrl"}, "F4", function() 175 | hs.alert.show("Zoom Mode") 176 | end) 177 | 178 | hs.hotkey.bind({"cmd", "alt", "ctrl"}, "F5", function() 179 | hs.alert.show("YouTube Mode") 180 | end) 181 | 182 | ``` 183 | - Save your changes to the `inti.lua` file then click the Hammerspoon menu bar icon and select "Reload Config" 184 | ### Windows notifications setup 185 | - Download [AutoHotkey](https://www.autohotkey.com/) 186 | - Download this [zoom_controller_notifications.ahk](docs/zoom_controller_notifications.ahk) script file 187 | - Once the script file is downloaded, double click it to begin running the script 188 | - If you want the script to automatically run every time you turn on your computer, follow instructions [here](https://www.autohotkey.com/docs/FAQ.htm#Startup) 189 | 190 | ## YouTube controller 191 | I've found this device to be super useful for watching online videos. 192 | 193 | ### Installation 194 | - Add an extension called **Video Speed Controller** to your web browser 195 | - [Chrome extension](https://chrome.google.com/webstore/detail/video-speed-controller/nffaoalbilbmmfgbnbgppjihopabppdk) 196 | - [Firefrox extension](https://addons.mozilla.org/en-US/firefox/addon/videospeed/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=search) 197 | 198 | ### Controlling YouTube 199 | #### Send Shortcuts 200 | | Button | YouTube Function | Emulated Keypress | 201 | |--------|-------------------|-------------------| 202 | | Mic | | | 203 | | Camera | rewind 10s | z | 204 | | Share | fast forward 10s | x | 205 | | View | toggle fullscreen | f | 206 | | Leave | play/pause | spacebar | 207 | 208 | #### Adjust playback speed 209 | - Increase/decrease the video playback speed by rotating the VOLUME knob clockwise/counterclockwise 210 | - Toggle between 1X speed and your adjusted playback speed by clicking the VOLUME knob 211 | #### Adjust Volume 212 | - Increase/decrease the volume by pressing and holding down MIC then rotating the VOLUME knob clockwise/counterclockwise. 213 | 214 | # How do I make one? 215 | ## Stand 216 | - File for lasercutting: [stand.dxf](https://alustig3.github.io/zoom-controller/stand.dxf) 217 | - 0.1" thick (12Ga) steel cut and bent at https://www.oshcut.com/ 218 | 219 | ## Electronics 220 | ### Bill of Materials 221 | | Qty | Reference | Description | Value/MPN | 222 | |-----|--------------------|-------------------|--------------------------------------------------------------------------------------------------------------| 223 | | 1 | BT1 | Battery Holder | [2462](https://www.digikey.com/product-detail/en/keystone-electronics/2466/36-2466-ND/303815) | 224 | | 1 | C1 | 0805 Capacitor | 10nF | 225 | | 1 | D1 | Schottky Diode | [BAT54C](http://www.diodes.com/_files/datasheets/ds11005.pdf) | 226 | | 2 | H3, H4 | Threaded Standoff | [4207](https://www.adafruit.com/product/4207) | 227 | | 1 | Q1 | P-Channel MOSFET | [FDN340P](https://www.digikey.com/products/en?keywords=FDN340PCT-ND) | 228 | | 1 | Q2 | N-Channel MOSFET | [BSS123](https://www.digikey.com/products/en?keywords=BSS123LT1GOSCT-ND) | 229 | | 1 | R1 | 0805 Resistor | 100KΩ | 230 | | 1 | R2 | 0805 Resistor | 10KΩ | 231 | | 1 | R3 | 0805 Resistor | 330Ω | 232 | | 1 | R4 | 0805 Resistor | 1MΩ | 233 | | 5 | S1, S2, S3, S4, S5 | Tactile Button | [DD-15326](https://www.sparkfun.com/products/15326) | 234 | | 1 | SW1 | Rotary Encoder | [COM-15140](https://www.sparkfun.com/products/15140) | 235 | | 1 | U1 | Microcontroller | [ESP32-WROOM-32E](https://www.digikey.com/en/products/detail/espressif-systems/ESP32-WROOM-32E-4MB/11613125) | 236 | 237 | 238 |
239 | 240 | 241 | 242 |
243 | 244 | ## Additional hardware 245 | - 6mm long M3 x 0.5mm screws: https://www.mcmaster.com/92095A179/ 246 | - Clear plastic knob for rotary encoder: https://www.sparkfun.com/products/10597 247 | 248 | ## Software 249 | The code was developed using [PlatformIO](https://docs.platformio.org/en/latest/boards/espressif32/esp32dev.html). 250 | An [ESP-PROG](https://www.digikey.com/en/products/detail/espressif-systems/ESP-PROG/10259352?s=N4IgTCBcDaIKYGcAOBaJAnA9gcxAXQF8g) was used to program the ESP32 microcontroller. 251 | You should be able to use the platform.ini file from this repository, you'll just need to change the upload port. 252 | The platform.ini will automatically download the requisite [ESP32-BLE-Keyboard](https://github.com/T-vK/ESP32-BLE-Keyboard) library and ESP32 and Arduino frameworks. 253 | # Feedback 254 | If people are interested, I may consider buying some parts in bulk and selling the controllers on [Tindie](https://www.tindie.com/) or [Etsy](https://www.etsy.com/) ¯\\\_(ツ)_/¯ 255 | 256 | If you have questions, comments, or are interested in buying a Zoom Controller: 257 | 258 |
259 | 260 | 261 | 262 |
-------------------------------------------------------------------------------- /docs/button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alustig3/zoom-controller/d34ba0a9c375e16ef6d2e6de2239420b7a2ff8a9/docs/button.png -------------------------------------------------------------------------------- /docs/connecting.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alustig3/zoom-controller/d34ba0a9c375e16ef6d2e6de2239420b7a2ff8a9/docs/connecting.gif -------------------------------------------------------------------------------- /docs/connecting_windows.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alustig3/zoom-controller/d34ba0a9c375e16ef6d2e6de2239420b7a2ff8a9/docs/connecting_windows.gif -------------------------------------------------------------------------------- /docs/demo_screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alustig3/zoom-controller/d34ba0a9c375e16ef6d2e6de2239420b7a2ff8a9/docs/demo_screenshot.png -------------------------------------------------------------------------------- /docs/demovideo.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alustig3/zoom-controller/d34ba0a9c375e16ef6d2e6de2239420b7a2ff8a9/docs/demovideo.mp4 -------------------------------------------------------------------------------- /docs/header_pic.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alustig3/zoom-controller/d34ba0a9c375e16ef6d2e6de2239420b7a2ff8a9/docs/header_pic.jpg -------------------------------------------------------------------------------- /docs/ibom_preview_click.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alustig3/zoom-controller/d34ba0a9c375e16ef6d2e6de2239420b7a2ff8a9/docs/ibom_preview_click.png -------------------------------------------------------------------------------- /docs/stand.dxf: -------------------------------------------------------------------------------- 1 | 0 2 | SECTION 3 | 2 4 | HEADER 5 | 9 6 | $INSUNITS 7 | 70 8 | 4 9 | 9 10 | $ACADVER 11 | 1 12 | AC1014 13 | 9 14 | $HANDSEED 15 | 5 16 | FFFF 17 | 0 18 | ENDSEC 19 | 0 20 | SECTION 21 | 2 22 | TABLES 23 | 0 24 | TABLE 25 | 2 26 | VPORT 27 | 5 28 | 8 29 | 100 30 | AcDbSymbolTable 31 | 0 32 | ENDTAB 33 | 0 34 | TABLE 35 | 2 36 | LTYPE 37 | 5 38 | 5 39 | 100 40 | AcDbSymbolTable 41 | 0 42 | LTYPE 43 | 5 44 | 14 45 | 100 46 | AcDbSymbolTableRecord 47 | 100 48 | AcDbLinetypeTableRecord 49 | 2 50 | BYBLOCK 51 | 70 52 | 0 53 | 0 54 | LTYPE 55 | 5 56 | 15 57 | 100 58 | AcDbSymbolTableRecord 59 | 100 60 | AcDbLinetypeTableRecord 61 | 2 62 | BYLAYER 63 | 70 64 | 0 65 | 0 66 | ENDTAB 67 | 0 68 | TABLE 69 | 2 70 | LAYER 71 | 5 72 | 2 73 | 100 74 | AcDbSymbolTable 75 | 70 76 | 2 77 | 0 78 | LAYER 79 | 5 80 | 50 81 | 100 82 | AcDbSymbolTableRecord 83 | 100 84 | AcDbLayerTableRecord 85 | 2 86 | 0 87 | 70 88 | 0 89 | 6 90 | CONTINUOUS 91 | 0 92 | ENDTAB 93 | 0 94 | TABLE 95 | 2 96 | STYLE 97 | 5 98 | 3 99 | 100 100 | AcDbSymbolTable 101 | 70 102 | 1 103 | 0 104 | STYLE 105 | 5 106 | 11 107 | 100 108 | AcDbSymbolTableRecord 109 | 100 110 | AcDbTextStyleTableRecord 111 | 2 112 | STANDARD 113 | 70 114 | 0 115 | 0 116 | ENDTAB 117 | 0 118 | TABLE 119 | 2 120 | VIEW 121 | 5 122 | 6 123 | 100 124 | AcDbSymbolTable 125 | 70 126 | 0 127 | 0 128 | ENDTAB 129 | 0 130 | TABLE 131 | 2 132 | UCS 133 | 5 134 | 7 135 | 100 136 | AcDbSymbolTable 137 | 70 138 | 0 139 | 0 140 | ENDTAB 141 | 0 142 | TABLE 143 | 2 144 | APPID 145 | 5 146 | 9 147 | 100 148 | AcDbSymbolTable 149 | 70 150 | 2 151 | 0 152 | APPID 153 | 5 154 | 12 155 | 100 156 | AcDbSymbolTableRecord 157 | 100 158 | AcDbRegAppTableRecord 159 | 2 160 | ACAD 161 | 70 162 | 0 163 | 0 164 | ENDTAB 165 | 0 166 | TABLE 167 | 2 168 | DIMSTYLE 169 | 5 170 | A 171 | 100 172 | AcDbSymbolTable 173 | 70 174 | 1 175 | 0 176 | ENDTAB 177 | 0 178 | TABLE 179 | 2 180 | BLOCK_RECORD 181 | 5 182 | 1 183 | 100 184 | AcDbSymbolTable 185 | 70 186 | 1 187 | 0 188 | BLOCK_RECORD 189 | 5 190 | 1F 191 | 100 192 | AcDbSymbolTableRecord 193 | 100 194 | AcDbBlockTableRecord 195 | 2 196 | *MODEL_SPACE 197 | 0 198 | BLOCK_RECORD 199 | 5 200 | 1B 201 | 100 202 | AcDbSymbolTableRecord 203 | 100 204 | AcDbBlockTableRecord 205 | 2 206 | *PAPER_SPACE 207 | 0 208 | ENDTAB 209 | 0 210 | ENDSEC 211 | 0 212 | SECTION 213 | 2 214 | BLOCKS 215 | 0 216 | BLOCK 217 | 5 218 | 20 219 | 100 220 | AcDbEntity 221 | 100 222 | AcDbBlockBegin 223 | 2 224 | *MODEL_SPACE 225 | 0 226 | ENDBLK 227 | 5 228 | 21 229 | 100 230 | AcDbEntity 231 | 100 232 | AcDbBlockEnd 233 | 0 234 | BLOCK 235 | 5 236 | 1C 237 | 100 238 | AcDbEntity 239 | 100 240 | AcDbBlockBegin 241 | 2 242 | *PAPER_SPACE 243 | 0 244 | ENDBLK 245 | 5 246 | 1D 247 | 100 248 | AcDbEntity 249 | 100 250 | AcDbBlockEnd 251 | 0 252 | ENDSEC 253 | 0 254 | SECTION 255 | 2 256 | ENTITIES 257 | 0 258 | LWPOLYLINE 259 | 5 260 | 100 261 | 100 262 | AcDbEntity 263 | 8 264 | OUTER_PROFILES 265 | 100 266 | AcDbPolyline 267 | 90 268 | 12 269 | 70 270 | 1 271 | 43 272 | 0.0 273 | 10 274 | -39.999999999999993 275 | 20 276 | 39.999999999999993 277 | 42 278 | 0.41421356237309509 279 | 10 280 | 8.8817841970012523e-15 281 | 20 282 | 4.4408920985006262e-15 283 | 10 284 | 58.089607173616891 285 | 20 286 | -8.8817841970012523e-15 287 | 42 288 | 0.31464281332966293 289 | 10 290 | 76.867077420536717 291 | 20 292 | 13.114754098360654 293 | 42 294 | -0.26097177220645096 295 | 10 296 | 84.657428236893253 297 | 20 298 | 19.794373028517594 299 | 42 300 | 0.35727521116255756 301 | 10 302 | 93.089607173616884 303 | 20 304 | 30.088746057035198 305 | 10 306 | 93.089607173616912 307 | 20 308 | 95.91125394296489 309 | 42 310 | 0.357275211162558 311 | 10 312 | 84.657428236893239 313 | 20 314 | 106.20562697148247 315 | 42 316 | -0.26097177220645057 317 | 10 318 | 76.867077420536702 319 | 20 320 | 112.88524590163944 321 | 42 322 | 0.31464281332966271 323 | 10 324 | 58.089607173616891 325 | 20 326 | 126.00000000000009 327 | 10 328 | -6.4324905987065454e-15 329 | 20 330 | 126.00000000000001 331 | 42 332 | 0.41421356237309503 333 | 10 334 | -39.999999999999993 335 | 20 336 | 86.000000000000014 337 | 0 338 | LWPOLYLINE 339 | 5 340 | 101 341 | 100 342 | AcDbEntity 343 | 8 344 | INTERIOR_PROFILES 345 | 100 346 | AcDbPolyline 347 | 90 348 | 6 349 | 70 350 | 1 351 | 43 352 | 0.0 353 | 10 354 | 69.853812070472202 355 | 20 356 | 32.5 357 | 10 358 | 77.353812070472202 359 | 20 360 | 32.5 361 | 10 362 | 77.353812070472202 363 | 20 364 | 93.5 365 | 10 366 | 43.353812070472202 367 | 20 368 | 93.5 369 | 10 370 | 43.353812070472202 371 | 20 372 | 12.5 373 | 10 374 | 69.853812070472202 375 | 20 376 | 12.5 377 | 0 378 | CIRCLE 379 | 5 380 | 102 381 | 100 382 | AcDbEntity 383 | 8 384 | INTERIOR_PROFILES 385 | 100 386 | AcDbCircle 387 | 10 388 | -52.353812070472202 389 | 20 390 | 5 391 | 30 392 | 0 393 | 40 394 | 1.5000000000000002 395 | 210 396 | 0 397 | 220 398 | 0 399 | 230 400 | -1 401 | 0 402 | CIRCLE 403 | 5 404 | 103 405 | 100 406 | AcDbEntity 407 | 8 408 | INTERIOR_PROFILES 409 | 100 410 | AcDbCircle 411 | 10 412 | -52.353812070472188 413 | 20 414 | 121.00000000000001 415 | 30 416 | 0 417 | 40 418 | 1.5000000000000036 419 | 210 420 | 0 421 | 220 422 | 0 423 | 230 424 | -1 425 | 0 426 | LINE 427 | 5 428 | 104 429 | 100 430 | AcDbEntity 431 | 8 432 | BEND 433 | 100 434 | AcDbLine 435 | 10 436 | 22.044803586808435 437 | 20 438 | 126.00000000000009 439 | 30 440 | 2.6157425250392629e-14 441 | 11 442 | 22.044803586808435 443 | 21 444 | 0 445 | 31 446 | 2.6157425250392629e-14 447 | 0 448 | LINE 449 | 5 450 | 105 451 | 100 452 | AcDbEntity 453 | 8 454 | BEND_EXTENT 455 | 100 456 | AcDbLine 457 | 10 458 | 26.353812070472191 459 | 20 460 | 126.00000000000009 461 | 30 462 | 2.9556561976835942e-14 463 | 11 464 | 26.353812070472191 465 | 21 466 | 0 467 | 31 468 | 2.9556561976835942e-14 469 | 0 470 | LINE 471 | 5 472 | 106 473 | 100 474 | AcDbEntity 475 | 8 476 | BEND_EXTENT 477 | 100 478 | AcDbLine 479 | 10 480 | 17.735795103144678 481 | 20 482 | 0 483 | 30 484 | 2.2879873237934065e-14 485 | 11 486 | 17.735795103144678 487 | 21 488 | 126.00000000000001 489 | 31 490 | 2.2879873237934065e-14 491 | 0 492 | ENDSEC 493 | 0 494 | SECTION 495 | 2 496 | OBJECTS 497 | 0 498 | DICTIONARY 499 | 5 500 | C 501 | 100 502 | AcDbDictionary 503 | 3 504 | ACAD_GROUP 505 | 350 506 | D 507 | 3 508 | ACAD_MLINESTYLE 509 | 350 510 | 17 511 | 0 512 | DICTIONARY 513 | 5 514 | D 515 | 100 516 | AcDbDictionary 517 | 0 518 | DICTIONARY 519 | 5 520 | 1A 521 | 330 522 | C 523 | 100 524 | AcDbDictionary 525 | 0 526 | DICTIONARY 527 | 5 528 | 17 529 | 100 530 | AcDbDictionary 531 | 0 532 | ENDSEC 533 | 0 534 | EOF 535 | -------------------------------------------------------------------------------- /docs/title.BMP: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alustig3/zoom-controller/d34ba0a9c375e16ef6d2e6de2239420b7a2ff8a9/docs/title.BMP -------------------------------------------------------------------------------- /docs/youtube_extension_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alustig3/zoom-controller/d34ba0a9c375e16ef6d2e6de2239420b7a2ff8a9/docs/youtube_extension_settings.png -------------------------------------------------------------------------------- /docs/zoom_controller_notifications.ahk: -------------------------------------------------------------------------------- 1 | #NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. 2 | ; #Warn ; Enable warnings to assist with detecting common errors. 3 | SendMode Input ; Recommended for new scripts due to its superior speed and reliability. 4 | SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. 5 | #^!F1:: 6 | TrayTip, Zoom Controller, Mac Mode, 20, 17 7 | return 8 | 9 | #^!F2:: 10 | TrayTip, Zoom Controller, Windows Mode, 20, 17 11 | return 12 | 13 | #^!F3:: 14 | TrayTip, Zoom Controller, Controller has been idle for awhile and will soon turn itself off.`n`nPress any button or rotate knob to keep awake., 20, 17 15 | return 16 | 17 | #^!F4:: 18 | TrayTip, Zoom Controller, Zoom Mode, 20, 17 19 | return 20 | 21 | #^!F5:: 22 | TrayTip, Zoom Controller, YouTube Mode, 20, 17 23 | return -------------------------------------------------------------------------------- /pcb/fp-lib-table: -------------------------------------------------------------------------------- 1 | (fp_lib_table 2 | (lib (name "asl_footprints")(type "KiCad")(uri "${KIPRJMOD}/libs/asl_footprints.pretty")(options "")(descr "")) 3 | ) 4 | -------------------------------------------------------------------------------- /pcb/sym-lib-table: -------------------------------------------------------------------------------- 1 | (sym_lib_table 2 | (lib (name "asl_symbols_new")(type "KiCad")(uri "${KIPRJMOD}/libs/asl_symbols_new.kicad_sym")(options "")(descr "")) 3 | ) 4 | -------------------------------------------------------------------------------- /pcb/zoom_pad.kicad_prl: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "active_layer": 31, 4 | "active_layer_preset": "All Layers", 5 | "hidden_nets": [], 6 | "high_contrast_mode": 1, 7 | "net_color_mode": 1, 8 | "opacity": { 9 | "pads": 1.0, 10 | "tracks": 1.0, 11 | "vias": 1.0, 12 | "zones": 0.8899999856948853 13 | }, 14 | "ratsnest_display_mode": 0, 15 | "selection_filter": { 16 | "dimensions": true, 17 | "footprints": true, 18 | "graphics": true, 19 | "keepouts": true, 20 | "lockedItems": true, 21 | "otherItems": true, 22 | "pads": true, 23 | "text": true, 24 | "tracks": true, 25 | "vias": true, 26 | "zones": true 27 | }, 28 | "visible_items": [ 29 | 0, 30 | 1, 31 | 2, 32 | 3, 33 | 4, 34 | 5, 35 | 6, 36 | 8, 37 | 9, 38 | 10, 39 | 11, 40 | 12, 41 | 13, 42 | 14, 43 | 15, 44 | 16, 45 | 17, 46 | 18, 47 | 19, 48 | 20, 49 | 21, 50 | 22, 51 | 23, 52 | 24, 53 | 27, 54 | 28, 55 | 29, 56 | 30, 57 | 31, 58 | 32, 59 | 33, 60 | 37, 61 | 38 62 | ], 63 | "visible_layers": "fffffff_ffffffff", 64 | "zone_display_mode": 1 65 | }, 66 | "meta": { 67 | "filename": "zoom_pad.kicad_prl", 68 | "version": 2 69 | }, 70 | "project": { 71 | "files": [] 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /pcb/zoom_pad.kicad_pro: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "design_settings": { 4 | "defaults": { 5 | "board_outline_line_width": 0.09999999999999999, 6 | "copper_line_width": 0.19999999999999998, 7 | "copper_text_italic": false, 8 | "copper_text_size_h": 1.5, 9 | "copper_text_size_v": 1.5, 10 | "copper_text_thickness": 0.3, 11 | "copper_text_upright": false, 12 | "courtyard_line_width": 0.049999999999999996, 13 | "dimension_precision": 4, 14 | "dimension_units": 3, 15 | "dimensions": { 16 | "arrow_length": 1270000, 17 | "extension_offset": 500000, 18 | "keep_text_aligned": true, 19 | "suppress_zeroes": false, 20 | "text_position": 0, 21 | "units_format": 1 22 | }, 23 | "fab_line_width": 0.09999999999999999, 24 | "fab_text_italic": false, 25 | "fab_text_size_h": 1.0, 26 | "fab_text_size_v": 1.0, 27 | "fab_text_thickness": 0.15, 28 | "fab_text_upright": false, 29 | "other_line_width": 0.15, 30 | "other_text_italic": false, 31 | "other_text_size_h": 1.0, 32 | "other_text_size_v": 1.0, 33 | "other_text_thickness": 0.15, 34 | "other_text_upright": false, 35 | "pads": { 36 | "drill": 0.762, 37 | "height": 1.524, 38 | "width": 1.524 39 | }, 40 | "silk_line_width": 0.15, 41 | "silk_text_italic": false, 42 | "silk_text_size_h": 1.0, 43 | "silk_text_size_v": 1.0, 44 | "silk_text_thickness": 0.15, 45 | "silk_text_upright": false, 46 | "zones": { 47 | "45_degree_only": false, 48 | "min_clearance": 0.508 49 | } 50 | }, 51 | "diff_pair_dimensions": [ 52 | { 53 | "gap": 0.0, 54 | "via_gap": 0.0, 55 | "width": 0.0 56 | } 57 | ], 58 | "drc_exclusions": [], 59 | "meta": { 60 | "version": 1 61 | }, 62 | "rule_severities": { 63 | "annular_width": "error", 64 | "clearance": "error", 65 | "copper_edge_clearance": "error", 66 | "courtyards_overlap": "error", 67 | "diff_pair_gap_out_of_range": "error", 68 | "diff_pair_uncoupled_length_too_long": "error", 69 | "drill_out_of_range": "error", 70 | "duplicate_footprints": "warning", 71 | "extra_footprint": "warning", 72 | "hole_clearance": "error", 73 | "hole_near_hole": "error", 74 | "invalid_outline": "error", 75 | "item_on_disabled_layer": "error", 76 | "items_not_allowed": "error", 77 | "length_out_of_range": "error", 78 | "malformed_courtyard": "error", 79 | "microvia_drill_out_of_range": "error", 80 | "missing_courtyard": "ignore", 81 | "missing_footprint": "warning", 82 | "net_conflict": "warning", 83 | "npth_inside_courtyard": "ignore", 84 | "padstack": "error", 85 | "pth_inside_courtyard": "ignore", 86 | "shorting_items": "error", 87 | "silk_over_copper": "error", 88 | "silk_overlap": "error", 89 | "skew_out_of_range": "error", 90 | "too_many_vias": "error", 91 | "track_dangling": "warning", 92 | "track_width": "error", 93 | "tracks_crossing": "error", 94 | "unconnected_items": "error", 95 | "unresolved_variable": "error", 96 | "via_dangling": "warning", 97 | "zone_has_empty_net": "error", 98 | "zones_intersect": "error" 99 | }, 100 | "rules": { 101 | "allow_blind_buried_vias": false, 102 | "allow_microvias": false, 103 | "max_error": 0.005, 104 | "min_clearance": 0.0, 105 | "min_copper_edge_clearance": 0.0, 106 | "min_hole_clearance": 0.0, 107 | "min_hole_to_hole": 0.25, 108 | "min_microvia_diameter": 0.19999999999999998, 109 | "min_microvia_drill": 0.09999999999999999, 110 | "min_silk_clearance": 0.0, 111 | "min_through_hole_diameter": 0.3, 112 | "min_track_width": 0.19999999999999998, 113 | "min_via_annular_width": 0.049999999999999996, 114 | "min_via_diameter": 0.39999999999999997, 115 | "solder_mask_clearance": 0.0, 116 | "solder_mask_min_width": 0.0, 117 | "solder_paste_clearance": 0.0, 118 | "solder_paste_margin_ratio": -0.0 119 | }, 120 | "track_widths": [ 121 | 0.0, 122 | 0.3048, 123 | 0.4572, 124 | 0.508 125 | ], 126 | "via_dimensions": [ 127 | { 128 | "diameter": 0.0, 129 | "drill": 0.0 130 | } 131 | ], 132 | "zones_allow_external_fillets": false, 133 | "zones_use_no_outline": true 134 | }, 135 | "layer_presets": [] 136 | }, 137 | "boards": [], 138 | "cvpcb": { 139 | "equivalence_files": [] 140 | }, 141 | "erc": { 142 | "erc_exclusions": [], 143 | "meta": { 144 | "version": 0 145 | }, 146 | "pin_map": [ 147 | [ 148 | 0, 149 | 0, 150 | 0, 151 | 0, 152 | 0, 153 | 1, 154 | 0, 155 | 0, 156 | 0, 157 | 0, 158 | 2 159 | ], 160 | [ 161 | 0, 162 | 2, 163 | 0, 164 | 1, 165 | 0, 166 | 1, 167 | 0, 168 | 2, 169 | 2, 170 | 2, 171 | 2 172 | ], 173 | [ 174 | 0, 175 | 0, 176 | 0, 177 | 0, 178 | 0, 179 | 1, 180 | 0, 181 | 1, 182 | 0, 183 | 1, 184 | 2 185 | ], 186 | [ 187 | 0, 188 | 1, 189 | 0, 190 | 0, 191 | 0, 192 | 1, 193 | 1, 194 | 2, 195 | 1, 196 | 1, 197 | 2 198 | ], 199 | [ 200 | 0, 201 | 0, 202 | 0, 203 | 0, 204 | 0, 205 | 1, 206 | 0, 207 | 0, 208 | 0, 209 | 0, 210 | 2 211 | ], 212 | [ 213 | 1, 214 | 1, 215 | 1, 216 | 1, 217 | 1, 218 | 1, 219 | 1, 220 | 1, 221 | 1, 222 | 1, 223 | 2 224 | ], 225 | [ 226 | 0, 227 | 0, 228 | 0, 229 | 1, 230 | 0, 231 | 1, 232 | 0, 233 | 0, 234 | 0, 235 | 0, 236 | 2 237 | ], 238 | [ 239 | 0, 240 | 2, 241 | 1, 242 | 2, 243 | 0, 244 | 1, 245 | 0, 246 | 2, 247 | 2, 248 | 2, 249 | 2 250 | ], 251 | [ 252 | 0, 253 | 2, 254 | 0, 255 | 1, 256 | 0, 257 | 1, 258 | 0, 259 | 2, 260 | 0, 261 | 0, 262 | 2 263 | ], 264 | [ 265 | 0, 266 | 2, 267 | 1, 268 | 1, 269 | 0, 270 | 1, 271 | 0, 272 | 2, 273 | 0, 274 | 0, 275 | 2 276 | ], 277 | [ 278 | 2, 279 | 2, 280 | 2, 281 | 2, 282 | 2, 283 | 2, 284 | 2, 285 | 2, 286 | 2, 287 | 2, 288 | 2 289 | ] 290 | ], 291 | "rule_severities": { 292 | "bus_definition_conflict": "error", 293 | "bus_label_syntax": "error", 294 | "bus_to_bus_conflict": "error", 295 | "bus_to_net_conflict": "error", 296 | "different_unit_footprint": "error", 297 | "different_unit_net": "error", 298 | "duplicate_sheet_names": "error", 299 | "global_label_dangling": "warning", 300 | "hier_label_mismatch": "error", 301 | "label_dangling": "error", 302 | "lib_symbol_issues": "warning", 303 | "multiple_net_names": "warning", 304 | "net_not_bus_member": "warning", 305 | "no_connect_connected": "warning", 306 | "no_connect_dangling": "warning", 307 | "pin_not_connected": "error", 308 | "pin_not_driven": "error", 309 | "pin_to_pin": "warning", 310 | "power_pin_not_driven": "error", 311 | "similar_labels": "warning", 312 | "unresolved_variable": "error", 313 | "wire_dangling": "error" 314 | } 315 | }, 316 | "libraries": { 317 | "pinned_footprint_libs": [], 318 | "pinned_symbol_libs": [] 319 | }, 320 | "meta": { 321 | "filename": "zoom_pad.kicad_pro", 322 | "version": 1 323 | }, 324 | "net_settings": { 325 | "classes": [ 326 | { 327 | "bus_width": 6.0, 328 | "clearance": 0.2, 329 | "diff_pair_gap": 0.25, 330 | "diff_pair_via_gap": 0.25, 331 | "diff_pair_width": 0.2, 332 | "line_style": 0, 333 | "microvia_diameter": 0.3, 334 | "microvia_drill": 0.1, 335 | "name": "Default", 336 | "pcb_color": "rgba(0, 0, 0, 0.000)", 337 | "schematic_color": "rgba(0, 0, 0, 0.000)", 338 | "track_width": 0.25, 339 | "via_diameter": 0.8, 340 | "via_drill": 0.4, 341 | "wire_width": 6.0 342 | } 343 | ], 344 | "meta": { 345 | "version": 0 346 | }, 347 | "net_colors": null 348 | }, 349 | "pcbnew": { 350 | "last_paths": { 351 | "gencad": "", 352 | "idf": "", 353 | "netlist": "", 354 | "specctra_dsn": "", 355 | "step": "zoom_pad.step", 356 | "vrml": "" 357 | }, 358 | "page_layout_descr_file": "" 359 | }, 360 | "schematic": { 361 | "drawing": { 362 | "default_bus_thickness": 12.0, 363 | "default_junction_size": 40.0, 364 | "default_line_thickness": 6.0, 365 | "default_text_size": 50.0, 366 | "default_wire_thickness": 6.0, 367 | "field_names": [], 368 | "intersheets_ref_prefix": "", 369 | "intersheets_ref_short": false, 370 | "intersheets_ref_show": false, 371 | "intersheets_ref_suffix": "", 372 | "junction_size_choice": 3, 373 | "pin_symbol_size": 25.0, 374 | "text_offset_ratio": 0.3 375 | }, 376 | "legacy_lib_dir": "", 377 | "legacy_lib_list": [], 378 | "meta": { 379 | "version": 0 380 | }, 381 | "net_format_name": "", 382 | "page_layout_descr_file": "", 383 | "plot_directory": "", 384 | "spice_adjust_passive_values": false, 385 | "spice_external_command": "spice \"%I\"", 386 | "subpart_first_id": 65, 387 | "subpart_id_separator": 0 388 | }, 389 | "sheets": [ 390 | [ 391 | "606f663e-036f-46fa-bbf0-a661bbceaf4d", 392 | "" 393 | ] 394 | ], 395 | "text_variables": {} 396 | } 397 | -------------------------------------------------------------------------------- /pcb/zoom_pad.kicad_sch: -------------------------------------------------------------------------------- 1 | (kicad_sch (version 20201015) (generator eeschema) 2 | 3 | (paper "A4") 4 | 5 | (title_block 6 | (date "2020-12-19") 7 | (rev "1.1") 8 | ) 9 | 10 | (lib_symbols 11 | (symbol "Connector_Generic:Conn_02x03_Odd_Even" (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes) 12 | (property "Reference" "J" (id 0) (at 1.27 5.08 0) 13 | (effects (font (size 1.27 1.27))) 14 | ) 15 | (property "Value" "Conn_02x03_Odd_Even" (id 1) (at 1.27 -5.08 0) 16 | (effects (font (size 1.27 1.27))) 17 | ) 18 | (property "Footprint" "" (id 2) (at 0 0 0) 19 | (effects (font (size 1.27 1.27)) hide) 20 | ) 21 | (property "Datasheet" "~" (id 3) (at 0 0 0) 22 | (effects (font (size 1.27 1.27)) hide) 23 | ) 24 | (property "ki_keywords" "connector" (id 4) (at 0 0 0) 25 | (effects (font (size 1.27 1.27)) hide) 26 | ) 27 | (property "ki_description" "Generic connector, double row, 02x03, odd/even pin numbering scheme (row 1 odd numbers, row 2 even numbers), script generated (kicad-library-utils/schlib/autogen/connector/)" (id 5) (at 0 0 0) 28 | (effects (font (size 1.27 1.27)) hide) 29 | ) 30 | (property "ki_fp_filters" "Connector*:*_2x??_*" (id 6) (at 0 0 0) 31 | (effects (font (size 1.27 1.27)) hide) 32 | ) 33 | (symbol "Conn_02x03_Odd_Even_1_1" 34 | (rectangle (start -1.27 -2.413) (end 0 -2.667) 35 | (stroke (width 0.1524)) (fill (type none)) 36 | ) 37 | (rectangle (start -1.27 2.667) (end 0 2.413) 38 | (stroke (width 0.1524)) (fill (type none)) 39 | ) 40 | (rectangle (start -1.27 3.81) (end 3.81 -3.81) 41 | (stroke (width 0.254)) (fill (type background)) 42 | ) 43 | (rectangle (start -1.27 0.127) (end 0 -0.127) 44 | (stroke (width 0.1524)) (fill (type none)) 45 | ) 46 | (rectangle (start 3.81 -2.413) (end 2.54 -2.667) 47 | (stroke (width 0.1524)) (fill (type none)) 48 | ) 49 | (rectangle (start 3.81 2.667) (end 2.54 2.413) 50 | (stroke (width 0.1524)) (fill (type none)) 51 | ) 52 | (rectangle (start 3.81 0.127) (end 2.54 -0.127) 53 | (stroke (width 0.1524)) (fill (type none)) 54 | ) 55 | (pin passive line (at -5.08 2.54 0) (length 3.81) 56 | (name "Pin_1" (effects (font (size 1.27 1.27)))) 57 | (number "1" (effects (font (size 1.27 1.27)))) 58 | ) 59 | (pin passive line (at 7.62 2.54 180) (length 3.81) 60 | (name "Pin_2" (effects (font (size 1.27 1.27)))) 61 | (number "2" (effects (font (size 1.27 1.27)))) 62 | ) 63 | (pin passive line (at -5.08 0 0) (length 3.81) 64 | (name "Pin_3" (effects (font (size 1.27 1.27)))) 65 | (number "3" (effects (font (size 1.27 1.27)))) 66 | ) 67 | (pin passive line (at 7.62 0 180) (length 3.81) 68 | (name "Pin_4" (effects (font (size 1.27 1.27)))) 69 | (number "4" (effects (font (size 1.27 1.27)))) 70 | ) 71 | (pin passive line (at -5.08 -2.54 0) (length 3.81) 72 | (name "Pin_5" (effects (font (size 1.27 1.27)))) 73 | (number "5" (effects (font (size 1.27 1.27)))) 74 | ) 75 | (pin passive line (at 7.62 -2.54 180) (length 3.81) 76 | (name "Pin_6" (effects (font (size 1.27 1.27)))) 77 | (number "6" (effects (font (size 1.27 1.27)))) 78 | ) 79 | ) 80 | ) 81 | (symbol "Device:Battery_1" (pin_numbers hide) (pin_names (offset 0) hide) (in_bom yes) (on_board yes) 82 | (property "Reference" "BT" (id 0) (at 2.54 2.54 0) 83 | (effects (font (size 1.27 1.27)) (justify left)) 84 | ) 85 | (property "Value" "Battery" (id 1) (at 2.54 0 0) 86 | (effects (font (size 1.27 1.27)) (justify left)) 87 | ) 88 | (property "Footprint" "" (id 2) (at 0 1.524 90) 89 | (effects (font (size 1.27 1.27)) hide) 90 | ) 91 | (property "Datasheet" "~" (id 3) (at 0 1.524 90) 92 | (effects (font (size 1.27 1.27)) hide) 93 | ) 94 | (property "ki_keywords" "batt voltage-source cell" (id 4) (at 0 0 0) 95 | (effects (font (size 1.27 1.27)) hide) 96 | ) 97 | (property "ki_description" "Multiple-cell battery" (id 5) (at 0 0 0) 98 | (effects (font (size 1.27 1.27)) hide) 99 | ) 100 | (symbol "Battery_1_0_1" 101 | (rectangle (start -2.032 -1.397) (end 2.032 -1.651) 102 | (stroke (width 0)) (fill (type outline)) 103 | ) 104 | (rectangle (start -2.032 1.778) (end 2.032 1.524) 105 | (stroke (width 0)) (fill (type outline)) 106 | ) 107 | (rectangle (start -1.3208 -1.9812) (end 1.27 -2.4892) 108 | (stroke (width 0)) (fill (type outline)) 109 | ) 110 | (rectangle (start -1.3208 1.1938) (end 1.27 0.6858) 111 | (stroke (width 0)) (fill (type outline)) 112 | ) 113 | (polyline 114 | (pts 115 | (xy 0 -1.524) 116 | (xy 0 -1.27) 117 | ) 118 | (stroke (width 0)) (fill (type none)) 119 | ) 120 | (polyline 121 | (pts 122 | (xy 0 -1.016) 123 | (xy 0 -0.762) 124 | ) 125 | (stroke (width 0)) (fill (type none)) 126 | ) 127 | (polyline 128 | (pts 129 | (xy 0 -0.508) 130 | (xy 0 -0.254) 131 | ) 132 | (stroke (width 0)) (fill (type none)) 133 | ) 134 | (polyline 135 | (pts 136 | (xy 0 0) 137 | (xy 0 0.254) 138 | ) 139 | (stroke (width 0)) (fill (type none)) 140 | ) 141 | (polyline 142 | (pts 143 | (xy 0 0.508) 144 | (xy 0 0.762) 145 | ) 146 | (stroke (width 0)) (fill (type none)) 147 | ) 148 | (polyline 149 | (pts 150 | (xy 0 1.778) 151 | (xy 0 2.54) 152 | ) 153 | (stroke (width 0)) (fill (type none)) 154 | ) 155 | (polyline 156 | (pts 157 | (xy 0.254 2.667) 158 | (xy 1.27 2.667) 159 | ) 160 | (stroke (width 0.254)) (fill (type none)) 161 | ) 162 | (polyline 163 | (pts 164 | (xy 0.762 3.175) 165 | (xy 0.762 2.159) 166 | ) 167 | (stroke (width 0.254)) (fill (type none)) 168 | ) 169 | ) 170 | (symbol "Battery_1_1_1" 171 | (pin passive line (at 0 5.08 270) (length 2.54) 172 | (name "+" (effects (font (size 1.27 1.27)))) 173 | (number "1" (effects (font (size 1.27 1.27)))) 174 | ) 175 | (pin passive line (at 0 -5.08 90) (length 2.54) 176 | (name "-" (effects (font (size 1.27 1.27)))) 177 | (number "2" (effects (font (size 1.27 1.27)))) 178 | ) 179 | ) 180 | ) 181 | (symbol "Device:C" (pin_numbers hide) (pin_names (offset 0.254)) (in_bom yes) (on_board yes) 182 | (property "Reference" "C" (id 0) (at 0.635 2.54 0) 183 | (effects (font (size 1.27 1.27)) (justify left)) 184 | ) 185 | (property "Value" "C" (id 1) (at 0.635 -2.54 0) 186 | (effects (font (size 1.27 1.27)) (justify left)) 187 | ) 188 | (property "Footprint" "" (id 2) (at 0.9652 -3.81 0) 189 | (effects (font (size 1.27 1.27)) hide) 190 | ) 191 | (property "Datasheet" "~" (id 3) (at 0 0 0) 192 | (effects (font (size 1.27 1.27)) hide) 193 | ) 194 | (property "ki_keywords" "cap capacitor" (id 4) (at 0 0 0) 195 | (effects (font (size 1.27 1.27)) hide) 196 | ) 197 | (property "ki_description" "Unpolarized capacitor" (id 5) (at 0 0 0) 198 | (effects (font (size 1.27 1.27)) hide) 199 | ) 200 | (property "ki_fp_filters" "C_*" (id 6) (at 0 0 0) 201 | (effects (font (size 1.27 1.27)) hide) 202 | ) 203 | (symbol "C_0_1" 204 | (polyline 205 | (pts 206 | (xy -2.032 -0.762) 207 | (xy 2.032 -0.762) 208 | ) 209 | (stroke (width 0.508)) (fill (type none)) 210 | ) 211 | (polyline 212 | (pts 213 | (xy -2.032 0.762) 214 | (xy 2.032 0.762) 215 | ) 216 | (stroke (width 0.508)) (fill (type none)) 217 | ) 218 | ) 219 | (symbol "C_1_1" 220 | (pin passive line (at 0 3.81 270) (length 2.794) 221 | (name "~" (effects (font (size 1.27 1.27)))) 222 | (number "1" (effects (font (size 1.27 1.27)))) 223 | ) 224 | (pin passive line (at 0 -3.81 90) (length 2.794) 225 | (name "~" (effects (font (size 1.27 1.27)))) 226 | (number "2" (effects (font (size 1.27 1.27)))) 227 | ) 228 | ) 229 | ) 230 | (symbol "Device:R_Small_US" (pin_numbers hide) (pin_names (offset 0.254) hide) (in_bom yes) (on_board yes) 231 | (property "Reference" "R" (id 0) (at 0.762 0.508 0) 232 | (effects (font (size 1.27 1.27)) (justify left)) 233 | ) 234 | (property "Value" "R_Small_US" (id 1) (at 0.762 -1.016 0) 235 | (effects (font (size 1.27 1.27)) (justify left)) 236 | ) 237 | (property "Footprint" "" (id 2) (at 0 0 0) 238 | (effects (font (size 1.27 1.27)) hide) 239 | ) 240 | (property "Datasheet" "~" (id 3) (at 0 0 0) 241 | (effects (font (size 1.27 1.27)) hide) 242 | ) 243 | (property "ki_keywords" "r resistor" (id 4) (at 0 0 0) 244 | (effects (font (size 1.27 1.27)) hide) 245 | ) 246 | (property "ki_description" "Resistor, small US symbol" (id 5) (at 0 0 0) 247 | (effects (font (size 1.27 1.27)) hide) 248 | ) 249 | (property "ki_fp_filters" "R_*" (id 6) (at 0 0 0) 250 | (effects (font (size 1.27 1.27)) hide) 251 | ) 252 | (symbol "R_Small_US_1_1" 253 | (polyline 254 | (pts 255 | (xy 0 0) 256 | (xy 1.016 -0.381) 257 | (xy 0 -0.762) 258 | (xy -1.016 -1.143) 259 | (xy 0 -1.524) 260 | ) 261 | (stroke (width 0)) (fill (type none)) 262 | ) 263 | (polyline 264 | (pts 265 | (xy 0 1.524) 266 | (xy 1.016 1.143) 267 | (xy 0 0.762) 268 | (xy -1.016 0.381) 269 | (xy 0 0) 270 | ) 271 | (stroke (width 0)) (fill (type none)) 272 | ) 273 | (pin passive line (at 0 2.54 270) (length 1.016) 274 | (name "~" (effects (font (size 1.27 1.27)))) 275 | (number "1" (effects (font (size 1.27 1.27)))) 276 | ) 277 | (pin passive line (at 0 -2.54 90) (length 1.016) 278 | (name "~" (effects (font (size 1.27 1.27)))) 279 | (number "2" (effects (font (size 1.27 1.27)))) 280 | ) 281 | ) 282 | ) 283 | (symbol "Device:R_US" (pin_numbers hide) (pin_names (offset 0)) (in_bom yes) (on_board yes) 284 | (property "Reference" "R" (id 0) (at 2.54 0 90) 285 | (effects (font (size 1.27 1.27))) 286 | ) 287 | (property "Value" "R_US" (id 1) (at -2.54 0 90) 288 | (effects (font (size 1.27 1.27))) 289 | ) 290 | (property "Footprint" "" (id 2) (at 1.016 -0.254 90) 291 | (effects (font (size 1.27 1.27)) hide) 292 | ) 293 | (property "Datasheet" "~" (id 3) (at 0 0 0) 294 | (effects (font (size 1.27 1.27)) hide) 295 | ) 296 | (property "ki_keywords" "R res resistor" (id 4) (at 0 0 0) 297 | (effects (font (size 1.27 1.27)) hide) 298 | ) 299 | (property "ki_description" "Resistor, US symbol" (id 5) (at 0 0 0) 300 | (effects (font (size 1.27 1.27)) hide) 301 | ) 302 | (property "ki_fp_filters" "R_*" (id 6) (at 0 0 0) 303 | (effects (font (size 1.27 1.27)) hide) 304 | ) 305 | (symbol "R_US_0_1" 306 | (polyline 307 | (pts 308 | (xy 0 -2.286) 309 | (xy 0 -2.54) 310 | ) 311 | (stroke (width 0)) (fill (type none)) 312 | ) 313 | (polyline 314 | (pts 315 | (xy 0 2.286) 316 | (xy 0 2.54) 317 | ) 318 | (stroke (width 0)) (fill (type none)) 319 | ) 320 | (polyline 321 | (pts 322 | (xy 0 -0.762) 323 | (xy 1.016 -1.143) 324 | (xy 0 -1.524) 325 | (xy -1.016 -1.905) 326 | (xy 0 -2.286) 327 | ) 328 | (stroke (width 0)) (fill (type none)) 329 | ) 330 | (polyline 331 | (pts 332 | (xy 0 0.762) 333 | (xy 1.016 0.381) 334 | (xy 0 0) 335 | (xy -1.016 -0.381) 336 | (xy 0 -0.762) 337 | ) 338 | (stroke (width 0)) (fill (type none)) 339 | ) 340 | (polyline 341 | (pts 342 | (xy 0 2.286) 343 | (xy 1.016 1.905) 344 | (xy 0 1.524) 345 | (xy -1.016 1.143) 346 | (xy 0 0.762) 347 | ) 348 | (stroke (width 0)) (fill (type none)) 349 | ) 350 | ) 351 | (symbol "R_US_1_1" 352 | (pin passive line (at 0 3.81 270) (length 1.27) 353 | (name "~" (effects (font (size 1.27 1.27)))) 354 | (number "1" (effects (font (size 1.27 1.27)))) 355 | ) 356 | (pin passive line (at 0 -3.81 90) (length 1.27) 357 | (name "~" (effects (font (size 1.27 1.27)))) 358 | (number "2" (effects (font (size 1.27 1.27)))) 359 | ) 360 | ) 361 | ) 362 | (symbol "Diode:BAT54C" (pin_names (offset 1.016)) (in_bom yes) (on_board yes) 363 | (property "Reference" "D" (id 0) (at 0.635 -3.81 0) 364 | (effects (font (size 1.27 1.27)) (justify left)) 365 | ) 366 | (property "Value" "BAT54C" (id 1) (at -6.35 3.175 0) 367 | (effects (font (size 1.27 1.27)) (justify left)) 368 | ) 369 | (property "Footprint" "Package_TO_SOT_SMD:SOT-23" (id 2) (at 1.905 3.175 0) 370 | (effects (font (size 1.27 1.27)) (justify left) hide) 371 | ) 372 | (property "Datasheet" "http://www.diodes.com/_files/datasheets/ds11005.pdf" (id 3) (at -2.032 0 0) 373 | (effects (font (size 1.27 1.27)) hide) 374 | ) 375 | (property "ki_keywords" "schottky diode common cathode" (id 4) (at 0 0 0) 376 | (effects (font (size 1.27 1.27)) hide) 377 | ) 378 | (property "ki_description" "dual schottky barrier diode, common cathode" (id 5) (at 0 0 0) 379 | (effects (font (size 1.27 1.27)) hide) 380 | ) 381 | (property "ki_fp_filters" "SOT?23*" (id 6) (at 0 0 0) 382 | (effects (font (size 1.27 1.27)) hide) 383 | ) 384 | (symbol "BAT54C_0_1" 385 | (circle (center 0 0) (radius 0.254) (stroke (width 0)) (fill (type outline))) 386 | (polyline 387 | (pts 388 | (xy -1.905 0) 389 | (xy 1.905 0) 390 | ) 391 | (stroke (width 0)) (fill (type none)) 392 | ) 393 | (polyline 394 | (pts 395 | (xy -1.905 1.27) 396 | (xy -1.905 1.016) 397 | ) 398 | (stroke (width 0)) (fill (type none)) 399 | ) 400 | (polyline 401 | (pts 402 | (xy -1.27 -1.27) 403 | (xy -0.635 -1.27) 404 | ) 405 | (stroke (width 0)) (fill (type none)) 406 | ) 407 | (polyline 408 | (pts 409 | (xy -1.27 0) 410 | (xy -3.81 0) 411 | ) 412 | (stroke (width 0)) (fill (type none)) 413 | ) 414 | (polyline 415 | (pts 416 | (xy -1.27 1.27) 417 | (xy -1.905 1.27) 418 | ) 419 | (stroke (width 0)) (fill (type none)) 420 | ) 421 | (polyline 422 | (pts 423 | (xy -1.27 1.27) 424 | (xy -1.27 -1.27) 425 | ) 426 | (stroke (width 0)) (fill (type none)) 427 | ) 428 | (polyline 429 | (pts 430 | (xy -0.635 -1.27) 431 | (xy -0.635 -1.016) 432 | ) 433 | (stroke (width 0)) (fill (type none)) 434 | ) 435 | (polyline 436 | (pts 437 | (xy 0.635 -1.27) 438 | (xy 0.635 -1.016) 439 | ) 440 | (stroke (width 0)) (fill (type none)) 441 | ) 442 | (polyline 443 | (pts 444 | (xy 1.27 -1.27) 445 | (xy 0.635 -1.27) 446 | ) 447 | (stroke (width 0)) (fill (type none)) 448 | ) 449 | (polyline 450 | (pts 451 | (xy 1.27 1.27) 452 | (xy 1.27 -1.27) 453 | ) 454 | (stroke (width 0)) (fill (type none)) 455 | ) 456 | (polyline 457 | (pts 458 | (xy 1.27 1.27) 459 | (xy 1.905 1.27) 460 | ) 461 | (stroke (width 0)) (fill (type none)) 462 | ) 463 | (polyline 464 | (pts 465 | (xy 1.905 1.27) 466 | (xy 1.905 1.016) 467 | ) 468 | (stroke (width 0)) (fill (type none)) 469 | ) 470 | (polyline 471 | (pts 472 | (xy 3.81 0) 473 | (xy 1.27 0) 474 | ) 475 | (stroke (width 0)) (fill (type none)) 476 | ) 477 | (polyline 478 | (pts 479 | (xy -3.175 -1.27) 480 | (xy -3.175 1.27) 481 | (xy -1.27 0) 482 | (xy -3.175 -1.27) 483 | ) 484 | (stroke (width 0)) (fill (type none)) 485 | ) 486 | (polyline 487 | (pts 488 | (xy 3.175 -1.27) 489 | (xy 3.175 1.27) 490 | (xy 1.27 0) 491 | (xy 3.175 -1.27) 492 | ) 493 | (stroke (width 0)) (fill (type none)) 494 | ) 495 | ) 496 | (symbol "BAT54C_1_1" 497 | (pin passive line (at -7.62 0 0) (length 3.81) 498 | (name "~" (effects (font (size 1.27 1.27)))) 499 | (number "1" (effects (font (size 1.27 1.27)))) 500 | ) 501 | (pin passive line (at 7.62 0 180) (length 3.81) 502 | (name "~" (effects (font (size 1.27 1.27)))) 503 | (number "2" (effects (font (size 1.27 1.27)))) 504 | ) 505 | (pin passive line (at 0 -5.08 90) (length 5.08) 506 | (name "~" (effects (font (size 1.27 1.27)))) 507 | (number "3" (effects (font (size 1.27 1.27)))) 508 | ) 509 | ) 510 | ) 511 | (symbol "RF_Module:ESP32-WROOM-32D" (in_bom yes) (on_board yes) 512 | (property "Reference" "U" (id 0) (at -12.7 34.29 0) 513 | (effects (font (size 1.27 1.27)) (justify left)) 514 | ) 515 | (property "Value" "ESP32-WROOM-32D" (id 1) (at 1.27 34.29 0) 516 | (effects (font (size 1.27 1.27)) (justify left)) 517 | ) 518 | (property "Footprint" "RF_Module:ESP32-WROOM-32" (id 2) (at 0 -38.1 0) 519 | (effects (font (size 1.27 1.27)) hide) 520 | ) 521 | (property "Datasheet" "https://www.espressif.com/sites/default/files/documentation/esp32-wroom-32d_esp32-wroom-32u_datasheet_en.pdf" (id 3) (at -7.62 1.27 0) 522 | (effects (font (size 1.27 1.27)) hide) 523 | ) 524 | (property "ki_keywords" "RF Radio BT ESP ESP32 Espressif onboard PCB antenna" (id 4) (at 0 0 0) 525 | (effects (font (size 1.27 1.27)) hide) 526 | ) 527 | (property "ki_description" "RF Module, ESP32-D0WD SoC, Wi-Fi 802.11b/g/n, Bluetooth, BLE, 32-bit, 2.7-3.6V, onboard antenna, SMD" (id 5) (at 0 0 0) 528 | (effects (font (size 1.27 1.27)) hide) 529 | ) 530 | (property "ki_fp_filters" "ESP32?WROOM?32*" (id 6) (at 0 0 0) 531 | (effects (font (size 1.27 1.27)) hide) 532 | ) 533 | (symbol "ESP32-WROOM-32D_0_1" 534 | (rectangle (start -12.7 33.02) (end 12.7 -33.02) 535 | (stroke (width 0.254)) (fill (type background)) 536 | ) 537 | ) 538 | (symbol "ESP32-WROOM-32D_1_1" 539 | (pin power_in line (at 0 -35.56 90) (length 2.54) 540 | (name "GND" (effects (font (size 1.27 1.27)))) 541 | (number "1" (effects (font (size 1.27 1.27)))) 542 | ) 543 | (pin bidirectional line (at 15.24 -12.7 180) (length 2.54) 544 | (name "IO25" (effects (font (size 1.27 1.27)))) 545 | (number "10" (effects (font (size 1.27 1.27)))) 546 | ) 547 | (pin bidirectional line (at 15.24 -15.24 180) (length 2.54) 548 | (name "IO26" (effects (font (size 1.27 1.27)))) 549 | (number "11" (effects (font (size 1.27 1.27)))) 550 | ) 551 | (pin bidirectional line (at 15.24 -17.78 180) (length 2.54) 552 | (name "IO27" (effects (font (size 1.27 1.27)))) 553 | (number "12" (effects (font (size 1.27 1.27)))) 554 | ) 555 | (pin bidirectional line (at 15.24 10.16 180) (length 2.54) 556 | (name "IO14" (effects (font (size 1.27 1.27)))) 557 | (number "13" (effects (font (size 1.27 1.27)))) 558 | ) 559 | (pin bidirectional line (at 15.24 15.24 180) (length 2.54) 560 | (name "IO12" (effects (font (size 1.27 1.27)))) 561 | (number "14" (effects (font (size 1.27 1.27)))) 562 | ) 563 | (pin passive line (at 0 -35.56 90) (length 2.54) hide 564 | (name "GND" (effects (font (size 1.27 1.27)))) 565 | (number "15" (effects (font (size 1.27 1.27)))) 566 | ) 567 | (pin bidirectional line (at 15.24 12.7 180) (length 2.54) 568 | (name "IO13" (effects (font (size 1.27 1.27)))) 569 | (number "16" (effects (font (size 1.27 1.27)))) 570 | ) 571 | (pin bidirectional line (at -15.24 -5.08 0) (length 2.54) 572 | (name "SHD/SD2" (effects (font (size 1.27 1.27)))) 573 | (number "17" (effects (font (size 1.27 1.27)))) 574 | ) 575 | (pin bidirectional line (at -15.24 -7.62 0) (length 2.54) 576 | (name "SWP/SD3" (effects (font (size 1.27 1.27)))) 577 | (number "18" (effects (font (size 1.27 1.27)))) 578 | ) 579 | (pin bidirectional line (at -15.24 -12.7 0) (length 2.54) 580 | (name "SCS/CMD" (effects (font (size 1.27 1.27)))) 581 | (number "19" (effects (font (size 1.27 1.27)))) 582 | ) 583 | (pin power_in line (at 0 35.56 270) (length 2.54) 584 | (name "VDD" (effects (font (size 1.27 1.27)))) 585 | (number "2" (effects (font (size 1.27 1.27)))) 586 | ) 587 | (pin bidirectional line (at -15.24 -10.16 0) (length 2.54) 588 | (name "SCK/CLK" (effects (font (size 1.27 1.27)))) 589 | (number "20" (effects (font (size 1.27 1.27)))) 590 | ) 591 | (pin bidirectional line (at -15.24 0 0) (length 2.54) 592 | (name "SDO/SD0" (effects (font (size 1.27 1.27)))) 593 | (number "21" (effects (font (size 1.27 1.27)))) 594 | ) 595 | (pin bidirectional line (at -15.24 -2.54 0) (length 2.54) 596 | (name "SDI/SD1" (effects (font (size 1.27 1.27)))) 597 | (number "22" (effects (font (size 1.27 1.27)))) 598 | ) 599 | (pin bidirectional line (at 15.24 7.62 180) (length 2.54) 600 | (name "IO15" (effects (font (size 1.27 1.27)))) 601 | (number "23" (effects (font (size 1.27 1.27)))) 602 | ) 603 | (pin bidirectional line (at 15.24 25.4 180) (length 2.54) 604 | (name "IO2" (effects (font (size 1.27 1.27)))) 605 | (number "24" (effects (font (size 1.27 1.27)))) 606 | ) 607 | (pin bidirectional line (at 15.24 30.48 180) (length 2.54) 608 | (name "IO0" (effects (font (size 1.27 1.27)))) 609 | (number "25" (effects (font (size 1.27 1.27)))) 610 | ) 611 | (pin bidirectional line (at 15.24 20.32 180) (length 2.54) 612 | (name "IO4" (effects (font (size 1.27 1.27)))) 613 | (number "26" (effects (font (size 1.27 1.27)))) 614 | ) 615 | (pin bidirectional line (at 15.24 5.08 180) (length 2.54) 616 | (name "IO16" (effects (font (size 1.27 1.27)))) 617 | (number "27" (effects (font (size 1.27 1.27)))) 618 | ) 619 | (pin bidirectional line (at 15.24 2.54 180) (length 2.54) 620 | (name "IO17" (effects (font (size 1.27 1.27)))) 621 | (number "28" (effects (font (size 1.27 1.27)))) 622 | ) 623 | (pin bidirectional line (at 15.24 17.78 180) (length 2.54) 624 | (name "IO5" (effects (font (size 1.27 1.27)))) 625 | (number "29" (effects (font (size 1.27 1.27)))) 626 | ) 627 | (pin input line (at -15.24 30.48 0) (length 2.54) 628 | (name "EN" (effects (font (size 1.27 1.27)))) 629 | (number "3" (effects (font (size 1.27 1.27)))) 630 | ) 631 | (pin bidirectional line (at 15.24 0 180) (length 2.54) 632 | (name "IO18" (effects (font (size 1.27 1.27)))) 633 | (number "30" (effects (font (size 1.27 1.27)))) 634 | ) 635 | (pin bidirectional line (at 15.24 -2.54 180) (length 2.54) 636 | (name "IO19" (effects (font (size 1.27 1.27)))) 637 | (number "31" (effects (font (size 1.27 1.27)))) 638 | ) 639 | (pin unconnected line (at -12.7 -27.94 0) (length 2.54) hide 640 | (name "NC" (effects (font (size 1.27 1.27)))) 641 | (number "32" (effects (font (size 1.27 1.27)))) 642 | ) 643 | (pin bidirectional line (at 15.24 -5.08 180) (length 2.54) 644 | (name "IO21" (effects (font (size 1.27 1.27)))) 645 | (number "33" (effects (font (size 1.27 1.27)))) 646 | ) 647 | (pin bidirectional line (at 15.24 22.86 180) (length 2.54) 648 | (name "RXD0/IO3" (effects (font (size 1.27 1.27)))) 649 | (number "34" (effects (font (size 1.27 1.27)))) 650 | ) 651 | (pin bidirectional line (at 15.24 27.94 180) (length 2.54) 652 | (name "TXD0/IO1" (effects (font (size 1.27 1.27)))) 653 | (number "35" (effects (font (size 1.27 1.27)))) 654 | ) 655 | (pin bidirectional line (at 15.24 -7.62 180) (length 2.54) 656 | (name "IO22" (effects (font (size 1.27 1.27)))) 657 | (number "36" (effects (font (size 1.27 1.27)))) 658 | ) 659 | (pin bidirectional line (at 15.24 -10.16 180) (length 2.54) 660 | (name "IO23" (effects (font (size 1.27 1.27)))) 661 | (number "37" (effects (font (size 1.27 1.27)))) 662 | ) 663 | (pin passive line (at 0 -35.56 90) (length 2.54) hide 664 | (name "GND" (effects (font (size 1.27 1.27)))) 665 | (number "38" (effects (font (size 1.27 1.27)))) 666 | ) 667 | (pin passive line (at 0 -35.56 90) (length 2.54) hide 668 | (name "GND" (effects (font (size 1.27 1.27)))) 669 | (number "39" (effects (font (size 1.27 1.27)))) 670 | ) 671 | (pin input line (at -15.24 25.4 0) (length 2.54) 672 | (name "SENSOR_VP" (effects (font (size 1.27 1.27)))) 673 | (number "4" (effects (font (size 1.27 1.27)))) 674 | ) 675 | (pin input line (at -15.24 22.86 0) (length 2.54) 676 | (name "SENSOR_VN" (effects (font (size 1.27 1.27)))) 677 | (number "5" (effects (font (size 1.27 1.27)))) 678 | ) 679 | (pin input line (at 15.24 -25.4 180) (length 2.54) 680 | (name "IO34" (effects (font (size 1.27 1.27)))) 681 | (number "6" (effects (font (size 1.27 1.27)))) 682 | ) 683 | (pin input line (at 15.24 -27.94 180) (length 2.54) 684 | (name "IO35" (effects (font (size 1.27 1.27)))) 685 | (number "7" (effects (font (size 1.27 1.27)))) 686 | ) 687 | (pin bidirectional line (at 15.24 -20.32 180) (length 2.54) 688 | (name "IO32" (effects (font (size 1.27 1.27)))) 689 | (number "8" (effects (font (size 1.27 1.27)))) 690 | ) 691 | (pin bidirectional line (at 15.24 -22.86 180) (length 2.54) 692 | (name "IO33" (effects (font (size 1.27 1.27)))) 693 | (number "9" (effects (font (size 1.27 1.27)))) 694 | ) 695 | ) 696 | ) 697 | (symbol "Transistor_FET:BSS123" (pin_names hide) (in_bom yes) (on_board yes) 698 | (property "Reference" "Q" (id 0) (at 5.08 1.905 0) 699 | (effects (font (size 1.27 1.27)) (justify left)) 700 | ) 701 | (property "Value" "BSS123" (id 1) (at 5.08 0 0) 702 | (effects (font (size 1.27 1.27)) (justify left)) 703 | ) 704 | (property "Footprint" "Package_TO_SOT_SMD:SOT-23" (id 2) (at 5.08 -1.905 0) 705 | (effects (font (size 1.27 1.27) italic) (justify left) hide) 706 | ) 707 | (property "Datasheet" "http://www.diodes.com/assets/Datasheets/ds30366.pdf" (id 3) (at 0 0 0) 708 | (effects (font (size 1.27 1.27)) (justify left) hide) 709 | ) 710 | (property "ki_keywords" "N-Channel MOSFET" (id 4) (at 0 0 0) 711 | (effects (font (size 1.27 1.27)) hide) 712 | ) 713 | (property "ki_description" "0.17A Id, 100V Vds, N-Channel MOSFET, SOT-23" (id 5) (at 0 0 0) 714 | (effects (font (size 1.27 1.27)) hide) 715 | ) 716 | (property "ki_fp_filters" "SOT?23*" (id 6) (at 0 0 0) 717 | (effects (font (size 1.27 1.27)) hide) 718 | ) 719 | (symbol "BSS123_0_1" 720 | (circle (center 1.651 0) (radius 2.794) (stroke (width 0.254)) (fill (type none))) 721 | (circle (center 2.54 -1.778) (radius 0.254) (stroke (width 0)) (fill (type outline))) 722 | (circle (center 2.54 1.778) (radius 0.254) (stroke (width 0)) (fill (type outline))) 723 | (polyline 724 | (pts 725 | (xy 0.254 0) 726 | (xy -2.54 0) 727 | ) 728 | (stroke (width 0)) (fill (type none)) 729 | ) 730 | (polyline 731 | (pts 732 | (xy 0.254 1.905) 733 | (xy 0.254 -1.905) 734 | ) 735 | (stroke (width 0.254)) (fill (type none)) 736 | ) 737 | (polyline 738 | (pts 739 | (xy 0.762 -1.27) 740 | (xy 0.762 -2.286) 741 | ) 742 | (stroke (width 0.254)) (fill (type none)) 743 | ) 744 | (polyline 745 | (pts 746 | (xy 0.762 0.508) 747 | (xy 0.762 -0.508) 748 | ) 749 | (stroke (width 0.254)) (fill (type none)) 750 | ) 751 | (polyline 752 | (pts 753 | (xy 0.762 2.286) 754 | (xy 0.762 1.27) 755 | ) 756 | (stroke (width 0.254)) (fill (type none)) 757 | ) 758 | (polyline 759 | (pts 760 | (xy 2.54 2.54) 761 | (xy 2.54 1.778) 762 | ) 763 | (stroke (width 0)) (fill (type none)) 764 | ) 765 | (polyline 766 | (pts 767 | (xy 2.54 -2.54) 768 | (xy 2.54 0) 769 | (xy 0.762 0) 770 | ) 771 | (stroke (width 0)) (fill (type none)) 772 | ) 773 | (polyline 774 | (pts 775 | (xy 0.762 -1.778) 776 | (xy 3.302 -1.778) 777 | (xy 3.302 1.778) 778 | (xy 0.762 1.778) 779 | ) 780 | (stroke (width 0)) (fill (type none)) 781 | ) 782 | (polyline 783 | (pts 784 | (xy 1.016 0) 785 | (xy 2.032 0.381) 786 | (xy 2.032 -0.381) 787 | (xy 1.016 0) 788 | ) 789 | (stroke (width 0)) (fill (type outline)) 790 | ) 791 | (polyline 792 | (pts 793 | (xy 2.794 0.508) 794 | (xy 2.921 0.381) 795 | (xy 3.683 0.381) 796 | (xy 3.81 0.254) 797 | ) 798 | (stroke (width 0)) (fill (type none)) 799 | ) 800 | (polyline 801 | (pts 802 | (xy 3.302 0.381) 803 | (xy 2.921 -0.254) 804 | (xy 3.683 -0.254) 805 | (xy 3.302 0.381) 806 | ) 807 | (stroke (width 0)) (fill (type none)) 808 | ) 809 | ) 810 | (symbol "BSS123_1_1" 811 | (pin input line (at -5.08 0 0) (length 2.54) 812 | (name "G" (effects (font (size 1.27 1.27)))) 813 | (number "1" (effects (font (size 1.27 1.27)))) 814 | ) 815 | (pin passive line (at 2.54 -5.08 90) (length 2.54) 816 | (name "S" (effects (font (size 1.27 1.27)))) 817 | (number "2" (effects (font (size 1.27 1.27)))) 818 | ) 819 | (pin passive line (at 2.54 5.08 270) (length 2.54) 820 | (name "D" (effects (font (size 1.27 1.27)))) 821 | (number "3" (effects (font (size 1.27 1.27)))) 822 | ) 823 | ) 824 | ) 825 | (symbol "asl_symbols:FDN340P" (pin_names hide) (in_bom yes) (on_board yes) 826 | (property "Reference" "Q" (id 0) (at 5.08 1.905 0) 827 | (effects (font (size 1.27 1.27)) (justify left)) 828 | ) 829 | (property "Value" "FDN340P" (id 1) (at 5.08 0 0) 830 | (effects (font (size 1.27 1.27)) (justify left)) 831 | ) 832 | (property "Footprint" "Package_TO_SOT_SMD:SOT-23" (id 2) (at 5.08 -1.905 0) 833 | (effects (font (size 1.27 1.27) italic) (justify left) hide) 834 | ) 835 | (property "Datasheet" "https://www.digikey.com/products/en?keywords=FDN340PCT-ND" (id 3) (at 0 0 0) 836 | (effects (font (size 1.27 1.27)) (justify left) hide) 837 | ) 838 | (property "ki_keywords" "P-Channel MOSFET" (id 4) (at 0 0 0) 839 | (effects (font (size 1.27 1.27)) hide) 840 | ) 841 | (property "ki_description" "P-Channel MOSFET, SOT-23" (id 5) (at 0 0 0) 842 | (effects (font (size 1.27 1.27)) hide) 843 | ) 844 | (property "ki_fp_filters" "SOT?23*" (id 6) (at 0 0 0) 845 | (effects (font (size 1.27 1.27)) hide) 846 | ) 847 | (symbol "FDN340P_0_1" 848 | (circle (center 1.651 0) (radius 2.794) (stroke (width 0.254)) (fill (type none))) 849 | (circle (center 2.54 -1.778) (radius 0.254) (stroke (width 0)) (fill (type outline))) 850 | (circle (center 2.54 1.778) (radius 0.254) (stroke (width 0)) (fill (type outline))) 851 | (polyline 852 | (pts 853 | (xy 0.254 0) 854 | (xy -2.54 0) 855 | ) 856 | (stroke (width 0)) (fill (type none)) 857 | ) 858 | (polyline 859 | (pts 860 | (xy 0.254 1.905) 861 | (xy 0.254 -1.905) 862 | ) 863 | (stroke (width 0.254)) (fill (type none)) 864 | ) 865 | (polyline 866 | (pts 867 | (xy 0.762 -1.27) 868 | (xy 0.762 -2.286) 869 | ) 870 | (stroke (width 0.254)) (fill (type none)) 871 | ) 872 | (polyline 873 | (pts 874 | (xy 0.762 0.508) 875 | (xy 0.762 -0.508) 876 | ) 877 | (stroke (width 0.254)) (fill (type none)) 878 | ) 879 | (polyline 880 | (pts 881 | (xy 0.762 2.286) 882 | (xy 0.762 1.27) 883 | ) 884 | (stroke (width 0.254)) (fill (type none)) 885 | ) 886 | (polyline 887 | (pts 888 | (xy 2.54 2.54) 889 | (xy 2.54 1.778) 890 | ) 891 | (stroke (width 0)) (fill (type none)) 892 | ) 893 | (polyline 894 | (pts 895 | (xy 2.54 -2.54) 896 | (xy 2.54 0) 897 | (xy 0.762 0) 898 | ) 899 | (stroke (width 0)) (fill (type none)) 900 | ) 901 | (polyline 902 | (pts 903 | (xy 0.762 1.778) 904 | (xy 3.302 1.778) 905 | (xy 3.302 -1.778) 906 | (xy 0.762 -1.778) 907 | ) 908 | (stroke (width 0)) (fill (type none)) 909 | ) 910 | (polyline 911 | (pts 912 | (xy 2.286 0) 913 | (xy 1.27 0.381) 914 | (xy 1.27 -0.381) 915 | (xy 2.286 0) 916 | ) 917 | (stroke (width 0)) (fill (type outline)) 918 | ) 919 | (polyline 920 | (pts 921 | (xy 2.794 -0.508) 922 | (xy 2.921 -0.381) 923 | (xy 3.683 -0.381) 924 | (xy 3.81 -0.254) 925 | ) 926 | (stroke (width 0)) (fill (type none)) 927 | ) 928 | (polyline 929 | (pts 930 | (xy 3.302 -0.381) 931 | (xy 2.921 0.254) 932 | (xy 3.683 0.254) 933 | (xy 3.302 -0.381) 934 | ) 935 | (stroke (width 0)) (fill (type none)) 936 | ) 937 | ) 938 | (symbol "FDN340P_1_1" 939 | (pin input line (at -5.08 0 0) (length 2.54) 940 | (name "G" (effects (font (size 1.27 1.27)))) 941 | (number "1" (effects (font (size 1.27 1.27)))) 942 | ) 943 | (pin passive line (at 2.54 -5.08 90) (length 2.54) 944 | (name "S" (effects (font (size 1.27 1.27)))) 945 | (number "2" (effects (font (size 1.27 1.27)))) 946 | ) 947 | (pin passive line (at 2.54 5.08 270) (length 2.54) 948 | (name "D" (effects (font (size 1.27 1.27)))) 949 | (number "3" (effects (font (size 1.27 1.27)))) 950 | ) 951 | ) 952 | ) 953 | (symbol "asl_symbols_new:B3F-4000" (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes) 954 | (property "Reference" "S" (id 0) (at -3.81 5.08 0) 955 | (effects (font (size 1.27 1.27))) 956 | ) 957 | (property "Value" "B3F-4000" (id 1) (at 1.27 -5.08 0) 958 | (effects (font (size 1.27 1.27))) 959 | ) 960 | (property "Footprint" "" (id 2) (at -3.81 -2.54 0) 961 | (effects (font (size 1.27 1.27)) hide) 962 | ) 963 | (property "Datasheet" "https://www.digikey.com/products/en?keywords=B3F-4000" (id 3) (at -3.81 -2.54 0) 964 | (effects (font (size 1.27 1.27)) hide) 965 | ) 966 | (property "ki_keywords" "SPST-NO tactile switch omron B3F-4000 12mm" (id 4) (at 0 0 0) 967 | (effects (font (size 1.27 1.27)) hide) 968 | ) 969 | (property "ki_description" "12mm SPST-NO tactile switch" (id 5) (at 0 0 0) 970 | (effects (font (size 1.27 1.27)) hide) 971 | ) 972 | (property "ki_fp_filters" "*tactile*" (id 6) (at 0 0 0) 973 | (effects (font (size 1.27 1.27)) hide) 974 | ) 975 | (symbol "B3F-4000_0_1" 976 | (rectangle (start -5.08 3.81) (end 5.08 -3.81) 977 | (stroke (width 0)) (fill (type background)) 978 | ) 979 | (polyline 980 | (pts 981 | (xy -5.08 -1.27) 982 | (xy -5.08 1.27) 983 | ) 984 | (stroke (width 0)) (fill (type none)) 985 | ) 986 | (polyline 987 | (pts 988 | (xy 0 0) 989 | (xy 5.08 0) 990 | ) 991 | (stroke (width 0)) (fill (type none)) 992 | ) 993 | (polyline 994 | (pts 995 | (xy 5.08 -1.27) 996 | (xy 5.08 1.27) 997 | ) 998 | (stroke (width 0)) (fill (type none)) 999 | ) 1000 | (polyline 1001 | (pts 1002 | (xy -5.08 0) 1003 | (xy -2.54 0) 1004 | (xy 0 2.54) 1005 | ) 1006 | (stroke (width 0)) (fill (type none)) 1007 | ) 1008 | ) 1009 | (symbol "B3F-4000_1_1" 1010 | (pin bidirectional line (at -7.62 1.27 0) (length 2.54) 1011 | (name "in1" (effects (font (size 1.27 1.27)))) 1012 | (number "1" (effects (font (size 1.27 1.27)))) 1013 | ) 1014 | (pin bidirectional line (at -7.62 -1.27 0) (length 2.54) 1015 | (name "in2" (effects (font (size 1.27 1.27)))) 1016 | (number "2" (effects (font (size 1.27 1.27)))) 1017 | ) 1018 | (pin bidirectional line (at 7.62 1.27 180) (length 2.54) 1019 | (name "out1" (effects (font (size 1.27 1.27)))) 1020 | (number "3" (effects (font (size 1.27 1.27)))) 1021 | ) 1022 | (pin bidirectional line (at 7.62 -1.27 180) (length 2.54) 1023 | (name "out2" (effects (font (size 1.27 1.27)))) 1024 | (number "4" (effects (font (size 1.27 1.27)))) 1025 | ) 1026 | ) 1027 | ) 1028 | (symbol "asl_symbols_new:RG_encoder_switch" (pin_names (offset 0.254) hide) (in_bom yes) (on_board yes) 1029 | (property "Reference" "SW" (id 0) (at 0 6.604 0) 1030 | (effects (font (size 1.27 1.27))) 1031 | ) 1032 | (property "Value" "RG_encoder_switch" (id 1) (at 0 -6.604 0) 1033 | (effects (font (size 1.27 1.27))) 1034 | ) 1035 | (property "Footprint" "asl_footprints:RG_Encoder" (id 2) (at -3.81 4.064 0) 1036 | (effects (font (size 1.27 1.27)) hide) 1037 | ) 1038 | (property "Datasheet" "https://www.sparkfun.com/products/15140" (id 3) (at 0 6.604 0) 1039 | (effects (font (size 1.27 1.27)) hide) 1040 | ) 1041 | (property "ki_keywords" "rotary switch encoder switch push button" (id 4) (at 0 0 0) 1042 | (effects (font (size 1.27 1.27)) hide) 1043 | ) 1044 | (property "ki_description" "Rotary encoder with switch. Red and green LED knob" (id 5) (at 0 0 0) 1045 | (effects (font (size 1.27 1.27)) hide) 1046 | ) 1047 | (property "ki_fp_filters" "RotaryEncoder*Switch*" (id 6) (at 0 0 0) 1048 | (effects (font (size 1.27 1.27)) hide) 1049 | ) 1050 | (symbol "RG_encoder_switch_0_1" 1051 | (arc (start -0.381 -2.794) (end -0.381 2.667) (radius (at -0.381 -0.0508) (length 2.7432) (angles -89.9 89.9)) 1052 | (stroke (width 0.254)) (fill (type none)) 1053 | ) 1054 | (circle (center -3.81 0) (radius 0.254) (stroke (width 0)) (fill (type outline))) 1055 | (circle (center -0.381 0) (radius 1.905) (stroke (width 0.254)) (fill (type none))) 1056 | (rectangle (start -5.08 5.08) (end 5.08 -5.08) 1057 | (stroke (width 0.254)) (fill (type background)) 1058 | ) 1059 | (polyline 1060 | (pts 1061 | (xy -0.635 -1.778) 1062 | (xy -0.635 1.778) 1063 | ) 1064 | (stroke (width 0.254)) (fill (type none)) 1065 | ) 1066 | (polyline 1067 | (pts 1068 | (xy -0.381 -1.778) 1069 | (xy -0.381 1.778) 1070 | ) 1071 | (stroke (width 0.254)) (fill (type none)) 1072 | ) 1073 | (polyline 1074 | (pts 1075 | (xy -0.127 1.778) 1076 | (xy -0.127 -1.778) 1077 | ) 1078 | (stroke (width 0.254)) (fill (type none)) 1079 | ) 1080 | (polyline 1081 | (pts 1082 | (xy -5.08 -2.54) 1083 | (xy -3.81 -2.54) 1084 | (xy -3.81 -2.032) 1085 | ) 1086 | (stroke (width 0)) (fill (type none)) 1087 | ) 1088 | (polyline 1089 | (pts 1090 | (xy -5.08 2.54) 1091 | (xy -3.81 2.54) 1092 | (xy -3.81 2.032) 1093 | ) 1094 | (stroke (width 0)) (fill (type none)) 1095 | ) 1096 | (polyline 1097 | (pts 1098 | (xy 0.254 -3.048) 1099 | (xy -0.508 -2.794) 1100 | (xy 0.127 -2.413) 1101 | ) 1102 | (stroke (width 0.254)) (fill (type none)) 1103 | ) 1104 | (polyline 1105 | (pts 1106 | (xy 0.254 2.921) 1107 | (xy -0.508 2.667) 1108 | (xy 0.127 2.286) 1109 | ) 1110 | (stroke (width 0.254)) (fill (type none)) 1111 | ) 1112 | (polyline 1113 | (pts 1114 | (xy -5.08 0) 1115 | (xy -3.81 0) 1116 | (xy -3.81 -1.016) 1117 | (xy -3.302 -2.032) 1118 | ) 1119 | (stroke (width 0)) (fill (type none)) 1120 | ) 1121 | (polyline 1122 | (pts 1123 | (xy -4.318 0) 1124 | (xy -3.81 0) 1125 | (xy -3.81 1.016) 1126 | (xy -3.302 2.032) 1127 | ) 1128 | (stroke (width 0)) (fill (type none)) 1129 | ) 1130 | ) 1131 | (symbol "RG_encoder_switch_1_1" 1132 | (pin passive line (at -7.62 2.54 0) (length 2.54) 1133 | (name "A" (effects (font (size 1.27 1.27)))) 1134 | (number "A" (effects (font (size 1.27 1.27)))) 1135 | ) 1136 | (pin passive line (at -7.62 -2.54 0) (length 2.54) 1137 | (name "B" (effects (font (size 1.27 1.27)))) 1138 | (number "B" (effects (font (size 1.27 1.27)))) 1139 | ) 1140 | (pin passive line (at -7.62 0 0) (length 2.54) 1141 | (name "C" (effects (font (size 1.27 1.27)))) 1142 | (number "C" (effects (font (size 1.27 1.27)))) 1143 | ) 1144 | (pin passive line (at 7.62 -4.445 180) (length 2.54) 1145 | (name "S1" (effects (font (size 1.27 1.27)))) 1146 | (number "S1" (effects (font (size 1.27 1.27)))) 1147 | ) 1148 | (pin passive line (at 7.62 -1.905 180) (length 2.54) 1149 | (name "S2" (effects (font (size 1.27 1.27)))) 1150 | (number "S2" (effects (font (size 1.27 1.27)))) 1151 | ) 1152 | (pin input line (at 7.62 3.175 180) (length 2.54) 1153 | (name "S4" (effects (font (size 1.27 1.27)))) 1154 | (number "S4" (effects (font (size 1.27 1.27)))) 1155 | ) 1156 | (pin input line (at 7.62 0.635 180) (length 2.54) 1157 | (name "S3" (effects (font (size 1.27 1.27)))) 1158 | (number "S3" (effects (font (size 1.27 1.27)))) 1159 | ) 1160 | ) 1161 | ) 1162 | (symbol "asl_symbols_new:Threaded_Standoff" (pin_names (offset 1.016)) (in_bom yes) (on_board yes) 1163 | (property "Reference" "H" (id 0) (at 0 5.08 0) 1164 | (effects (font (size 1.27 1.27))) 1165 | ) 1166 | (property "Value" "Threaded_Standoff" (id 1) (at 0 3.175 0) 1167 | (effects (font (size 1.27 1.27))) 1168 | ) 1169 | (property "Footprint" "asl_footprints:standoff_nut" (id 2) (at 0 0 0) 1170 | (effects (font (size 1.27 1.27)) hide) 1171 | ) 1172 | (property "Datasheet" "https://www.adafruit.com/product/4207" (id 3) (at 0 0 0) 1173 | (effects (font (size 1.27 1.27)) hide) 1174 | ) 1175 | (property "ki_keywords" "mounting hole, m3" (id 4) (at 0 0 0) 1176 | (effects (font (size 1.27 1.27)) hide) 1177 | ) 1178 | (property "ki_description" "Mounting Hole without connection" (id 5) (at 0 0 0) 1179 | (effects (font (size 1.27 1.27)) hide) 1180 | ) 1181 | (property "ki_fp_filters" "MountingHole*" (id 6) (at 0 0 0) 1182 | (effects (font (size 1.27 1.27)) hide) 1183 | ) 1184 | (symbol "Threaded_Standoff_0_1" 1185 | (circle (center 0 0) (radius 1.27) (stroke (width 1.27)) (fill (type none))) 1186 | ) 1187 | ) 1188 | (symbol "power:GND" (power) (pin_names (offset 0)) (in_bom yes) (on_board yes) 1189 | (property "Reference" "#PWR" (id 0) (at 0 -6.35 0) 1190 | (effects (font (size 1.27 1.27)) hide) 1191 | ) 1192 | (property "Value" "GND" (id 1) (at 0 -3.81 0) 1193 | (effects (font (size 1.27 1.27))) 1194 | ) 1195 | (property "Footprint" "" (id 2) (at 0 0 0) 1196 | (effects (font (size 1.27 1.27)) hide) 1197 | ) 1198 | (property "Datasheet" "" (id 3) (at 0 0 0) 1199 | (effects (font (size 1.27 1.27)) hide) 1200 | ) 1201 | (property "ki_keywords" "power-flag" (id 4) (at 0 0 0) 1202 | (effects (font (size 1.27 1.27)) hide) 1203 | ) 1204 | (property "ki_description" "Power symbol creates a global label with name \"GND\" , ground" (id 5) (at 0 0 0) 1205 | (effects (font (size 1.27 1.27)) hide) 1206 | ) 1207 | (symbol "GND_0_1" 1208 | (polyline 1209 | (pts 1210 | (xy 0 0) 1211 | (xy 0 -1.27) 1212 | (xy 1.27 -1.27) 1213 | (xy 0 -2.54) 1214 | (xy -1.27 -1.27) 1215 | (xy 0 -1.27) 1216 | ) 1217 | (stroke (width 0)) (fill (type none)) 1218 | ) 1219 | ) 1220 | (symbol "GND_1_1" 1221 | (pin power_in line (at 0 0 270) (length 0) hide 1222 | (name "GND" (effects (font (size 1.27 1.27)))) 1223 | (number "1" (effects (font (size 1.27 1.27)))) 1224 | ) 1225 | ) 1226 | ) 1227 | ) 1228 | 1229 | (junction (at 33.655 38.1) (diameter 1.016) (color 0 0 0 0)) 1230 | (junction (at 33.655 52.07) (diameter 1.016) (color 0 0 0 0)) 1231 | (junction (at 33.655 66.04) (diameter 1.016) (color 0 0 0 0)) 1232 | (junction (at 33.655 80.01) (diameter 1.016) (color 0 0 0 0)) 1233 | (junction (at 33.655 93.345) (diameter 1.016) (color 0 0 0 0)) 1234 | (junction (at 62.23 136.525) (diameter 1.016) (color 0 0 0 0)) 1235 | (junction (at 66.04 144.145) (diameter 1.016) (color 0 0 0 0)) 1236 | (junction (at 66.04 165.735) (diameter 1.016) (color 0 0 0 0)) 1237 | (junction (at 69.85 136.525) (diameter 1.016) (color 0 0 0 0)) 1238 | (junction (at 69.85 144.145) (diameter 1.016) (color 0 0 0 0)) 1239 | (junction (at 76.2 151.765) (diameter 1.016) (color 0 0 0 0)) 1240 | (junction (at 81.28 151.765) (diameter 1.016) (color 0 0 0 0)) 1241 | (junction (at 82.55 144.145) (diameter 1.016) (color 0 0 0 0)) 1242 | (junction (at 109.855 120.015) (diameter 1.016) (color 0 0 0 0)) 1243 | 1244 | (no_connect (at 94.615 57.785)) 1245 | (no_connect (at 94.615 62.865)) 1246 | (no_connect (at 125.095 95.885)) 1247 | (no_connect (at 48.895 93.345)) 1248 | (no_connect (at 94.615 65.405)) 1249 | (no_connect (at 94.615 70.485)) 1250 | (no_connect (at 94.615 103.505)) 1251 | (no_connect (at 125.095 88.265)) 1252 | (no_connect (at 48.895 80.01)) 1253 | (no_connect (at 48.895 66.04)) 1254 | (no_connect (at 94.615 108.585)) 1255 | (no_connect (at 94.615 67.945)) 1256 | (no_connect (at 125.095 93.345)) 1257 | (no_connect (at 125.095 90.805)) 1258 | (no_connect (at 94.615 106.045)) 1259 | (no_connect (at 125.095 85.725)) 1260 | (no_connect (at 125.095 57.785)) 1261 | (no_connect (at 48.895 52.07)) 1262 | (no_connect (at 94.615 111.125)) 1263 | (no_connect (at 94.615 73.025)) 1264 | (no_connect (at 48.895 38.1)) 1265 | (no_connect (at 125.095 60.325)) 1266 | (no_connect (at 125.095 83.185)) 1267 | 1268 | (wire (pts (xy 33.655 40.64) (xy 33.655 38.1)) 1269 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1270 | ) 1271 | (wire (pts (xy 33.655 54.61) (xy 33.655 52.07)) 1272 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1273 | ) 1274 | (wire (pts (xy 33.655 68.58) (xy 33.655 66.04)) 1275 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1276 | ) 1277 | (wire (pts (xy 33.655 82.55) (xy 33.655 80.01)) 1278 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1279 | ) 1280 | (wire (pts (xy 33.655 93.345) (xy 33.655 95.885)) 1281 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1282 | ) 1283 | (wire (pts (xy 48.895 77.47) (xy 48.895 68.58)) 1284 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1285 | ) 1286 | (wire (pts (xy 48.895 77.47) (xy 60.325 77.47)) 1287 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1288 | ) 1289 | (wire (pts (xy 48.895 82.55) (xy 52.07 82.55)) 1290 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1291 | ) 1292 | (wire (pts (xy 48.895 136.525) (xy 48.895 146.05)) 1293 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1294 | ) 1295 | (wire (pts (xy 48.895 136.525) (xy 62.23 136.525)) 1296 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1297 | ) 1298 | (wire (pts (xy 48.895 156.21) (xy 48.895 165.735)) 1299 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1300 | ) 1301 | (wire (pts (xy 48.895 165.735) (xy 66.04 165.735)) 1302 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1303 | ) 1304 | (wire (pts (xy 51.435 88.265) (xy 51.435 95.885)) 1305 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1306 | ) 1307 | (wire (pts (xy 51.435 88.265) (xy 94.615 88.265)) 1308 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1309 | ) 1310 | (wire (pts (xy 51.435 95.885) (xy 48.895 95.885)) 1311 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1312 | ) 1313 | (wire (pts (xy 52.07 82.55) (xy 52.07 85.725)) 1314 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1315 | ) 1316 | (wire (pts (xy 52.07 85.725) (xy 94.615 85.725)) 1317 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1318 | ) 1319 | (wire (pts (xy 53.34 54.61) (xy 48.895 54.61)) 1320 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1321 | ) 1322 | (wire (pts (xy 53.34 54.61) (xy 53.34 74.295)) 1323 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1324 | ) 1325 | (wire (pts (xy 53.34 102.87) (xy 57.15 102.87)) 1326 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1327 | ) 1328 | (wire (pts (xy 53.34 105.41) (xy 57.15 105.41)) 1329 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1330 | ) 1331 | (wire (pts (xy 53.34 107.95) (xy 57.15 107.95)) 1332 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1333 | ) 1334 | (wire (pts (xy 53.34 110.49) (xy 57.15 110.49)) 1335 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1336 | ) 1337 | (wire (pts (xy 57.785 40.64) (xy 48.895 40.64)) 1338 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1339 | ) 1340 | (wire (pts (xy 57.785 40.64) (xy 57.785 72.39)) 1341 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1342 | ) 1343 | (wire (pts (xy 60.325 77.47) (xy 60.325 83.185)) 1344 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1345 | ) 1346 | (wire (pts (xy 60.325 83.185) (xy 94.615 83.185)) 1347 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1348 | ) 1349 | (wire (pts (xy 62.23 74.295) (xy 53.34 74.295)) 1350 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1351 | ) 1352 | (wire (pts (xy 62.23 80.645) (xy 62.23 74.295)) 1353 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1354 | ) 1355 | (wire (pts (xy 62.23 136.525) (xy 69.85 136.525)) 1356 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1357 | ) 1358 | (wire (pts (xy 62.23 137.795) (xy 62.23 136.525)) 1359 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1360 | ) 1361 | (wire (pts (xy 62.23 144.145) (xy 62.23 142.875)) 1362 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1363 | ) 1364 | (wire (pts (xy 62.23 144.145) (xy 66.04 144.145)) 1365 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1366 | ) 1367 | (wire (pts (xy 64.135 72.39) (xy 57.785 72.39)) 1368 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1369 | ) 1370 | (wire (pts (xy 64.135 78.105) (xy 64.135 72.39)) 1371 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1372 | ) 1373 | (wire (pts (xy 66.04 144.145) (xy 69.85 144.145)) 1374 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1375 | ) 1376 | (wire (pts (xy 66.04 146.685) (xy 66.04 144.145)) 1377 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1378 | ) 1379 | (wire (pts (xy 66.04 156.845) (xy 66.04 165.735)) 1380 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1381 | ) 1382 | (wire (pts (xy 69.85 136.525) (xy 77.47 136.525)) 1383 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1384 | ) 1385 | (wire (pts (xy 72.39 90.805) (xy 72.39 103.505)) 1386 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1387 | ) 1388 | (wire (pts (xy 72.39 90.805) (xy 94.615 90.805)) 1389 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1390 | ) 1391 | (wire (pts (xy 72.39 106.045) (xy 85.09 106.045)) 1392 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1393 | ) 1394 | (wire (pts (xy 76.2 151.765) (xy 73.66 151.765)) 1395 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1396 | ) 1397 | (wire (pts (xy 76.2 151.765) (xy 76.2 155.575)) 1398 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1399 | ) 1400 | (wire (pts (xy 76.2 151.765) (xy 81.28 151.765)) 1401 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1402 | ) 1403 | (wire (pts (xy 76.2 160.655) (xy 76.2 165.735)) 1404 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1405 | ) 1406 | (wire (pts (xy 76.2 165.735) (xy 66.04 165.735)) 1407 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1408 | ) 1409 | (wire (pts (xy 76.835 93.345) (xy 94.615 93.345)) 1410 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1411 | ) 1412 | (wire (pts (xy 76.835 108.585) (xy 72.39 108.585)) 1413 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1414 | ) 1415 | (wire (pts (xy 76.835 108.585) (xy 76.835 93.345)) 1416 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1417 | ) 1418 | (wire (pts (xy 77.47 64.135) (xy 77.47 75.565)) 1419 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1420 | ) 1421 | (wire (pts (xy 77.47 75.565) (xy 94.615 75.565)) 1422 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1423 | ) 1424 | (wire (pts (xy 81.28 151.765) (xy 87.63 151.765)) 1425 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1426 | ) 1427 | (wire (pts (xy 81.28 154.305) (xy 81.28 151.765)) 1428 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1429 | ) 1430 | (wire (pts (xy 81.28 159.385) (xy 81.28 160.655)) 1431 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1432 | ) 1433 | (wire (pts (xy 81.28 160.655) (xy 88.9 160.655)) 1434 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1435 | ) 1436 | (wire (pts (xy 82.55 144.145) (xy 69.85 144.145)) 1437 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1438 | ) 1439 | (wire (pts (xy 82.55 144.145) (xy 102.87 144.145)) 1440 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1441 | ) 1442 | (wire (pts (xy 85.09 106.045) (xy 85.09 120.015)) 1443 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1444 | ) 1445 | (wire (pts (xy 85.09 120.015) (xy 109.855 120.015)) 1446 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1447 | ) 1448 | (wire (pts (xy 87.63 136.525) (xy 93.345 136.525)) 1449 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1450 | ) 1451 | (wire (pts (xy 91.44 95.885) (xy 94.615 95.885)) 1452 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1453 | ) 1454 | (wire (pts (xy 91.44 98.425) (xy 94.615 98.425)) 1455 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1456 | ) 1457 | (wire (pts (xy 91.44 100.965) (xy 94.615 100.965)) 1458 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1459 | ) 1460 | (wire (pts (xy 92.075 165.735) (xy 95.25 165.735)) 1461 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1462 | ) 1463 | (wire (pts (xy 92.71 52.705) (xy 94.615 52.705)) 1464 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1465 | ) 1466 | (wire (pts (xy 92.71 55.245) (xy 94.615 55.245)) 1467 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1468 | ) 1469 | (wire (pts (xy 92.71 60.325) (xy 94.615 60.325)) 1470 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1471 | ) 1472 | (wire (pts (xy 94.615 78.105) (xy 64.135 78.105)) 1473 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1474 | ) 1475 | (wire (pts (xy 94.615 80.645) (xy 62.23 80.645)) 1476 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1477 | ) 1478 | (wire (pts (xy 95.25 156.845) (xy 95.25 165.735)) 1479 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1480 | ) 1481 | (wire (pts (xy 102.87 144.145) (xy 102.87 151.765)) 1482 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1483 | ) 1484 | (wire (pts (xy 109.855 45.085) (xy 109.855 47.625)) 1485 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1486 | ) 1487 | (wire (pts (xy 109.855 118.745) (xy 109.855 120.015)) 1488 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1489 | ) 1490 | (wire (pts (xy 109.855 120.015) (xy 109.855 121.285)) 1491 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1492 | ) 1493 | (wire (pts (xy 125.095 52.705) (xy 127.635 52.705)) 1494 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1495 | ) 1496 | (wire (pts (xy 127.635 45.085) (xy 109.855 45.085)) 1497 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1498 | ) 1499 | (wire (pts (xy 138.43 60.96) (xy 142.24 60.96)) 1500 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1501 | ) 1502 | (wire (pts (xy 138.43 63.5) (xy 142.24 63.5)) 1503 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1504 | ) 1505 | (wire (pts (xy 138.43 66.04) (xy 142.24 66.04)) 1506 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1507 | ) 1508 | (wire (pts (xy 154.94 60.96) (xy 158.75 60.96)) 1509 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1510 | ) 1511 | (wire (pts (xy 154.94 63.5) (xy 158.75 63.5)) 1512 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1513 | ) 1514 | (wire (pts (xy 154.94 66.04) (xy 158.75 66.04)) 1515 | (stroke (width 0) (type solid) (color 0 0 0 0)) 1516 | ) 1517 | 1518 | (label "VBATT" (at 48.895 136.525 0) 1519 | (effects (font (size 1.27 1.27)) (justify left bottom)) 1520 | ) 1521 | (label "SW" (at 53.34 102.87 180) 1522 | (effects (font (size 1.27 1.27)) (justify right bottom)) 1523 | ) 1524 | (label "RED_LED" (at 53.34 105.41 180) 1525 | (effects (font (size 1.27 1.27)) (justify right bottom)) 1526 | ) 1527 | (label "GREEN_LED" (at 53.34 107.95 180) 1528 | (effects (font (size 1.27 1.27)) (justify right bottom)) 1529 | ) 1530 | (label "BTN" (at 88.9 160.655 0) 1531 | (effects (font (size 1.27 1.27)) (justify left bottom)) 1532 | ) 1533 | (label "BTN" (at 91.44 95.885 180) 1534 | (effects (font (size 1.27 1.27)) (justify right bottom)) 1535 | ) 1536 | (label "RED_LED" (at 91.44 98.425 180) 1537 | (effects (font (size 1.27 1.27)) (justify right bottom)) 1538 | ) 1539 | (label "GREEN_LED" (at 91.44 100.965 180) 1540 | (effects (font (size 1.27 1.27)) (justify right bottom)) 1541 | ) 1542 | (label "SW" (at 92.075 165.735 0) 1543 | (effects (font (size 1.27 1.27)) (justify left bottom)) 1544 | ) 1545 | (label "IO0" (at 92.71 52.705 180) 1546 | (effects (font (size 1.27 1.27)) (justify right bottom)) 1547 | ) 1548 | (label "TXDO" (at 92.71 55.245 180) 1549 | (effects (font (size 1.27 1.27)) (justify right bottom)) 1550 | ) 1551 | (label "RXDO" (at 92.71 60.325 180) 1552 | (effects (font (size 1.27 1.27)) (justify right bottom)) 1553 | ) 1554 | (label "VIN" (at 93.345 136.525 0) 1555 | (effects (font (size 1.27 1.27)) (justify left bottom)) 1556 | ) 1557 | (label "VIN" (at 109.855 45.085 0) 1558 | (effects (font (size 1.27 1.27)) (justify left bottom)) 1559 | ) 1560 | (label "EN" (at 127.635 52.705 180) 1561 | (effects (font (size 1.27 1.27)) (justify right bottom)) 1562 | ) 1563 | (label "EN" (at 138.43 60.96 180) 1564 | (effects (font (size 1.27 1.27)) (justify right bottom)) 1565 | ) 1566 | (label "TXDO" (at 138.43 63.5 180) 1567 | (effects (font (size 1.27 1.27)) (justify right bottom)) 1568 | ) 1569 | (label "RXDO" (at 138.43 66.04 180) 1570 | (effects (font (size 1.27 1.27)) (justify right bottom)) 1571 | ) 1572 | (label "VIN" (at 158.75 60.96 0) 1573 | (effects (font (size 1.27 1.27)) (justify left bottom)) 1574 | ) 1575 | (label "GND" (at 158.75 63.5 0) 1576 | (effects (font (size 1.27 1.27)) (justify left bottom)) 1577 | ) 1578 | (label "IO0" (at 158.75 66.04 0) 1579 | (effects (font (size 1.27 1.27)) (justify left bottom)) 1580 | ) 1581 | 1582 | (symbol (lib_id "power:GND") (at 33.655 38.1 0) (mirror x) (unit 1) 1583 | (in_bom yes) (on_board yes) 1584 | (uuid "04a67598-c5b6-47da-a73e-3a3e5030719a") 1585 | (property "Reference" "#PWR0102" (id 0) (at 33.655 31.75 0) 1586 | (effects (font (size 1.27 1.27)) hide) 1587 | ) 1588 | (property "Value" "GND" (id 1) (at 33.7693 33.7756 0)) 1589 | (property "Footprint" "" (id 2) (at 33.655 38.1 0) 1590 | (effects (font (size 1.27 1.27)) hide) 1591 | ) 1592 | (property "Datasheet" "" (id 3) (at 33.655 38.1 0) 1593 | (effects (font (size 1.27 1.27)) hide) 1594 | ) 1595 | ) 1596 | 1597 | (symbol (lib_id "power:GND") (at 33.655 52.07 0) (mirror x) (unit 1) 1598 | (in_bom yes) (on_board yes) 1599 | (uuid "11151542-eabf-4be3-96d6-91c655be8fe7") 1600 | (property "Reference" "#PWR0106" (id 0) (at 33.655 45.72 0) 1601 | (effects (font (size 1.27 1.27)) hide) 1602 | ) 1603 | (property "Value" "GND" (id 1) (at 33.7693 47.7456 0)) 1604 | (property "Footprint" "" (id 2) (at 33.655 52.07 0) 1605 | (effects (font (size 1.27 1.27)) hide) 1606 | ) 1607 | (property "Datasheet" "" (id 3) (at 33.655 52.07 0) 1608 | (effects (font (size 1.27 1.27)) hide) 1609 | ) 1610 | ) 1611 | 1612 | (symbol (lib_id "power:GND") (at 33.655 66.04 0) (mirror x) (unit 1) 1613 | (in_bom yes) (on_board yes) 1614 | (uuid "be15bfd8-fa29-4b02-a976-06033a9594ec") 1615 | (property "Reference" "#PWR0104" (id 0) (at 33.655 59.69 0) 1616 | (effects (font (size 1.27 1.27)) hide) 1617 | ) 1618 | (property "Value" "GND" (id 1) (at 33.7693 61.7156 0)) 1619 | (property "Footprint" "" (id 2) (at 33.655 66.04 0) 1620 | (effects (font (size 1.27 1.27)) hide) 1621 | ) 1622 | (property "Datasheet" "" (id 3) (at 33.655 66.04 0) 1623 | (effects (font (size 1.27 1.27)) hide) 1624 | ) 1625 | ) 1626 | 1627 | (symbol (lib_id "power:GND") (at 33.655 80.01 0) (mirror x) (unit 1) 1628 | (in_bom yes) (on_board yes) 1629 | (uuid "021be944-363e-41f2-88ae-8a574d14035a") 1630 | (property "Reference" "#PWR0105" (id 0) (at 33.655 73.66 0) 1631 | (effects (font (size 1.27 1.27)) hide) 1632 | ) 1633 | (property "Value" "GND" (id 1) (at 33.7693 75.6856 0)) 1634 | (property "Footprint" "" (id 2) (at 33.655 80.01 0) 1635 | (effects (font (size 1.27 1.27)) hide) 1636 | ) 1637 | (property "Datasheet" "" (id 3) (at 33.655 80.01 0) 1638 | (effects (font (size 1.27 1.27)) hide) 1639 | ) 1640 | ) 1641 | 1642 | (symbol (lib_id "power:GND") (at 33.655 93.345 0) (mirror x) (unit 1) 1643 | (in_bom yes) (on_board yes) 1644 | (uuid "7f2773dc-c46a-4cdd-a40b-08dbd3b403a1") 1645 | (property "Reference" "#PWR0107" (id 0) (at 33.655 86.995 0) 1646 | (effects (font (size 1.27 1.27)) hide) 1647 | ) 1648 | (property "Value" "GND" (id 1) (at 33.7693 89.0206 0)) 1649 | (property "Footprint" "" (id 2) (at 33.655 93.345 0) 1650 | (effects (font (size 1.27 1.27)) hide) 1651 | ) 1652 | (property "Datasheet" "" (id 3) (at 33.655 93.345 0) 1653 | (effects (font (size 1.27 1.27)) hide) 1654 | ) 1655 | ) 1656 | 1657 | (symbol (lib_id "power:GND") (at 53.34 110.49 0) (mirror y) (unit 1) 1658 | (in_bom yes) (on_board yes) 1659 | (uuid "f27138d9-c1c4-4b60-af70-25cd188ef851") 1660 | (property "Reference" "#PWR03" (id 0) (at 53.34 116.84 0) 1661 | (effects (font (size 1.27 1.27)) hide) 1662 | ) 1663 | (property "Value" "GND" (id 1) (at 53.2257 114.8144 0)) 1664 | (property "Footprint" "" (id 2) (at 53.34 110.49 0) 1665 | (effects (font (size 1.27 1.27)) hide) 1666 | ) 1667 | (property "Datasheet" "" (id 3) (at 53.34 110.49 0) 1668 | (effects (font (size 1.27 1.27)) hide) 1669 | ) 1670 | ) 1671 | 1672 | (symbol (lib_id "power:GND") (at 66.04 165.735 0) (mirror y) (unit 1) 1673 | (in_bom yes) (on_board yes) 1674 | (uuid "98c93dd4-b0d8-46df-b1d2-81941832add6") 1675 | (property "Reference" "#PWR04" (id 0) (at 66.04 172.085 0) 1676 | (effects (font (size 1.27 1.27)) hide) 1677 | ) 1678 | (property "Value" "GND" (id 1) (at 65.913 170.1292 0)) 1679 | (property "Footprint" "" (id 2) (at 66.04 165.735 0) 1680 | (effects (font (size 1.27 1.27)) hide) 1681 | ) 1682 | (property "Datasheet" "" (id 3) (at 66.04 165.735 0) 1683 | (effects (font (size 1.27 1.27)) hide) 1684 | ) 1685 | ) 1686 | 1687 | (symbol (lib_id "power:GND") (at 77.47 64.135 180) (unit 1) 1688 | (in_bom yes) (on_board yes) 1689 | (uuid "f034667b-4054-4078-8f83-a4c4a0b304c9") 1690 | (property "Reference" "#PWR01" (id 0) (at 77.47 57.785 0) 1691 | (effects (font (size 1.27 1.27)) hide) 1692 | ) 1693 | (property "Value" "GND" (id 1) (at 77.3557 59.8106 0)) 1694 | (property "Footprint" "" (id 2) (at 77.47 64.135 0) 1695 | (effects (font (size 1.27 1.27)) hide) 1696 | ) 1697 | (property "Datasheet" "" (id 3) (at 77.47 64.135 0) 1698 | (effects (font (size 1.27 1.27)) hide) 1699 | ) 1700 | ) 1701 | 1702 | (symbol (lib_id "power:GND") (at 109.855 121.285 0) (mirror y) (unit 1) 1703 | (in_bom yes) (on_board yes) 1704 | (uuid "f79f7256-167e-4143-a350-4120bebbeb6d") 1705 | (property "Reference" "#PWR0101" (id 0) (at 109.855 127.635 0) 1706 | (effects (font (size 1.27 1.27)) hide) 1707 | ) 1708 | (property "Value" "GND" (id 1) (at 109.728 125.6792 0)) 1709 | (property "Footprint" "" (id 2) (at 109.855 121.285 0) 1710 | (effects (font (size 1.27 1.27)) hide) 1711 | ) 1712 | (property "Datasheet" "" (id 3) (at 109.855 121.285 0) 1713 | (effects (font (size 1.27 1.27)) hide) 1714 | ) 1715 | ) 1716 | 1717 | (symbol (lib_id "Device:R_Small_US") (at 62.23 140.335 0) (mirror x) (unit 1) 1718 | (in_bom yes) (on_board yes) 1719 | (uuid "1c5d45a8-b529-414b-82bb-378ea10698d3") 1720 | (property "Reference" "R1" (id 0) (at 58.42 139.065 0)) 1721 | (property "Value" "100KΩ" (id 1) (at 57.15 141.605 0)) 1722 | (property "Footprint" "Resistor_SMD:R_0805_2012Metric" (id 2) (at 62.23 140.335 0) 1723 | (effects (font (size 1.27 1.27)) hide) 1724 | ) 1725 | (property "Datasheet" "~" (id 3) (at 62.23 140.335 0) 1726 | (effects (font (size 1.27 1.27)) hide) 1727 | ) 1728 | ) 1729 | 1730 | (symbol (lib_id "Device:R_Small_US") (at 76.2 158.115 0) (mirror x) (unit 1) 1731 | (in_bom yes) (on_board yes) 1732 | (uuid "26f5ad76-ecf5-4624-b7c6-8517afeb1dfe") 1733 | (property "Reference" "R4" (id 0) (at 72.39 156.845 0)) 1734 | (property "Value" "1MΩ" (id 1) (at 72.39 159.385 0)) 1735 | (property "Footprint" "Resistor_SMD:R_0805_2012Metric" (id 2) (at 76.2 158.115 0) 1736 | (effects (font (size 1.27 1.27)) hide) 1737 | ) 1738 | (property "Datasheet" "~" (id 3) (at 76.2 158.115 0) 1739 | (effects (font (size 1.27 1.27)) hide) 1740 | ) 1741 | ) 1742 | 1743 | (symbol (lib_id "Device:R_Small_US") (at 81.28 156.845 180) (unit 1) 1744 | (in_bom yes) (on_board yes) 1745 | (uuid "cf171abc-e219-4519-be37-3734e11e5d45") 1746 | (property "Reference" "R3" (id 0) (at 85.09 158.115 0)) 1747 | (property "Value" "330Ω" (id 1) (at 86.36 155.575 0)) 1748 | (property "Footprint" "Resistor_SMD:R_0805_2012Metric" (id 2) (at 81.28 156.845 0) 1749 | (effects (font (size 1.27 1.27)) hide) 1750 | ) 1751 | (property "Datasheet" "~" (id 3) (at 81.28 156.845 0) 1752 | (effects (font (size 1.27 1.27)) hide) 1753 | ) 1754 | ) 1755 | 1756 | (symbol (lib_id "asl_symbols_new:Threaded_Standoff") (at 146.05 96.52 0) (unit 1) 1757 | (in_bom yes) (on_board yes) 1758 | (uuid "ee47bf5f-b88a-4226-901d-96cfa8cf97a4") 1759 | (property "Reference" "H3" (id 0) (at 148.5901 95.3706 0) 1760 | (effects (font (size 1.27 1.27)) (justify left)) 1761 | ) 1762 | (property "Value" "4207" (id 1) (at 148.5901 97.6693 0) 1763 | (effects (font (size 1.27 1.27)) (justify left)) 1764 | ) 1765 | (property "Footprint" "asl_footprints:standoff_nut" (id 2) (at 146.05 96.52 0) 1766 | (effects (font (size 1.27 1.27)) hide) 1767 | ) 1768 | (property "Datasheet" "https://www.adafruit.com/product/4207" (id 3) (at 146.05 96.52 0) 1769 | (effects (font (size 1.27 1.27)) hide) 1770 | ) 1771 | (property "Description" "Threaded Standoff" (id 4) (at 146.05 96.52 0) 1772 | (effects (font (size 1.27 1.27)) hide) 1773 | ) 1774 | ) 1775 | 1776 | (symbol (lib_id "asl_symbols_new:Threaded_Standoff") (at 146.05 107.315 0) (unit 1) 1777 | (in_bom yes) (on_board yes) 1778 | (uuid "fa171690-08cb-419b-b572-12640e3141ee") 1779 | (property "Reference" "H4" (id 0) (at 148.5901 106.1656 0) 1780 | (effects (font (size 1.27 1.27)) (justify left)) 1781 | ) 1782 | (property "Value" "4207" (id 1) (at 148.5901 108.4643 0) 1783 | (effects (font (size 1.27 1.27)) (justify left)) 1784 | ) 1785 | (property "Footprint" "asl_footprints:standoff_nut" (id 2) (at 146.05 107.315 0) 1786 | (effects (font (size 1.27 1.27)) hide) 1787 | ) 1788 | (property "Datasheet" "https://www.adafruit.com/product/4207" (id 3) (at 146.05 107.315 0) 1789 | (effects (font (size 1.27 1.27)) hide) 1790 | ) 1791 | (property "Description" "Threaded Standoff" (id 4) (at 146.05 107.315 0) 1792 | (effects (font (size 1.27 1.27)) hide) 1793 | ) 1794 | ) 1795 | 1796 | (symbol (lib_id "Device:R_US") (at 127.635 48.895 0) (mirror x) (unit 1) 1797 | (in_bom yes) (on_board yes) 1798 | (uuid "7496cacb-0c47-4d2b-abf5-032d02301362") 1799 | (property "Reference" "R2" (id 0) (at 125.4761 47.5044 90) 1800 | (effects (font (size 1.27 1.27)) (justify left)) 1801 | ) 1802 | (property "Value" "10KΩ" (id 1) (at 129.9211 46.4757 90) 1803 | (effects (font (size 1.27 1.27)) (justify left)) 1804 | ) 1805 | (property "Footprint" "Resistor_SMD:R_0805_2012Metric" (id 2) (at 128.651 48.641 90) 1806 | (effects (font (size 1.27 1.27)) hide) 1807 | ) 1808 | (property "Datasheet" "~" (id 3) (at 127.635 48.895 0) 1809 | (effects (font (size 1.27 1.27)) hide) 1810 | ) 1811 | ) 1812 | 1813 | (symbol (lib_id "Device:C") (at 69.85 140.335 0) (unit 1) 1814 | (in_bom yes) (on_board yes) 1815 | (uuid "8fb9af12-6d60-4537-b5c6-177f4b7e2091") 1816 | (property "Reference" "C1" (id 0) (at 72.771 139.1666 0) 1817 | (effects (font (size 1.27 1.27)) (justify left)) 1818 | ) 1819 | (property "Value" "10nF" (id 1) (at 72.771 141.478 0) 1820 | (effects (font (size 1.27 1.27)) (justify left)) 1821 | ) 1822 | (property "Footprint" "Capacitor_SMD:C_0805_2012Metric" (id 2) (at 70.8152 144.145 0) 1823 | (effects (font (size 1.27 1.27)) hide) 1824 | ) 1825 | (property "Datasheet" "~" (id 3) (at 69.85 140.335 0) 1826 | (effects (font (size 1.27 1.27)) hide) 1827 | ) 1828 | ) 1829 | 1830 | (symbol (lib_name "Device:Battery_1") (lib_id "Device:Battery") (at 48.895 151.13 0) (mirror y) (unit 1) 1831 | (in_bom yes) (on_board yes) 1832 | (uuid "68cd8ed1-77aa-431c-80c1-b004e4bb121f") 1833 | (property "Reference" "BT1" (id 0) (at 46.1518 149.9616 0) 1834 | (effects (font (size 1.27 1.27)) (justify left)) 1835 | ) 1836 | (property "Value" "2462" (id 1) (at 46.1518 152.273 0) 1837 | (effects (font (size 1.27 1.27)) (justify left)) 1838 | ) 1839 | (property "Footprint" "Battery:BatteryHolder_Keystone_2462_2xAA" (id 2) (at 48.895 149.606 90) 1840 | (effects (font (size 1.27 1.27)) hide) 1841 | ) 1842 | (property "Datasheet" "https://www.digikey.com/product-detail/en/keystone-electronics/2466/36-2466-ND/303815" (id 3) (at 48.895 149.606 90) 1843 | (effects (font (size 1.27 1.27)) hide) 1844 | ) 1845 | (property "Description" "Battery Holder" (id 4) (at 48.895 151.13 0) 1846 | (effects (font (size 1.27 1.27)) hide) 1847 | ) 1848 | ) 1849 | 1850 | (symbol (lib_id "Connector_Generic:Conn_02x03_Odd_Even") (at 147.32 63.5 0) (unit 1) 1851 | (in_bom yes) (on_board yes) 1852 | (uuid "bcecf37d-ba9f-43d6-87d3-a9b99bca187d") 1853 | (property "Reference" "J1" (id 0) (at 148.59 55.4798 0)) 1854 | (property "Value" "Conn_02x03_Odd_Even" (id 1) (at 148.59 57.7785 0)) 1855 | (property "Footprint" "Connector:Tag-Connect_TC2030-IDC-NL_2x03_P1.27mm_Vertical" (id 2) (at 147.32 63.5 0) 1856 | (effects (font (size 1.27 1.27)) hide) 1857 | ) 1858 | (property "Datasheet" "~" (id 3) (at 147.32 63.5 0) 1859 | (effects (font (size 1.27 1.27)) hide) 1860 | ) 1861 | ) 1862 | 1863 | (symbol (lib_id "Transistor_FET:BSS123") (at 68.58 151.765 0) (mirror y) (unit 1) 1864 | (in_bom yes) (on_board yes) 1865 | (uuid "078afe2e-8c2f-4b09-8885-bfa6f4554b4b") 1866 | (property "Reference" "Q2" (id 0) (at 63.3984 150.5966 0) 1867 | (effects (font (size 1.27 1.27)) (justify left)) 1868 | ) 1869 | (property "Value" "BSS123" (id 1) (at 63.3984 152.908 0) 1870 | (effects (font (size 1.27 1.27)) (justify left)) 1871 | ) 1872 | (property "Footprint" "Package_TO_SOT_SMD:SOT-23" (id 2) (at 63.5 153.67 0) 1873 | (effects (font (size 1.27 1.27) italic) (justify left) hide) 1874 | ) 1875 | (property "Datasheet" "https://www.digikey.com/products/en?keywords=BSS123LT1GOSCT-ND" (id 3) (at 68.58 151.765 0) 1876 | (effects (font (size 1.27 1.27)) (justify left) hide) 1877 | ) 1878 | (property "Description" "N-Channel MOSFET" (id 4) (at 68.58 151.765 0) 1879 | (effects (font (size 1.27 1.27)) hide) 1880 | ) 1881 | (property "LCSC" "C431506" (id 4) (at 68.58 151.765 0) 1882 | (effects (font (size 1.27 1.27)) hide) 1883 | ) 1884 | ) 1885 | 1886 | (symbol (lib_id "asl_symbols:FDN340P") (at 82.55 139.065 270) (mirror x) (unit 1) 1887 | (in_bom yes) (on_board yes) 1888 | (uuid "76db99d0-2b3f-45d8-b464-3f77e436c74f") 1889 | (property "Reference" "Q1" (id 0) (at 78.74 130.175 90) 1890 | (effects (font (size 1.27 1.27)) (justify left)) 1891 | ) 1892 | (property "Value" "FDN340P" (id 1) (at 78.74 132.715 90) 1893 | (effects (font (size 1.27 1.27)) (justify left)) 1894 | ) 1895 | (property "Footprint" "Package_TO_SOT_SMD:SOT-23" (id 2) (at 80.645 133.985 0) 1896 | (effects (font (size 1.27 1.27) italic) (justify left) hide) 1897 | ) 1898 | (property "Datasheet" "https://www.digikey.com/products/en?keywords=FDN340PCT-ND" (id 3) (at 82.55 139.065 0) 1899 | (effects (font (size 1.27 1.27)) (justify left) hide) 1900 | ) 1901 | (property "Description" "P-Channel MOSFET" (id 4) (at 82.55 139.065 0) 1902 | (effects (font (size 1.27 1.27)) hide) 1903 | ) 1904 | (property "LCSC" "C75469" (id 4) (at 82.55 139.065 0) 1905 | (effects (font (size 1.27 1.27)) hide) 1906 | ) 1907 | ) 1908 | 1909 | (symbol (lib_id "Diode:BAT54C") (at 95.25 151.765 0) (unit 1) 1910 | (in_bom yes) (on_board yes) 1911 | (uuid "c89dd6d4-f977-4e12-b465-f69e8ebcdbee") 1912 | (property "Reference" "D1" (id 0) (at 95.25 146.05 0)) 1913 | (property "Value" "BAT54C" (id 1) (at 95.25 148.3614 0)) 1914 | (property "Footprint" "Package_TO_SOT_SMD:SOT-23" (id 2) (at 97.155 148.59 0) 1915 | (effects (font (size 1.27 1.27)) (justify left) hide) 1916 | ) 1917 | (property "Datasheet" "http://www.diodes.com/_files/datasheets/ds11005.pdf" (id 3) (at 93.218 151.765 0) 1918 | (effects (font (size 1.27 1.27)) hide) 1919 | ) 1920 | (property "Description" "Schottky Diode" (id 4) (at 95.25 151.765 0) 1921 | (effects (font (size 1.27 1.27)) hide) 1922 | ) 1923 | (property "LCSC" "C397610" (id 4) (at 95.25 151.765 0) 1924 | (effects (font (size 1.27 1.27)) hide) 1925 | ) 1926 | ) 1927 | 1928 | (symbol (lib_id "asl_symbols_new:B3F-4000") (at 41.275 39.37 180) (unit 1) 1929 | (in_bom yes) (on_board yes) 1930 | (uuid "94ded66d-42eb-47ac-a3ea-7ba9b5a627e4") 1931 | (property "Reference" "S4" (id 0) (at 41.275 47.2632 0)) 1932 | (property "Value" "COM-10302" (id 1) (at 41.275 44.9645 0)) 1933 | (property "Footprint" "asl_footprints:sparkfun_tactile_color" (id 2) (at 45.085 36.83 0) 1934 | (effects (font (size 1.27 1.27)) hide) 1935 | ) 1936 | (property "Datasheet" "https://www.sparkfun.com/products/10302" (id 3) (at 45.085 36.83 0) 1937 | (effects (font (size 1.27 1.27)) hide) 1938 | ) 1939 | (property "Description" "Tactile Button" (id 4) (at 41.275 39.37 0) 1940 | (effects (font (size 1.27 1.27)) hide) 1941 | ) 1942 | ) 1943 | 1944 | (symbol (lib_id "asl_symbols_new:B3F-4000") (at 41.275 53.34 180) (unit 1) 1945 | (in_bom yes) (on_board yes) 1946 | (uuid "304797eb-6516-4818-88ed-63b2cefe3b41") 1947 | (property "Reference" "S3" (id 0) (at 41.275 61.2332 0)) 1948 | (property "Value" "COM-10302" (id 1) (at 41.275 58.9345 0)) 1949 | (property "Footprint" "asl_footprints:sparkfun_tactile_color" (id 2) (at 45.085 50.8 0) 1950 | (effects (font (size 1.27 1.27)) hide) 1951 | ) 1952 | (property "Datasheet" "https://www.sparkfun.com/products/10302" (id 3) (at 45.085 50.8 0) 1953 | (effects (font (size 1.27 1.27)) hide) 1954 | ) 1955 | (property "Description" "Tactile Button" (id 4) (at 41.275 53.34 0) 1956 | (effects (font (size 1.27 1.27)) hide) 1957 | ) 1958 | ) 1959 | 1960 | (symbol (lib_id "asl_symbols_new:B3F-4000") (at 41.275 67.31 180) (unit 1) 1961 | (in_bom yes) (on_board yes) 1962 | (uuid "78972a3c-c27a-4787-9d9d-e5a63b0f0072") 1963 | (property "Reference" "S2" (id 0) (at 41.275 75.2032 0)) 1964 | (property "Value" "COM-10302" (id 1) (at 41.275 72.9045 0)) 1965 | (property "Footprint" "asl_footprints:sparkfun_tactile_color" (id 2) (at 45.085 64.77 0) 1966 | (effects (font (size 1.27 1.27)) hide) 1967 | ) 1968 | (property "Datasheet" "https://www.sparkfun.com/products/10302" (id 3) (at 45.085 64.77 0) 1969 | (effects (font (size 1.27 1.27)) hide) 1970 | ) 1971 | (property "Description" "Tactile Button" (id 4) (at 41.275 67.31 0) 1972 | (effects (font (size 1.27 1.27)) hide) 1973 | ) 1974 | ) 1975 | 1976 | (symbol (lib_id "asl_symbols_new:B3F-4000") (at 41.275 81.28 180) (unit 1) 1977 | (in_bom yes) (on_board yes) 1978 | (uuid "09b1a856-1020-4d31-b492-845178d8ed2b") 1979 | (property "Reference" "S1" (id 0) (at 41.275 89.1732 0)) 1980 | (property "Value" "COM-10302" (id 1) (at 41.275 86.8745 0)) 1981 | (property "Footprint" "asl_footprints:sparkfun_tactile_color" (id 2) (at 45.085 78.74 0) 1982 | (effects (font (size 1.27 1.27)) hide) 1983 | ) 1984 | (property "Datasheet" "https://www.sparkfun.com/products/10302" (id 3) (at 45.085 78.74 0) 1985 | (effects (font (size 1.27 1.27)) hide) 1986 | ) 1987 | (property "Description" "Tactile Button" (id 4) (at 41.275 81.28 0) 1988 | (effects (font (size 1.27 1.27)) hide) 1989 | ) 1990 | ) 1991 | 1992 | (symbol (lib_id "asl_symbols_new:B3F-4000") (at 41.275 94.615 180) (unit 1) 1993 | (in_bom yes) (on_board yes) 1994 | (uuid "ca65b9ab-91fc-4bf4-a6ca-7f5f7ae8782e") 1995 | (property "Reference" "S5" (id 0) (at 41.275 102.5082 0)) 1996 | (property "Value" "COM-10302" (id 1) (at 41.275 100.2095 0)) 1997 | (property "Footprint" "asl_footprints:sparkfun_tactile_color" (id 2) (at 45.085 92.075 0) 1998 | (effects (font (size 1.27 1.27)) hide) 1999 | ) 2000 | (property "Datasheet" "https://www.sparkfun.com/products/10302" (id 3) (at 45.085 92.075 0) 2001 | (effects (font (size 1.27 1.27)) hide) 2002 | ) 2003 | (property "Description" "Tactile Button" (id 4) (at 41.275 94.615 0) 2004 | (effects (font (size 1.27 1.27)) hide) 2005 | ) 2006 | ) 2007 | 2008 | (symbol (lib_id "asl_symbols_new:RG_encoder_switch") (at 64.77 106.045 0) (mirror y) (unit 1) 2009 | (in_bom yes) (on_board yes) 2010 | (uuid "7b0eabb6-1c0c-4d4d-ab9a-eedb18f20ce8") 2011 | (property "Reference" "SW1" (id 0) (at 64.77 96.7548 0)) 2012 | (property "Value" "COM-15140" (id 1) (at 64.77 99.0535 0)) 2013 | (property "Footprint" "asl_footprints:RG_Encoder" (id 2) (at 68.58 101.981 0) 2014 | (effects (font (size 1.27 1.27)) hide) 2015 | ) 2016 | (property "Datasheet" "https://www.sparkfun.com/products/15140" (id 3) (at 64.77 99.441 0) 2017 | (effects (font (size 1.27 1.27)) hide) 2018 | ) 2019 | (property "Description" "Rotary Encoder" (id 4) (at 64.77 106.045 0) 2020 | (effects (font (size 1.27 1.27)) hide) 2021 | ) 2022 | ) 2023 | 2024 | (symbol (lib_id "RF_Module:ESP32-WROOM-32D") (at 109.855 83.185 0) (mirror y) (unit 1) 2025 | (in_bom yes) (on_board yes) 2026 | (uuid "98d3b15f-2a24-4a20-844a-7780cd63a896") 2027 | (property "Reference" "U1" (id 0) (at 97.79 45.7008 0)) 2028 | (property "Value" "ESP32-WROOM-32E" (id 1) (at 96.52 48.6345 0)) 2029 | (property "Footprint" "RF_Module:ESP32-WROOM-32" (id 2) (at 109.855 121.285 0) 2030 | (effects (font (size 1.27 1.27)) hide) 2031 | ) 2032 | (property "Datasheet" "https://www.digikey.com/en/products/detail/espressif-systems/ESP32-WROOM-32E-4MB/11613125" (id 3) (at 117.475 81.915 0) 2033 | (effects (font (size 1.27 1.27)) hide) 2034 | ) 2035 | (property "LCSC" "C701341" (id 4) (at 109.855 83.185 0) 2036 | (effects (font (size 1.27 1.27)) hide) 2037 | ) 2038 | (property "Description" "Microcontroller" (id 4) (at 109.855 83.185 0) 2039 | (effects (font (size 1.27 1.27)) hide) 2040 | ) 2041 | ) 2042 | 2043 | (sheet_instances 2044 | (path "/" (page "1")) 2045 | ) 2046 | 2047 | (symbol_instances 2048 | (path "/f034667b-4054-4078-8f83-a4c4a0b304c9" 2049 | (reference "#PWR01") (unit 1) (value "GND") (footprint "") 2050 | ) 2051 | (path "/f27138d9-c1c4-4b60-af70-25cd188ef851" 2052 | (reference "#PWR03") (unit 1) (value "GND") (footprint "") 2053 | ) 2054 | (path "/98c93dd4-b0d8-46df-b1d2-81941832add6" 2055 | (reference "#PWR04") (unit 1) (value "GND") (footprint "") 2056 | ) 2057 | (path "/f79f7256-167e-4143-a350-4120bebbeb6d" 2058 | (reference "#PWR0101") (unit 1) (value "GND") (footprint "") 2059 | ) 2060 | (path "/04a67598-c5b6-47da-a73e-3a3e5030719a" 2061 | (reference "#PWR0102") (unit 1) (value "GND") (footprint "") 2062 | ) 2063 | (path "/be15bfd8-fa29-4b02-a976-06033a9594ec" 2064 | (reference "#PWR0104") (unit 1) (value "GND") (footprint "") 2065 | ) 2066 | (path "/021be944-363e-41f2-88ae-8a574d14035a" 2067 | (reference "#PWR0105") (unit 1) (value "GND") (footprint "") 2068 | ) 2069 | (path "/11151542-eabf-4be3-96d6-91c655be8fe7" 2070 | (reference "#PWR0106") (unit 1) (value "GND") (footprint "") 2071 | ) 2072 | (path "/7f2773dc-c46a-4cdd-a40b-08dbd3b403a1" 2073 | (reference "#PWR0107") (unit 1) (value "GND") (footprint "") 2074 | ) 2075 | (path "/68cd8ed1-77aa-431c-80c1-b004e4bb121f" 2076 | (reference "BT1") (unit 1) (value "2462") (footprint "Battery:BatteryHolder_Keystone_2462_2xAA") 2077 | ) 2078 | (path "/8fb9af12-6d60-4537-b5c6-177f4b7e2091" 2079 | (reference "C1") (unit 1) (value "10nF") (footprint "Capacitor_SMD:C_0805_2012Metric") 2080 | ) 2081 | (path "/c89dd6d4-f977-4e12-b465-f69e8ebcdbee" 2082 | (reference "D1") (unit 1) (value "BAT54C") (footprint "Package_TO_SOT_SMD:SOT-23") 2083 | ) 2084 | (path "/ee47bf5f-b88a-4226-901d-96cfa8cf97a4" 2085 | (reference "H3") (unit 1) (value "4207") (footprint "asl_footprints:standoff_nut") 2086 | ) 2087 | (path "/fa171690-08cb-419b-b572-12640e3141ee" 2088 | (reference "H4") (unit 1) (value "4207") (footprint "asl_footprints:standoff_nut") 2089 | ) 2090 | (path "/bcecf37d-ba9f-43d6-87d3-a9b99bca187d" 2091 | (reference "J1") (unit 1) (value "Conn_02x03_Odd_Even") (footprint "Connector:Tag-Connect_TC2030-IDC-NL_2x03_P1.27mm_Vertical") 2092 | ) 2093 | (path "/76db99d0-2b3f-45d8-b464-3f77e436c74f" 2094 | (reference "Q1") (unit 1) (value "FDN340P") (footprint "Package_TO_SOT_SMD:SOT-23") 2095 | ) 2096 | (path "/078afe2e-8c2f-4b09-8885-bfa6f4554b4b" 2097 | (reference "Q2") (unit 1) (value "BSS123") (footprint "Package_TO_SOT_SMD:SOT-23") 2098 | ) 2099 | (path "/1c5d45a8-b529-414b-82bb-378ea10698d3" 2100 | (reference "R1") (unit 1) (value "100KΩ") (footprint "Resistor_SMD:R_0805_2012Metric") 2101 | ) 2102 | (path "/7496cacb-0c47-4d2b-abf5-032d02301362" 2103 | (reference "R2") (unit 1) (value "10KΩ") (footprint "Resistor_SMD:R_0805_2012Metric") 2104 | ) 2105 | (path "/cf171abc-e219-4519-be37-3734e11e5d45" 2106 | (reference "R3") (unit 1) (value "330Ω") (footprint "Resistor_SMD:R_0805_2012Metric") 2107 | ) 2108 | (path "/26f5ad76-ecf5-4624-b7c6-8517afeb1dfe" 2109 | (reference "R4") (unit 1) (value "1MΩ") (footprint "Resistor_SMD:R_0805_2012Metric") 2110 | ) 2111 | (path "/09b1a856-1020-4d31-b492-845178d8ed2b" 2112 | (reference "S1") (unit 1) (value "COM-10302") (footprint "asl_footprints:sparkfun_tactile_color") 2113 | ) 2114 | (path "/78972a3c-c27a-4787-9d9d-e5a63b0f0072" 2115 | (reference "S2") (unit 1) (value "COM-10302") (footprint "asl_footprints:sparkfun_tactile_color") 2116 | ) 2117 | (path "/304797eb-6516-4818-88ed-63b2cefe3b41" 2118 | (reference "S3") (unit 1) (value "COM-10302") (footprint "asl_footprints:sparkfun_tactile_color") 2119 | ) 2120 | (path "/94ded66d-42eb-47ac-a3ea-7ba9b5a627e4" 2121 | (reference "S4") (unit 1) (value "COM-10302") (footprint "asl_footprints:sparkfun_tactile_color") 2122 | ) 2123 | (path "/ca65b9ab-91fc-4bf4-a6ca-7f5f7ae8782e" 2124 | (reference "S5") (unit 1) (value "COM-10302") (footprint "asl_footprints:sparkfun_tactile_color") 2125 | ) 2126 | (path "/7b0eabb6-1c0c-4d4d-ab9a-eedb18f20ce8" 2127 | (reference "SW1") (unit 1) (value "COM-15140") (footprint "asl_footprints:RG_Encoder") 2128 | ) 2129 | (path "/98d3b15f-2a24-4a20-844a-7780cd63a896" 2130 | (reference "U1") (unit 1) (value "ESP32-WROOM-32E") (footprint "RF_Module:ESP32-WROOM-32") 2131 | ) 2132 | ) 2133 | ) 2134 | -------------------------------------------------------------------------------- /software/.gitignore: -------------------------------------------------------------------------------- 1 | .pio 2 | .vscode/.browse.c_cpp.db* 3 | .vscode/c_cpp_properties.json 4 | .vscode/launch.json 5 | .vscode/ipch 6 | -------------------------------------------------------------------------------- /software/.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 | -------------------------------------------------------------------------------- /software/include/README: -------------------------------------------------------------------------------- 1 | 2 | This directory is intended for project header files. 3 | 4 | A header file is a file containing C declarations and macro definitions 5 | to be shared between several project source files. You request the use of a 6 | header file in your project source file (C, C++, etc) located in `src` folder 7 | by including it, with the C preprocessing directive `#include'. 8 | 9 | ```src/main.c 10 | 11 | #include "header.h" 12 | 13 | int main (void) 14 | { 15 | ... 16 | } 17 | ``` 18 | 19 | Including a header file produces the same results as copying the header file 20 | into each source file that needs it. Such copying would be time-consuming 21 | and error-prone. With a header file, the related declarations appear 22 | in only one place. If they need to be changed, they can be changed in one 23 | place, and programs that include the header file will automatically use the 24 | new version when next recompiled. The header file eliminates the labor of 25 | finding and changing all the copies as well as the risk that a failure to 26 | find one copy will result in inconsistencies within a program. 27 | 28 | In C, the usual convention is to give header files names that end with `.h'. 29 | It is most portable to use only letters, digits, dashes, and underscores in 30 | header file names, and at most one dot. 31 | 32 | Read more about using header files in official GCC documentation: 33 | 34 | * Include Syntax 35 | * Include Operation 36 | * Once-Only Headers 37 | * Computed Includes 38 | 39 | https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html 40 | -------------------------------------------------------------------------------- /software/lib/README: -------------------------------------------------------------------------------- 1 | 2 | This directory is intended for project specific (private) libraries. 3 | PlatformIO will compile them to static libraries and link into executable file. 4 | 5 | The source code of each library should be placed in a an own separate directory 6 | ("lib/your_library_name/[here are source files]"). 7 | 8 | For example, see a structure of the following two libraries `Foo` and `Bar`: 9 | 10 | |--lib 11 | | | 12 | | |--Bar 13 | | | |--docs 14 | | | |--examples 15 | | | |--src 16 | | | |- Bar.c 17 | | | |- Bar.h 18 | | | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html 19 | | | 20 | | |--Foo 21 | | | |- Foo.c 22 | | | |- Foo.h 23 | | | 24 | | |- README --> THIS FILE 25 | | 26 | |- platformio.ini 27 | |--src 28 | |- main.c 29 | 30 | and a contents of `src/main.c`: 31 | ``` 32 | #include 33 | #include 34 | 35 | int main (void) 36 | { 37 | ... 38 | } 39 | 40 | ``` 41 | 42 | PlatformIO Library Dependency Finder will find automatically dependent 43 | libraries scanning project source files. 44 | 45 | More information about PlatformIO Library Dependency Finder 46 | - https://docs.platformio.org/page/librarymanager/ldf.html 47 | -------------------------------------------------------------------------------- /software/platformio.ini: -------------------------------------------------------------------------------- 1 | ; PlatformIO Project Configuration File 2 | ; 3 | ; Build options: build flags, source filter 4 | ; Upload options: custom upload port, speed and extra flags 5 | ; Library options: dependencies, extra library storages 6 | ; Advanced options: extra scripting 7 | ; 8 | ; Please visit documentation for the other options and examples 9 | ; https://docs.platformio.org/page/projectconf.html 10 | 11 | [env:esp32dev] 12 | platform = espressif32 13 | board = esp32dev 14 | framework = arduino 15 | monitor_speed = 115200 16 | upload_speed = 921600 17 | board_build.f_cpu = 80000000L ;reduces power consumption 18 | ; board_build.flash_mode = qio 19 | ; build_flags = -DCORE_DEBUG_LEVEL=0 20 | 21 | 22 | upload_protocol = esptool 23 | upload_port = /dev/cu.usbserial-14411201 24 | ; upload_port = /dev/cu.usbserial-14401 25 | 26 | ; monitor_port = /dev/cu.usbserial-14411201 27 | lib_deps = 28 | t-vk/ESP32 BLE Keyboard @ ^0.2.2 -------------------------------------------------------------------------------- /software/src/bluetooth.h: -------------------------------------------------------------------------------- 1 | //bluetooth 2 | void connecting(); 3 | void print_version(); 4 | void notify(int fkey); 5 | void shortcut(char ltr); 6 | void change_view(view new_view = gallery); 7 | void leave(); 8 | void shutdown(); 9 | 10 | void connecting(){ 11 | last_active = millis(); 12 | ledcWrite(greenPWM,0); 13 | bool inhaling = true; 14 | byte red_brightness = knob_brightness; 15 | while(!bleKeyboard.isConnected()){ 16 | delay(2); 17 | if (!digitalRead(btn_5)){ 18 | check_for_hold(btn_5, shutdown_hold, shutdown); 19 | } 20 | if (inhaling){ 21 | if (red_brightness<255){ 22 | red_brightness++; 23 | ledcWrite(redPWM,red_brightness); 24 | } 25 | else{ 26 | inhaling = false; 27 | } 28 | } 29 | else{ 30 | if (red_brightness>0){ 31 | red_brightness--; 32 | ledcWrite(redPWM,red_brightness); 33 | } 34 | else{ 35 | inhaling = true; 36 | } 37 | } 38 | if (millis() - last_active > connection_timer){ 39 | shutdown(); 40 | } 41 | } 42 | delay(500); 43 | ledcWrite(redPWM,0); 44 | ledcWrite(greenPWM,knob_brightness); 45 | } 46 | 47 | void print_version(){ 48 | bleKeyboard.print("version:"); 49 | bleKeyboard.println(VERSION); 50 | bleKeyboard.print("os:"); 51 | bleKeyboard.println(active_os); 52 | bleKeyboard.print("mode:"); 53 | bleKeyboard.println(active_mode); 54 | } 55 | 56 | void notify(int fkey){ 57 | bleKeyboard.press(KEY_LEFT_CTRL); 58 | bleKeyboard.press(KEY_LEFT_GUI); 59 | bleKeyboard.press(KEY_LEFT_ALT); 60 | bleKeyboard.press(fkey); 61 | bleKeyboard.releaseAll(); 62 | } 63 | 64 | void shortcut(char ltr){ 65 | if (active_os == mac){ 66 | bleKeyboard.press(KEY_LEFT_SHIFT); 67 | bleKeyboard.press(KEY_LEFT_GUI); 68 | } 69 | else{ 70 | bleKeyboard.press(KEY_LEFT_ALT); 71 | } 72 | bleKeyboard.press(ltr); 73 | bleKeyboard.releaseAll(); 74 | pulse(); 75 | delay(50); 76 | } 77 | 78 | void change_view(view new_view){ 79 | if (active_os == mac){ 80 | shortcut('w'); 81 | } 82 | else{ 83 | bleKeyboard.press(KEY_LEFT_ALT); 84 | if (new_view == gallery){ 85 | bleKeyboard.press(KEY_F2); 86 | } 87 | else if (new_view == speaker){ 88 | bleKeyboard.press(KEY_F1); 89 | } 90 | bleKeyboard.releaseAll(); 91 | } 92 | } 93 | 94 | void leave(){ 95 | if (active_os == mac){ 96 | bleKeyboard.press(KEY_LEFT_GUI); 97 | bleKeyboard.press('w'); 98 | } 99 | else{ 100 | bleKeyboard.press(KEY_LEFT_ALT); 101 | bleKeyboard.press('q'); 102 | } 103 | 104 | bleKeyboard.releaseAll(); 105 | delay(250); 106 | bleKeyboard.write(KEY_RETURN); 107 | last_chance(8000); 108 | } 109 | 110 | void shutdown(){ 111 | EEPROM.write(MODE_BYTE,active_mode); 112 | EEPROM.write(OS_BYTE,active_os); 113 | EEPROM.commit(); 114 | ledcWrite(greenPWM,0); 115 | ledcWrite(redPWM,0); 116 | pinMode(latch_BTN,OUTPUT); 117 | digitalWrite(latch_BTN,LOW); 118 | } -------------------------------------------------------------------------------- /software/src/hardware.h: -------------------------------------------------------------------------------- 1 | // pin defines 2 | const byte latch_BTN = 25; 3 | const byte encoderPin1 = 22; 4 | const byte encoderPin2 = 23; 5 | const byte btn_1 = 19; 6 | const byte btn_2 = 18; 7 | const byte btn_3 = 17; 8 | const byte btn_4 = 16; 9 | const byte btn_5 = 21; 10 | const byte red_LED = 26; 11 | const byte green_LED = 27; 12 | 13 | //knob 14 | volatile int lastEncoded = 0; 15 | int tempNow = 0,tempOld = 0; 16 | const byte knob_sensitivity = 2; 17 | const byte resolution = 8; 18 | const byte redPWM = 0; 19 | const byte greenPWM = 1; 20 | const int freq = 500; // 5000 Khz produced a hum at 50% duty cycle, so brought this down 21 | const byte knob_brightness = 100; 22 | 23 | 24 | //hardware 25 | void updateEncoder(); 26 | bool check_for_activity(); 27 | bool double_click( int btn_pin); 28 | bool check_for_hold(int btn_pin, int hold_duration, void (*passed_fxn)()); 29 | bool check_for_hold(int btn_pin, int hold_duration, void (*passed_fxn)(os),os newos); 30 | void blink_yellow(int num_blinks); 31 | void pulse(); 32 | 33 | 34 | void updateEncoder(){ 35 | int MSB = digitalRead(encoderPin1); //MSB = most significant bit 36 | int LSB = digitalRead(encoderPin2); //LSB = least significant bit 37 | int encoded = (MSB << 1) |LSB; //converting the 2 pin value to single number 38 | int sum = (lastEncoded << 2) | encoded; //adding it to the previous encoded value 39 | if(sum == 0b1101 || sum == 0b0100 || sum == 0b0010 || sum == 0b1011) tempNow++; 40 | if(sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000) tempNow--; 41 | lastEncoded = encoded; //store this value for next time 42 | } 43 | 44 | bool check_for_activity(){ 45 | if (tempNow-tempOld>knob_sensitivity){ 46 | return true; 47 | } 48 | if (tempNow-tempOld<-knob_sensitivity){ 49 | return true; 50 | } 51 | if (!digitalRead(latch_BTN)){// 52 | return true; 53 | } 54 | if (!digitalRead(btn_1)){// 55 | return true; 56 | } 57 | if (!digitalRead(btn_2)){// 58 | return true; 59 | } 60 | if (!digitalRead(btn_3)){// 61 | return true; 62 | } 63 | if (!digitalRead(btn_4)){// 64 | return true; 65 | } 66 | return false; 67 | } 68 | 69 | bool double_click(int btn_pin){ 70 | while(!digitalRead(btn_pin)){ 71 | delay(2); //in first press 72 | } 73 | int second_press_timer = 0; 74 | bool double_clicked = false; 75 | while(second_press_timer < 120){ 76 | delay(1); 77 | second_press_timer++; 78 | if (!digitalRead(btn_pin)){ 79 | Serial.println("Double click!"); 80 | double_clicked = true; 81 | break; 82 | } 83 | } 84 | Serial.println(second_press_timer); 85 | return double_clicked; 86 | } 87 | 88 | bool check_for_hold(int btn_pin, int hold_duration, void (*passed_fxn)()){ 89 | int hold_count = 0; 90 | bool hold_threshold_met = false; 91 | while(!digitalRead(btn_pin)){ 92 | delay(1); 93 | hold_count++; 94 | if (hold_count>hold_duration){ 95 | passed_fxn(); 96 | while(!digitalRead(btn_pin)){ 97 | delay(1); 98 | } 99 | hold_threshold_met = true; 100 | } 101 | } 102 | return hold_threshold_met; 103 | } 104 | 105 | bool check_for_hold(int btn_pin, int hold_duration, void (*passed_fxn)(os),os newos){ 106 | int hold_count = 0; 107 | bool hold_threshold_met = false; 108 | while(!digitalRead(btn_pin)){ 109 | delay(1); 110 | hold_count++; 111 | if (hold_count>hold_duration){ 112 | passed_fxn(newos); 113 | while(!digitalRead(btn_pin)){ 114 | delay(1); 115 | } 116 | hold_threshold_met = true; 117 | } 118 | } 119 | return hold_threshold_met; 120 | } 121 | 122 | void blink_yellow(int num_blinks){ 123 | for (int i=0; iknob_brightness; i--){ 133 | ledcWrite(greenPWM,i); 134 | delay(1); 135 | } 136 | } -------------------------------------------------------------------------------- /software/src/main.cpp: -------------------------------------------------------------------------------- 1 | # define VERSION 2021042300 2 | 3 | #include 4 | #include 5 | #include 6 | #include "soc/soc.h" 7 | #include "soc/rtc_cntl_reg.h" 8 | 9 | #define OS_BYTE 0 10 | #define MODE_BYTE 1 11 | 12 | BleKeyboard bleKeyboard("Zoom Controller","Lustig Labs"); 13 | 14 | //timing 15 | unsigned long last_active; 16 | unsigned long idle_limit; 17 | const int connection_timer = 30*1000; // shutdown and stop trying to connect after 25 seconds 18 | const int warning_countdown = 5*1000; // send warning 5 seconds before idle shutdown 19 | const int zoom_idle = 30 * 60*1000; //30 minutes 20 | const int youtube_idle = 5 * 60*1000; //5 minutes 21 | const byte debounce = 200; 22 | const int os_hold = 2000; 23 | const int shutdown_hold = 500; 24 | 25 | enum os {mac,windows}; 26 | enum os active_os; 27 | enum mode {zoom, youtube}; 28 | enum mode active_mode; 29 | enum view {speaker,gallery}; 30 | 31 | void change_mode(mode newmode); 32 | void change_os(os new_os); 33 | void last_chance(int last_chance_timer); 34 | void reset_inactive_clock(); 35 | 36 | #include "hardware.h" 37 | #include "bluetooth.h" 38 | 39 | /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 40 | /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 41 | void setup() { 42 | pinMode(latch_BTN, INPUT_PULLUP); 43 | 44 | WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //disable brownout detector 45 | 46 | EEPROM.begin(2); 47 | active_mode = static_cast(EEPROM.read(MODE_BYTE)); 48 | if (active_mode != zoom && active_mode != youtube){ 49 | active_mode = zoom; 50 | } 51 | active_os = static_cast(EEPROM.read(OS_BYTE)); 52 | if (active_os != mac && active_os != windows){ 53 | active_os = mac; 54 | } 55 | 56 | ledcSetup(redPWM, freq, resolution); 57 | ledcWrite(redPWM,knob_brightness); 58 | ledcSetup(greenPWM, freq, resolution); 59 | ledcAttachPin(red_LED, redPWM); 60 | ledcAttachPin(green_LED, greenPWM); 61 | pinMode(btn_1,INPUT_PULLUP); 62 | pinMode(btn_2,INPUT_PULLUP); 63 | pinMode(btn_3,INPUT_PULLUP); 64 | pinMode(btn_4,INPUT_PULLUP); 65 | pinMode(btn_5,INPUT_PULLUP); 66 | 67 | bleKeyboard.begin(); 68 | connecting(); 69 | 70 | //encoder setup 71 | pinMode(encoderPin1, INPUT_PULLUP); 72 | pinMode(encoderPin2, INPUT_PULLUP); 73 | attachInterrupt(digitalPinToInterrupt(encoderPin1), updateEncoder, CHANGE); 74 | attachInterrupt(digitalPinToInterrupt(encoderPin2), updateEncoder, CHANGE); 75 | 76 | Serial.begin(115200); 77 | 78 | check_for_hold(latch_BTN,5000,print_version); 79 | while(!digitalRead(latch_BTN)){ 80 | delay(1); 81 | } 82 | delay(debounce); 83 | reset_inactive_clock(); 84 | change_mode(active_mode); 85 | } 86 | 87 | /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 88 | void loop() { 89 | while(!bleKeyboard.isConnected()){ 90 | connecting(); 91 | } 92 | /***************** ZOOM MODE ********************************/ 93 | if( active_mode == zoom){ 94 | if (tempNow-tempOld>knob_sensitivity){ 95 | bleKeyboard.write(KEY_MEDIA_VOLUME_UP); 96 | tempNow = tempOld; 97 | reset_inactive_clock(); 98 | } 99 | else if (tempNow-tempOld<-knob_sensitivity){ 100 | bleKeyboard.write(KEY_MEDIA_VOLUME_DOWN); 101 | tempNow = tempOld; 102 | reset_inactive_clock(); 103 | } 104 | else if (!digitalRead(latch_BTN)){ 105 | while(!digitalRead(latch_BTN)){ 106 | if(!digitalRead(btn_1)){ 107 | bool was_held = check_for_hold(btn_1, os_hold, change_os,mac); 108 | if(!was_held){ 109 | change_mode(zoom); 110 | } 111 | } 112 | else if(!digitalRead(btn_2)){ 113 | bool was_held = check_for_hold(btn_2, os_hold, change_os,windows); 114 | if(!was_held){ 115 | change_mode(youtube); 116 | } 117 | } 118 | } 119 | reset_inactive_clock(); 120 | } 121 | else if (!digitalRead(btn_1)){ 122 | shortcut('a'); //toggle mic 123 | reset_inactive_clock(); 124 | } 125 | else if (!digitalRead(btn_2)){ 126 | reset_inactive_clock(); 127 | shortcut('v');//toggle video 128 | } 129 | else if (!digitalRead(btn_3)){ 130 | shortcut('s'); //share screen 131 | reset_inactive_clock(); 132 | } 133 | else if (!digitalRead(btn_4)){ 134 | reset_inactive_clock(); 135 | if(double_click(btn_4)){ 136 | change_view(gallery); 137 | } 138 | else{ 139 | change_view(speaker); 140 | } 141 | delay(debounce); 142 | } 143 | else if (!digitalRead(btn_5)){ 144 | reset_inactive_clock(); 145 | check_for_hold(btn_5, shutdown_hold, shutdown); 146 | leave(); 147 | } 148 | } 149 | /***************** YOUTUBE MODE ********************************/ 150 | else if (active_mode == youtube){ 151 | if (tempNow-tempOld>knob_sensitivity){//CW 152 | bleKeyboard.write('d'); 153 | tempNow = tempOld; 154 | reset_inactive_clock(); 155 | } 156 | else if (tempNow-tempOld<-knob_sensitivity){//CCW 157 | bleKeyboard.write('s'); 158 | tempNow = tempOld; 159 | reset_inactive_clock(); 160 | } 161 | else if (!digitalRead(latch_BTN)){ 162 | bool alternate_cmd = false; 163 | while(!digitalRead(latch_BTN)){ 164 | if(!digitalRead(btn_1)){ 165 | bool was_held = check_for_hold(btn_1, os_hold, change_os,mac); 166 | if(!was_held){ 167 | change_mode(zoom); 168 | } 169 | alternate_cmd = true; 170 | } 171 | else if(!digitalRead(btn_2)){ 172 | bool was_held = check_for_hold(btn_2, os_hold, change_os,windows); 173 | if(!was_held){ 174 | change_mode(youtube); 175 | } 176 | alternate_cmd = true; 177 | } 178 | } 179 | if (!alternate_cmd){ //just clicked, did not click and rotate 180 | bleKeyboard.write('r'); 181 | delay(debounce); 182 | } 183 | reset_inactive_clock(); 184 | } 185 | else if (!digitalRead(btn_1)){ 186 | while(!digitalRead(btn_1)){ 187 | if (tempNow-tempOld>knob_sensitivity){//CW 188 | tempNow = tempOld; 189 | bleKeyboard.write(KEY_MEDIA_VOLUME_UP); 190 | } 191 | else if (tempNow-tempOld<-knob_sensitivity){//CCW 192 | tempNow = tempOld; 193 | bleKeyboard.write(KEY_MEDIA_VOLUME_DOWN); 194 | } 195 | } 196 | reset_inactive_clock(); 197 | } 198 | else if (!digitalRead(btn_2)){ 199 | bleKeyboard.write('z'); //seek backward 200 | pulse(); 201 | delay(debounce); 202 | reset_inactive_clock(); 203 | } 204 | else if (!digitalRead(btn_3)){ 205 | bleKeyboard.write('x'); //seek forward 206 | pulse(); 207 | delay(debounce); 208 | reset_inactive_clock(); 209 | } 210 | else if (!digitalRead(btn_4)){ 211 | bleKeyboard.write('f'); //toggle fullscreen 212 | pulse(); 213 | delay(debounce); 214 | reset_inactive_clock(); 215 | } 216 | 217 | else if (!digitalRead(btn_5)){ 218 | check_for_hold(btn_5, shutdown_hold, shutdown); 219 | bleKeyboard.write(' '); //play/pause video 220 | pulse(); 221 | delay(debounce); 222 | reset_inactive_clock(); 223 | } 224 | } 225 | 226 | if (millis() - last_active > (idle_limit - warning_countdown)){ 227 | notify(KEY_F3);//send warning 228 | last_chance(warning_countdown); 229 | reset_inactive_clock(); 230 | } 231 | } 232 | 233 | //////////////////////////////////////////////////////////////////////////////////////////////////////////// 234 | //////////////////////////////////////////////////////////////////////////////////////////////////////////// 235 | void reset_inactive_clock(){ 236 | last_active = millis(); 237 | } 238 | 239 | void change_mode(mode newmode){ 240 | switch (newmode){ 241 | case zoom: 242 | notify(KEY_F4); 243 | idle_limit = zoom_idle; 244 | break; 245 | case youtube: 246 | notify(KEY_F5); 247 | idle_limit = youtube_idle; 248 | break; 249 | } 250 | pulse(); 251 | active_mode = newmode; 252 | } 253 | 254 | void change_os(os new_os){ 255 | if (new_os == windows){ 256 | active_os = windows; 257 | notify(KEY_F2); 258 | blink_yellow(7); 259 | } 260 | else if (new_os == mac){ 261 | active_os = mac; 262 | notify(KEY_F1); 263 | blink_yellow(3); 264 | } 265 | } 266 | 267 | void last_chance(int last_chance_timer){ 268 | unsigned long start_last_chance = millis(); 269 | int blink_delay = 150; 270 | bool stay_awake = false; 271 | while( millis() - start_last_chance < last_chance_timer){ 272 | for( int i = 0 ; i