├── .gitignore ├── README.md ├── arduino-stoerbert.ino ├── assets ├── final.jpg ├── inner_back.jpg ├── inner_front.jpg ├── pcb_cad.jpg ├── pcb_cad.pdf ├── pcb_etched.jpg ├── pcb_populated.jpg └── pinout.png ├── cad ├── cad.pretty │ ├── DIP-16_W7.62mm_large.kicad_mod │ ├── PinHeader_1x03_P2.00mm_Vertical_large.kicad_mod │ ├── PinHeader_1x06_P2.00mm_Vertical_large.kicad_mod │ └── ToggleSwitch.kicad_mod ├── fp-lib-table ├── stoerbert-cache.lib ├── stoerbert.bck ├── stoerbert.dcm ├── stoerbert.kicad_pcb ├── stoerbert.kicad_pcb-bak ├── stoerbert.lib ├── stoerbert.pro ├── stoerbert.sch ├── stoerbert.sch-bak └── sym-lib-table ├── commands.h ├── debug.h ├── pins.h ├── player.cpp ├── player.h ├── plugin.h ├── power.cpp ├── power.h ├── sr.cpp └── sr.h /.gitignore: -------------------------------------------------------------------------------- 1 | cad/fp-info-cache 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Intro 2 | 3 | This repository contains the files required to build an easy to use MP3 player for small children. 4 | This project is heavily inspired by [Hoerbert](https://en.hoerbert.com). 5 | 6 | ![PCB CAD](/assets/final.jpg) 7 | ![Inside](/assets/inner_front.jpg) 8 | ![Inside](/assets/inner_back.jpg) 9 | 10 | Main components required to build: 11 | 12 | * Arduino Uno 13 | * Adafruit Music Maker shield 14 | * Speaker 15 | * Button PCB (see below) 16 | * Volume Pot 17 | * On/Off switch 18 | * Battery holders 19 | * Hookup wire 20 | 21 | # Button PCB schematics 22 | 23 | I created a custom PCB for the input buttons. The schematics for that are in the 24 | cad directory in KiCad format. The Arduino UNO does not have enough GPIO pins 25 | for the Music Maker shield, the volume pot, and 12 buttons. To reduce the amount 26 | of GPIO pins required for the buttons I used 2 shift registers. That reduces the 27 | amount of required pins for the buttons to 3. 28 | 29 | I used the following components: 30 | 31 | * [2x CD4021BC shift registers](http://www.redrok.com/CMOS_CD4021BC_8-StageStaticShiftRegister_Fairchild.pdf) 32 | * [OmronB3F Buttons](https://www.amazon.ca/gp/product/B07CW1XJTS) 33 | * as well as some 0805 1k resistors 34 | 35 | ![PCB CAD](/assets/pcb_cad.jpg) 36 | ![PCB Pinout](/assets/pinout.png) 37 | ![PCB etched](/assets/pcb_etched.jpg) 38 | ![PCB populated](/assets/pcb_populated.jpg) 39 | 40 | If you want to etch the PCB yourself you can print this PDF on a transparency. 41 | Make sure to use US letter sized transparencies if you use the PDF below. 42 | Alternatively you can just create a new PDF from the KiCad layout. 43 | 44 | [PCB transparency](/assets/pcb_cad.pdf) 45 | 46 | I followed this [PCB etching process](https://www.youtube.com/watch?v=tWnfnt2rNO0) 47 | 48 | # Button layout 49 | 50 | ## Regular mode 51 | 52 | [album 1] [album 2] [album 3] 53 | [album 4] [album 5] [album 6] 54 | [album 7] [album 8] [album 9] 55 | [prev] [play_pause] [next] 56 | 57 | ## God mode 58 | 59 | [1] [2] [3] 60 | [4] [5] [6] 61 | [7] [8] [9] 62 | [0] [play_pause] [next] 63 | 64 | # God mode 65 | 66 | The player supports 2 different modes. Regular mode and god mode. 67 | In regular mode one album is assigned to each button. This is the default mode 68 | and what the device is mainly intended for. 69 | To add more functionality, god mode has been added. This mode allows to add an 70 | alternative set of albums which makes it a handy MP3 player for parents as well. 71 | In that mode instead of directly playing an album for each button press, the 72 | buttons act as numerical input buttons. 2 buttons have to be pressed to select 73 | an album. I.e. 4 - 2 to select album 42. Up to 99 albums are supported in 74 | god mode. 75 | 76 | To enter god mode the god mode sequence has to be pressed. The god mode sequence 77 | is: prev - play_pause - play_ pause - next (regular mode keyboard layout). The 78 | same sequence can be used to switch back to regular mode. When the sequence has 79 | been entered correctly a short beep will sound. 80 | 81 | # SD card 82 | 83 | ## Structure 84 | 85 | The SD card needs to be formated with FAT32. 86 | 87 | The root folder structure needs to be: 88 | 89 | k01 ... k09 for the regular albums and 90 | 91 | g01 ... g99 for the god mode albums 92 | 93 | The files in each folder need to be named: 94 | 95 | 01.mp3 ... 99.mp3 96 | 97 | i.e. 98 | 99 | /k06/01.mp3 100 | /k06/02.mp3 101 | /k06/03.mp3 102 | /k06/04.mp3 103 | /k06/05.mp3 104 | /k06/06.mp3 105 | 106 | ## Convert files to supported file format 107 | 108 | a=`find ./ -type f -name "*.mp3" | awk '{print "mv", "\""$0"\"", substr($0, 3, 2)".mp3;"}'`; eval $a 109 | 110 | This only works if the files are named with the first 2 digits indicating their 111 | track name already. I.e. `01-meshuggah-bleed.mp3`. A great alternative for batch 112 | renaming the files is [Mp3Tag](https://www.mp3tag.de/en). 113 | 114 | # Auto resume 115 | 116 | The player will automatically resume the last played track after power off (if 117 | powered off before an album finished playing). 118 | 119 | # Power saving 120 | 121 | To remind the user to turn of the device once the album has finished playing the 122 | player will sound a short beep every 5 minutes once the last album has played. 123 | 124 | # Mono mode 125 | 126 | To keep the player compact and reduce power consumption this has been designed 127 | to work with a single speaker. The Music Maker shield is configured to work in 128 | mono mode. You can connect your speaker to either of the 2 speaker ports. In 129 | case you want to build a stereo version you can simply remove these lines from 130 | player.cpp 131 | 132 | // Enable mono mode 133 | vs1053.sciWrite(VS1053_REG_WRAMADDR, 0x1e09); 134 | vs1053.sciWrite(VS1053_REG_WRAM, 0x0001); 135 | 136 | # Case build 137 | 138 | I added an album of the full build on [Imgur](https://imgur.com/gallery/S2kZkn8) 139 | -------------------------------------------------------------------------------- /arduino-stoerbert.ino: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include "pins.h" 4 | #include "debug.h" 5 | #include "commands.h" 6 | #include "sr.h" 7 | #include "player.h" 8 | #include "power.h" 9 | 10 | extern sr sr1; 11 | extern sr sr2; 12 | extern srAssignments sra; 13 | 14 | // ################################## 15 | // Setup 16 | // ################################## 17 | void setup() { 18 | #ifdef DEBUG 19 | Serial.begin(9600); 20 | #endif 21 | 22 | setupPower(); 23 | setupPlayer(); 24 | setupSr(); 25 | } 26 | 27 | // ################################## 28 | // Main loop 29 | // ################################## 30 | 31 | void loop() { 32 | watchdogReset(); 33 | 34 | #ifdef DEBUG 35 | if (Serial.available()) { 36 | char c = Serial.read(); 37 | handleCommand(c); 38 | } 39 | #endif 40 | 41 | handlePlayer(); 42 | handleButtons(); 43 | } 44 | 45 | // ################################## 46 | // Button handling 47 | // ################################## 48 | void handleButtons() { 49 | // Handle button shift registers 50 | sr1.state = srShiftIn(true); 51 | sr2.state = srShiftIn(false); 52 | 53 | if (debounce(&sr1)) { 54 | if (sr1.state & sra.button2) { handleCommand(COMMAND2); } 55 | if (sr1.state & sra.button3) { handleCommand(COMMAND3); } 56 | if (sr1.state & sra.button5) { handleCommand(COMMAND5); } 57 | if (sr1.state & sra.button6) { handleCommand(COMMAND6); } 58 | if (sr1.state & sra.button9) { handleCommand(COMMAND9); } 59 | if (sr1.state & sra.buttonNext) { handleCommand(COMMAND_NEXT); } 60 | } 61 | 62 | if (debounce(&sr2)) { 63 | if (sr2.state & sra.button1) { handleCommand(COMMAND1); } 64 | if (sr2.state & sra.button4) { handleCommand(COMMAND4); } 65 | if (sr2.state & sra.button7) { handleCommand(COMMAND7); } 66 | if (sr2.state & sra.button8) { handleCommand(COMMAND8); } 67 | if (sr2.state & sra.buttonPlayPause) { handleCommand(COMMAND_PLAY_PAUSE); } 68 | if (sr2.state & sra.buttonPrevious) { handleCommand(COMMAND_PREVIOUS); } 69 | } 70 | } 71 | 72 | // ################################## 73 | // Commands 74 | // ################################## 75 | void handleCommand(char c) { 76 | switch (c) { 77 | // Start playing 78 | case COMMAND1: 79 | case COMMAND2: 80 | case COMMAND3: 81 | case COMMAND4: 82 | case COMMAND5: 83 | case COMMAND6: 84 | case COMMAND7: 85 | case COMMAND8: 86 | case COMMAND9: 87 | DPRINTF("Received Command: PLAY "); 88 | DPRINTLN(c); 89 | if (setAlbum(c)) { 90 | playAlbum(); 91 | } 92 | break; 93 | 94 | // GOD mode !!! 95 | case COMMAND_GOD_MODE: 96 | DPRINTLNF("Received Command: God Mode"); 97 | toggleGodMode(); 98 | break; 99 | 100 | // Toggle play/pause 101 | case COMMAND_PLAY_PAUSE: 102 | detectGodMode(c); 103 | 104 | DPRINTLNF("Received Command: TOGGLE PLAY/PAUSE"); 105 | togglePlayPause(); 106 | break; 107 | 108 | // Next track 109 | case COMMAND_NEXT: 110 | if (detectGodMode(c)) { 111 | break; 112 | } 113 | 114 | DPRINTLNF("Received Command: NEXT TRACK"); 115 | playNextTrack(); 116 | break; 117 | 118 | // Previous track / COMMAND0 in god mode 119 | case COMMAND_PREVIOUS: 120 | detectGodMode(c); 121 | 122 | if (isGodMode()) { 123 | setAlbum(COMMAND0); 124 | break; 125 | } 126 | 127 | DPRINTLNF("Received Command: PREVIOUS TRACK"); 128 | playPreviousTrack(); 129 | break; 130 | 131 | // Increase volume 132 | case COMMAND_INCREASE_VOLUME: 133 | DPRINTLNF("Received Command: VOLUME +"); 134 | increaseVolume(); 135 | break; 136 | 137 | // Decrease volume 138 | case COMMAND_DECREASE_VOLUME: 139 | DPRINTLNF("Received Command: VOLUME -"); 140 | decreaseVolume(); 141 | break; 142 | 143 | // Ignore newlines 144 | case '\n': 145 | break; 146 | 147 | // Log invalid commands 148 | default: 149 | DPRINTF("Invalid command: "); 150 | DPRINTLN(c); 151 | break; 152 | } 153 | } 154 | -------------------------------------------------------------------------------- /assets/final.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MichaelThessel/arduino-stoerbert/8887e05db1dfca9f5cc15f7338e26f2eef499aae/assets/final.jpg -------------------------------------------------------------------------------- /assets/inner_back.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MichaelThessel/arduino-stoerbert/8887e05db1dfca9f5cc15f7338e26f2eef499aae/assets/inner_back.jpg -------------------------------------------------------------------------------- /assets/inner_front.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MichaelThessel/arduino-stoerbert/8887e05db1dfca9f5cc15f7338e26f2eef499aae/assets/inner_front.jpg -------------------------------------------------------------------------------- /assets/pcb_cad.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MichaelThessel/arduino-stoerbert/8887e05db1dfca9f5cc15f7338e26f2eef499aae/assets/pcb_cad.jpg -------------------------------------------------------------------------------- /assets/pcb_cad.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MichaelThessel/arduino-stoerbert/8887e05db1dfca9f5cc15f7338e26f2eef499aae/assets/pcb_cad.pdf -------------------------------------------------------------------------------- /assets/pcb_etched.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MichaelThessel/arduino-stoerbert/8887e05db1dfca9f5cc15f7338e26f2eef499aae/assets/pcb_etched.jpg -------------------------------------------------------------------------------- /assets/pcb_populated.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MichaelThessel/arduino-stoerbert/8887e05db1dfca9f5cc15f7338e26f2eef499aae/assets/pcb_populated.jpg -------------------------------------------------------------------------------- /assets/pinout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MichaelThessel/arduino-stoerbert/8887e05db1dfca9f5cc15f7338e26f2eef499aae/assets/pinout.png -------------------------------------------------------------------------------- /cad/cad.pretty/DIP-16_W7.62mm_large.kicad_mod: -------------------------------------------------------------------------------- 1 | (module DIP-16_W7.62mm_large (layer F.Cu) (tedit 5DF3198D) 2 | (descr "16-lead though-hole mounted DIP package, row spacing 7.62 mm (300 mils)") 3 | (tags "THT DIP DIL PDIP 2.54mm 7.62mm 300mil") 4 | (fp_text reference U1 (at 3.81 -2.33) (layer F.SilkS) 5 | (effects (font (size 1 1) (thickness 0.15))) 6 | ) 7 | (fp_text value 4021 (at 3.81 20.11) (layer F.Fab) 8 | (effects (font (size 1 1) (thickness 0.15))) 9 | ) 10 | (fp_arc (start 3.81 -1.33) (end 2.81 -1.33) (angle -180) (layer F.SilkS) (width 0.12)) 11 | (fp_line (start 1.635 -1.27) (end 6.985 -1.27) (layer F.Fab) (width 0.1)) 12 | (fp_line (start 6.985 -1.27) (end 6.985 19.05) (layer F.Fab) (width 0.1)) 13 | (fp_line (start 6.985 19.05) (end 0.635 19.05) (layer F.Fab) (width 0.1)) 14 | (fp_line (start 0.635 19.05) (end 0.635 -0.27) (layer F.Fab) (width 0.1)) 15 | (fp_line (start 0.635 -0.27) (end 1.635 -1.27) (layer F.Fab) (width 0.1)) 16 | (fp_line (start 2.81 -1.33) (end 1.16 -1.33) (layer F.SilkS) (width 0.12)) 17 | (fp_line (start 1.16 -1.33) (end 1.16 19.11) (layer F.SilkS) (width 0.12)) 18 | (fp_line (start 1.16 19.11) (end 6.46 19.11) (layer F.SilkS) (width 0.12)) 19 | (fp_line (start 6.46 19.11) (end 6.46 -1.33) (layer F.SilkS) (width 0.12)) 20 | (fp_line (start 6.46 -1.33) (end 4.81 -1.33) (layer F.SilkS) (width 0.12)) 21 | (fp_line (start -1.1 -1.55) (end -1.1 19.3) (layer F.CrtYd) (width 0.05)) 22 | (fp_line (start -1.1 19.3) (end 8.7 19.3) (layer F.CrtYd) (width 0.05)) 23 | (fp_line (start 8.7 19.3) (end 8.7 -1.55) (layer F.CrtYd) (width 0.05)) 24 | (fp_line (start 8.7 -1.55) (end -1.1 -1.55) (layer F.CrtYd) (width 0.05)) 25 | (fp_text user %R (at 3.81 8.89) (layer F.Fab) 26 | (effects (font (size 1 1) (thickness 0.15))) 27 | ) 28 | (pad 1 thru_hole rect (at 0 0) (size 3 2.2) (drill 0.8) (layers *.Cu *.Mask)) 29 | (pad 9 thru_hole oval (at 7.62 17.78) (size 3 2.2) (drill 0.8) (layers *.Cu *.Mask)) 30 | (pad 2 thru_hole oval (at 0 2.54) (size 3 2.2) (drill 0.8) (layers *.Cu *.Mask)) 31 | (pad 10 thru_hole oval (at 7.62 15.24) (size 3 2.2) (drill 0.8) (layers *.Cu *.Mask)) 32 | (pad 3 thru_hole oval (at 0 5.08) (size 3 2.2) (drill 0.8) (layers *.Cu *.Mask)) 33 | (pad 11 thru_hole oval (at 7.62 12.7) (size 3 2.2) (drill 0.8) (layers *.Cu *.Mask)) 34 | (pad 4 thru_hole oval (at 0 7.62) (size 3 2.2) (drill 0.8) (layers *.Cu *.Mask)) 35 | (pad 12 thru_hole oval (at 7.62 10.16) (size 3 2.2) (drill 0.8) (layers *.Cu *.Mask)) 36 | (pad 5 thru_hole oval (at 0 10.16) (size 3 2.2) (drill 0.8) (layers *.Cu *.Mask)) 37 | (pad 13 thru_hole oval (at 7.62 7.62) (size 3 2.2) (drill 0.8) (layers *.Cu *.Mask)) 38 | (pad 6 thru_hole oval (at 0 12.7) (size 3 2.2) (drill 0.8) (layers *.Cu *.Mask)) 39 | (pad 14 thru_hole oval (at 7.62 5.08) (size 3 2.2) (drill 0.8) (layers *.Cu *.Mask)) 40 | (pad 7 thru_hole oval (at 0 15.24) (size 3 2.2) (drill 0.8) (layers *.Cu *.Mask)) 41 | (pad 15 thru_hole oval (at 7.62 2.54) (size 3 2.2) (drill 0.8) (layers *.Cu *.Mask)) 42 | (pad 8 thru_hole oval (at 0 17.78) (size 3 2.2) (drill 0.8) (layers *.Cu *.Mask)) 43 | (pad 16 thru_hole oval (at 7.62 0) (size 3 2.2) (drill 0.8) (layers *.Cu *.Mask)) 44 | (model ${KISYS3DMOD}/Package_DIP.3dshapes/DIP-16_W7.62mm.wrl 45 | (at (xyz 0 0 0)) 46 | (scale (xyz 1 1 1)) 47 | (rotate (xyz 0 0 0)) 48 | ) 49 | ) 50 | -------------------------------------------------------------------------------- /cad/cad.pretty/PinHeader_1x03_P2.00mm_Vertical_large.kicad_mod: -------------------------------------------------------------------------------- 1 | (module Connector_PinHeader_2.00mm:PinHeader_1x03_P2.00mm_Vertical (layer F.Cu) (tedit 5DF332A6) 2 | (descr "Through hole straight pin header, 1x03, 2.00mm pitch, single row") 3 | (tags "Through hole pin header THT 1x03 2.00mm single row") 4 | (fp_text reference J_POT1 (at 0 -4) (layer F.SilkS) 5 | (effects (font (size 1 1) (thickness 0.15))) 6 | ) 7 | (fp_text value Conn_01x03_Female (at 0 8) (layer F.Fab) 8 | (effects (font (size 1 1) (thickness 0.15))) 9 | ) 10 | (fp_line (start -0.5 -1) (end 1 -1) (layer F.Fab) (width 0.1)) 11 | (fp_line (start 1 -1) (end 1 5) (layer F.Fab) (width 0.1)) 12 | (fp_line (start 1 5) (end -1 5) (layer F.Fab) (width 0.1)) 13 | (fp_line (start -1 5) (end -1 -0.5) (layer F.Fab) (width 0.1)) 14 | (fp_line (start -1 -0.5) (end -0.5 -1) (layer F.Fab) (width 0.1)) 15 | (fp_line (start -1.06 5.06) (end 1.06 5.06) (layer F.SilkS) (width 0.12)) 16 | (fp_line (start -1.06 1) (end -1.06 5.06) (layer F.SilkS) (width 0.12)) 17 | (fp_line (start 1.06 1) (end 1.06 5.06) (layer F.SilkS) (width 0.12)) 18 | (fp_line (start -1.06 1) (end 1.06 1) (layer F.SilkS) (width 0.12)) 19 | (fp_line (start -1.06 0) (end -1.06 -1.06) (layer F.SilkS) (width 0.12)) 20 | (fp_line (start -1.06 -1.06) (end 0 -1.06) (layer F.SilkS) (width 0.12)) 21 | (fp_line (start -1.5 -1.5) (end -1.5 5.5) (layer F.CrtYd) (width 0.05)) 22 | (fp_line (start -1.5 5.5) (end 1.5 5.5) (layer F.CrtYd) (width 0.05)) 23 | (fp_line (start 1.5 5.5) (end 1.5 -1.5) (layer F.CrtYd) (width 0.05)) 24 | (fp_line (start 1.5 -1.5) (end -1.5 -1.5) (layer F.CrtYd) (width 0.05)) 25 | (fp_text user %R (at 0 2 90) (layer F.Fab) 26 | (effects (font (size 1 1) (thickness 0.15))) 27 | ) 28 | (pad 1 thru_hole rect (at 0 -1) (size 3 3) (drill 0.5) (layers *.Cu *.Mask)) 29 | (pad 2 thru_hole oval (at 0 3) (size 3 2) (drill 0.5) (layers *.Cu *.Mask)) 30 | (pad 3 thru_hole oval (at 0 6) (size 3 2) (drill 0.5) (layers *.Cu *.Mask)) 31 | (model ${KISYS3DMOD}/Connector_PinHeader_2.00mm.3dshapes/PinHeader_1x03_P2.00mm_Vertical.wrl 32 | (at (xyz 0 0 0)) 33 | (scale (xyz 1 1 1)) 34 | (rotate (xyz 0 0 0)) 35 | ) 36 | ) 37 | -------------------------------------------------------------------------------- /cad/cad.pretty/PinHeader_1x06_P2.00mm_Vertical_large.kicad_mod: -------------------------------------------------------------------------------- 1 | (module Connector_PinHeader_2.00mm:PinHeader_1x06_P2.00mm_Vertical (layer F.Cu) (tedit 59FED667) 2 | (descr "Through hole straight pin header, 1x06, 2.00mm pitch, single row") 3 | (tags "Through hole pin header THT 1x06 2.00mm single row") 4 | (fp_text reference J_DATA1 (at 0 -2.06) (layer F.SilkS) 5 | (effects (font (size 1 1) (thickness 0.15))) 6 | ) 7 | (fp_text value Conn_01x06_Female (at 0 12.06) (layer F.Fab) 8 | (effects (font (size 1 1) (thickness 0.15))) 9 | ) 10 | (fp_line (start -0.5 -1) (end 1 -1) (layer F.Fab) (width 0.1)) 11 | (fp_line (start 1 -1) (end 1 11) (layer F.Fab) (width 0.1)) 12 | (fp_line (start 1 11) (end -1 11) (layer F.Fab) (width 0.1)) 13 | (fp_line (start -1 11) (end -1 -0.5) (layer F.Fab) (width 0.1)) 14 | (fp_line (start -1 -0.5) (end -0.5 -1) (layer F.Fab) (width 0.1)) 15 | (fp_line (start -1.06 11.06) (end 1.06 11.06) (layer F.SilkS) (width 0.12)) 16 | (fp_line (start -1.06 1) (end -1.06 11.06) (layer F.SilkS) (width 0.12)) 17 | (fp_line (start 1.06 1) (end 1.06 11.06) (layer F.SilkS) (width 0.12)) 18 | (fp_line (start -1.06 1) (end 1.06 1) (layer F.SilkS) (width 0.12)) 19 | (fp_line (start -1.06 0) (end -1.06 -1.06) (layer F.SilkS) (width 0.12)) 20 | (fp_line (start -1.06 -1.06) (end 0 -1.06) (layer F.SilkS) (width 0.12)) 21 | (fp_line (start -1.5 -1.5) (end -1.5 11.5) (layer F.CrtYd) (width 0.05)) 22 | (fp_line (start -1.5 11.5) (end 1.5 11.5) (layer F.CrtYd) (width 0.05)) 23 | (fp_line (start 1.5 11.5) (end 1.5 -1.5) (layer F.CrtYd) (width 0.05)) 24 | (fp_line (start 1.5 -1.5) (end -1.5 -1.5) (layer F.CrtYd) (width 0.05)) 25 | (fp_text user %R (at 0 5 90) (layer F.Fab) 26 | (effects (font (size 1 1) (thickness 0.15))) 27 | ) 28 | (pad 1 thru_hole rect (at 0 0) (size 1.35 1.35) (drill 0.8) (layers *.Cu *.Mask)) 29 | (pad 2 thru_hole oval (at 0 2) (size 1.35 1.35) (drill 0.8) (layers *.Cu *.Mask)) 30 | (pad 3 thru_hole oval (at 0 4) (size 1.35 1.35) (drill 0.8) (layers *.Cu *.Mask)) 31 | (pad 4 thru_hole oval (at 0 6) (size 1.35 1.35) (drill 0.8) (layers *.Cu *.Mask)) 32 | (pad 5 thru_hole oval (at 0 8) (size 1.35 1.35) (drill 0.8) (layers *.Cu *.Mask)) 33 | (pad 6 thru_hole oval (at 0 10) (size 1.35 1.35) (drill 0.8) (layers *.Cu *.Mask)) 34 | (model ${KISYS3DMOD}/Connector_PinHeader_2.00mm.3dshapes/PinHeader_1x06_P2.00mm_Vertical.wrl 35 | (at (xyz 0 0 0)) 36 | (scale (xyz 1 1 1)) 37 | (rotate (xyz 0 0 0)) 38 | ) 39 | ) 40 | -------------------------------------------------------------------------------- /cad/cad.pretty/ToggleSwitch.kicad_mod: -------------------------------------------------------------------------------- 1 | (module ToggleSwitch (layer F.Cu) (tedit 5DF31403) 2 | (fp_text reference U** (at 12.573 -12.954) (layer F.SilkS) 3 | (effects (font (size 1 1) (thickness 0.15))) 4 | ) 5 | (fp_text value OmronB3F (at 2.54 -6.858) (layer F.Fab) 6 | (effects (font (size 1 1) (thickness 0.15))) 7 | ) 8 | (fp_line (start -4.5 -11.5) (end 9 -11.5) (layer F.SilkS) (width 0.12)) 9 | (fp_line (start 9 -11.5) (end 9 -1.5) (layer F.SilkS) (width 0.12)) 10 | (fp_line (start 9 -1.5) (end -4.5 -1.5) (layer F.SilkS) (width 0.12)) 11 | (fp_line (start -4.5 -1.5) (end -4.5 -11.5) (layer F.SilkS) (width 0.12)) 12 | (pad 1 thru_hole circle (at 0 0) (size 4 4) (drill 0.5) (layers *.Cu *.Mask)) 13 | (pad 2 thru_hole circle (at 5 0) (size 4 4) (drill 0.5) (layers *.Cu *.Mask)) 14 | (pad 3 thru_hole circle (at 5 -13) (size 4 4) (drill 0.5) (layers *.Cu *.Mask)) 15 | (pad 4 thru_hole circle (at 0 -13) (size 4 4) (drill 0.5) (layers *.Cu *.Mask)) 16 | ) 17 | -------------------------------------------------------------------------------- /cad/fp-lib-table: -------------------------------------------------------------------------------- 1 | (fp_lib_table 2 | (lib (name cad)(type KiCad)(uri ${KIPRJMOD}/cad.pretty)(options "")(descr "")) 3 | ) 4 | -------------------------------------------------------------------------------- /cad/stoerbert-cache.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.4 2 | #encoding utf-8 3 | # 4 | # 4xxx_4021 5 | # 6 | DEF 4xxx_4021 U 0 20 Y Y 1 F N 7 | F0 "U" -200 750 50 H V C CNN 8 | F1 "4xxx_4021" 150 750 50 H V C CNN 9 | F2 "" 0 150 50 H I C CNN 10 | F3 "" 0 150 50 H I C CNN 11 | $FPLIST 12 | DIP*W7.62mm* 13 | SOIC*3.9x9.9mm*P1.27mm* 14 | TSSOP*4.4x5mm*P0.65mm* 15 | SOIC*5.3x10.2mm*P1.27mm* 16 | $ENDFPLIST 17 | DRAW 18 | S -300 700 300 -700 0 1 10 f 19 | X D7 1 -400 -600 100 R 50 50 1 1 I 20 | X CP 10 -400 600 100 R 50 50 1 1 I 21 | X DS 11 -400 300 100 R 50 50 1 1 I 22 | X Q6 12 400 500 100 L 50 50 1 1 O 23 | X D4 13 -400 -300 100 R 50 50 1 1 I 24 | X D5 14 -400 -400 100 R 50 50 1 1 I 25 | X D6 15 -400 -500 100 R 50 50 1 1 I 26 | X VDD 16 0 800 100 D 50 50 1 1 W 27 | X Q5 2 400 600 100 L 50 50 1 1 O 28 | X Q7 3 400 400 100 L 50 50 1 1 O 29 | X D3 4 -400 -200 100 R 50 50 1 1 I 30 | X D2 5 -400 -100 100 R 50 50 1 1 I 31 | X D1 6 -400 0 100 R 50 50 1 1 I 32 | X D0 7 -400 100 100 R 50 50 1 1 I 33 | X VSS 8 0 -800 100 U 50 50 1 1 W 34 | X PL 9 -400 400 100 R 50 50 1 1 I 35 | ENDDRAW 36 | ENDDEF 37 | # 38 | # Connector_Conn_01x03_Female 39 | # 40 | DEF Connector_Conn_01x03_Female J 0 40 Y N 1 F N 41 | F0 "J" 0 200 50 H V C CNN 42 | F1 "Connector_Conn_01x03_Female" 0 -200 50 H V C CNN 43 | F2 "" 0 0 50 H I C CNN 44 | F3 "" 0 0 50 H I C CNN 45 | $FPLIST 46 | Connector*:*_1x??_* 47 | $ENDFPLIST 48 | DRAW 49 | A 0 -100 20 901 -901 1 1 6 N 0 -80 0 -120 50 | A 0 0 20 901 -901 1 1 6 N 0 20 0 -20 51 | A 0 100 20 901 -901 1 1 6 N 0 120 0 80 52 | P 2 1 1 6 -50 -100 -20 -100 N 53 | P 2 1 1 6 -50 0 -20 0 N 54 | P 2 1 1 6 -50 100 -20 100 N 55 | X Pin_1 1 -200 100 150 R 50 50 1 1 P 56 | X Pin_2 2 -200 0 150 R 50 50 1 1 P 57 | X Pin_3 3 -200 -100 150 R 50 50 1 1 P 58 | ENDDRAW 59 | ENDDEF 60 | # 61 | # Connector_Conn_01x06_Female 62 | # 63 | DEF Connector_Conn_01x06_Female J 0 40 Y N 1 F N 64 | F0 "J" 0 300 50 H V C CNN 65 | F1 "Connector_Conn_01x06_Female" 0 -400 50 H V C CNN 66 | F2 "" 0 0 50 H I C CNN 67 | F3 "" 0 0 50 H I C CNN 68 | $FPLIST 69 | Connector*:*_1x??_* 70 | $ENDFPLIST 71 | DRAW 72 | A 0 -300 20 901 -901 1 1 6 N 0 -280 0 -320 73 | A 0 -200 20 901 -901 1 1 6 N 0 -180 0 -220 74 | A 0 -100 20 901 -901 1 1 6 N 0 -80 0 -120 75 | A 0 0 20 901 -901 1 1 6 N 0 20 0 -20 76 | A 0 100 20 901 -901 1 1 6 N 0 120 0 80 77 | A 0 200 20 901 -901 1 1 6 N 0 220 0 180 78 | P 2 1 1 6 -50 -300 -20 -300 N 79 | P 2 1 1 6 -50 -200 -20 -200 N 80 | P 2 1 1 6 -50 -100 -20 -100 N 81 | P 2 1 1 6 -50 0 -20 0 N 82 | P 2 1 1 6 -50 100 -20 100 N 83 | P 2 1 1 6 -50 200 -20 200 N 84 | X Pin_1 1 -200 200 150 R 50 50 1 1 P 85 | X Pin_2 2 -200 100 150 R 50 50 1 1 P 86 | X Pin_3 3 -200 0 150 R 50 50 1 1 P 87 | X Pin_4 4 -200 -100 150 R 50 50 1 1 P 88 | X Pin_5 5 -200 -200 150 R 50 50 1 1 P 89 | X Pin_6 6 -200 -300 150 R 50 50 1 1 P 90 | ENDDRAW 91 | ENDDEF 92 | # 93 | # Device_R 94 | # 95 | DEF Device_R R 0 0 N Y 1 F N 96 | F0 "R" 80 0 50 V V C CNN 97 | F1 "Device_R" 0 0 50 V V C CNN 98 | F2 "" -70 0 50 V I C CNN 99 | F3 "" 0 0 50 H I C CNN 100 | $FPLIST 101 | R_* 102 | $ENDFPLIST 103 | DRAW 104 | S -40 -100 40 100 0 1 10 N 105 | X ~ 1 0 150 50 D 50 50 1 1 P 106 | X ~ 2 0 -150 50 U 50 50 1 1 P 107 | ENDDRAW 108 | ENDDEF 109 | # 110 | # power_+5V 111 | # 112 | DEF power_+5V #PWR 0 0 Y Y 1 F P 113 | F0 "#PWR" 0 -150 50 H I C CNN 114 | F1 "power_+5V" 0 140 50 H V C CNN 115 | F2 "" 0 0 50 H I C CNN 116 | F3 "" 0 0 50 H I C CNN 117 | DRAW 118 | P 2 0 1 0 -30 50 0 100 N 119 | P 2 0 1 0 0 0 0 100 N 120 | P 2 0 1 0 0 100 30 50 N 121 | X +5V 1 0 0 0 U 50 50 1 1 W N 122 | ENDDRAW 123 | ENDDEF 124 | # 125 | # power_GND 126 | # 127 | DEF power_GND #PWR 0 0 Y Y 1 F P 128 | F0 "#PWR" 0 -250 50 H I C CNN 129 | F1 "power_GND" 0 -150 50 H V C CNN 130 | F2 "" 0 0 50 H I C CNN 131 | F3 "" 0 0 50 H I C CNN 132 | DRAW 133 | P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N 134 | X GND 1 0 0 0 D 50 50 1 1 W N 135 | ENDDRAW 136 | ENDDEF 137 | # 138 | # stoerbert_OmronB3F 139 | # 140 | DEF stoerbert_OmronB3F U 0 0 N N 1 F N 141 | F0 "U" 0 0 50 H V C CNN 142 | F1 "stoerbert_OmronB3F" 0 300 50 H V C CNN 143 | F2 "cad:ToggleSwitch" 0 0 50 H I C CNN 144 | F3 "" 0 0 50 H I C CNN 145 | DRAW 146 | S 50 50 300 50 0 1 0 N 147 | S 50 250 50 50 0 1 0 N 148 | S 50 250 300 250 0 1 0 N 149 | S 300 250 300 50 0 1 0 N 150 | X 1 1 0 200 100 R 50 50 1 1 P 151 | X 3 3 0 100 100 R 50 50 1 1 P 152 | ENDDRAW 153 | ENDDEF 154 | # 155 | #End Library 156 | -------------------------------------------------------------------------------- /cad/stoerbert.bck: -------------------------------------------------------------------------------- 1 | EESchema-DOCLIB Version 2.0 2 | # 3 | #End Doc Library 4 | -------------------------------------------------------------------------------- /cad/stoerbert.dcm: -------------------------------------------------------------------------------- 1 | EESchema-DOCLIB Version 2.0 2 | # 3 | #End Doc Library 4 | -------------------------------------------------------------------------------- /cad/stoerbert.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.4 2 | #encoding utf-8 3 | # 4 | # OmronB3F 5 | # 6 | DEF OmronB3F U 0 0 N N 1 F N 7 | F0 "U" 0 0 50 H V C CNN 8 | F1 "OmronB3F" 0 300 50 H V C CNN 9 | F2 "cad:ToggleSwitch" 0 0 50 H I C CNN 10 | F3 "" 0 0 50 H I C CNN 11 | DRAW 12 | S 50 50 300 50 0 1 0 N 13 | S 50 250 50 50 0 1 0 N 14 | S 50 250 300 250 0 1 0 N 15 | S 300 250 300 50 0 1 0 N 16 | X 1 1 0 200 100 R 50 50 1 1 P 17 | X 3 3 0 100 100 R 50 50 1 1 P 18 | ENDDRAW 19 | ENDDEF 20 | # 21 | #End Library 22 | -------------------------------------------------------------------------------- /cad/stoerbert.pro: -------------------------------------------------------------------------------- 1 | update=Thu 12 Dec 2019 09:41:06 PM PST 2 | version=1 3 | last_client=kicad 4 | [general] 5 | version=1 6 | RootSch= 7 | BoardNm= 8 | [cvpcb] 9 | version=1 10 | NetIExt=net 11 | [eeschema] 12 | version=1 13 | LibDir= 14 | [eeschema/libraries] 15 | [pcbnew] 16 | version=1 17 | PageLayoutDescrFile= 18 | LastNetListRead= 19 | CopperLayerCount=2 20 | BoardThickness=1.6 21 | AllowMicroVias=0 22 | AllowBlindVias=0 23 | RequireCourtyardDefinitions=0 24 | ProhibitOverlappingCourtyards=1 25 | MinTrackWidth=0.2 26 | MinViaDiameter=0.4 27 | MinViaDrill=0.3 28 | MinMicroViaDiameter=0.2 29 | MinMicroViaDrill=0.09999999999999999 30 | MinHoleToHole=0.25 31 | TrackWidth1=0.25 32 | TrackWidth2=0.5 33 | TrackWidth3=1 34 | ViaDiameter1=0.8 35 | ViaDrill1=0.4 36 | ViaDiameter2=2 37 | ViaDrill2=0.5 38 | ViaDiameter3=4 39 | ViaDrill3=0.5 40 | dPairWidth1=0.2 41 | dPairGap1=0.25 42 | dPairViaGap1=0.25 43 | SilkLineWidth=0.12 44 | SilkTextSizeV=1 45 | SilkTextSizeH=1 46 | SilkTextSizeThickness=0.15 47 | SilkTextItalic=0 48 | SilkTextUpright=1 49 | CopperLineWidth=0.2 50 | CopperTextSizeV=1.5 51 | CopperTextSizeH=1.5 52 | CopperTextThickness=0.3 53 | CopperTextItalic=0 54 | CopperTextUpright=1 55 | EdgeCutLineWidth=0.05 56 | CourtyardLineWidth=0.05 57 | OthersLineWidth=0.15 58 | OthersTextSizeV=1 59 | OthersTextSizeH=1 60 | OthersTextSizeThickness=0.15 61 | OthersTextItalic=0 62 | OthersTextUpright=1 63 | SolderMaskClearance=0.051 64 | SolderMaskMinWidth=0.25 65 | SolderPasteClearance=0 66 | SolderPasteRatio=-0 67 | [pcbnew/Layer.F.Cu] 68 | Name=F.Cu 69 | Type=0 70 | Enabled=1 71 | [pcbnew/Layer.In1.Cu] 72 | Name=In1.Cu 73 | Type=0 74 | Enabled=0 75 | [pcbnew/Layer.In2.Cu] 76 | Name=In2.Cu 77 | Type=0 78 | Enabled=0 79 | [pcbnew/Layer.In3.Cu] 80 | Name=In3.Cu 81 | Type=0 82 | Enabled=0 83 | [pcbnew/Layer.In4.Cu] 84 | Name=In4.Cu 85 | Type=0 86 | Enabled=0 87 | [pcbnew/Layer.In5.Cu] 88 | Name=In5.Cu 89 | Type=0 90 | Enabled=0 91 | [pcbnew/Layer.In6.Cu] 92 | Name=In6.Cu 93 | Type=0 94 | Enabled=0 95 | [pcbnew/Layer.In7.Cu] 96 | Name=In7.Cu 97 | Type=0 98 | Enabled=0 99 | [pcbnew/Layer.In8.Cu] 100 | Name=In8.Cu 101 | Type=0 102 | Enabled=0 103 | [pcbnew/Layer.In9.Cu] 104 | Name=In9.Cu 105 | Type=0 106 | Enabled=0 107 | [pcbnew/Layer.In10.Cu] 108 | Name=In10.Cu 109 | Type=0 110 | Enabled=0 111 | [pcbnew/Layer.In11.Cu] 112 | Name=In11.Cu 113 | Type=0 114 | Enabled=0 115 | [pcbnew/Layer.In12.Cu] 116 | Name=In12.Cu 117 | Type=0 118 | Enabled=0 119 | [pcbnew/Layer.In13.Cu] 120 | Name=In13.Cu 121 | Type=0 122 | Enabled=0 123 | [pcbnew/Layer.In14.Cu] 124 | Name=In14.Cu 125 | Type=0 126 | Enabled=0 127 | [pcbnew/Layer.In15.Cu] 128 | Name=In15.Cu 129 | Type=0 130 | Enabled=0 131 | [pcbnew/Layer.In16.Cu] 132 | Name=In16.Cu 133 | Type=0 134 | Enabled=0 135 | [pcbnew/Layer.In17.Cu] 136 | Name=In17.Cu 137 | Type=0 138 | Enabled=0 139 | [pcbnew/Layer.In18.Cu] 140 | Name=In18.Cu 141 | Type=0 142 | Enabled=0 143 | [pcbnew/Layer.In19.Cu] 144 | Name=In19.Cu 145 | Type=0 146 | Enabled=0 147 | [pcbnew/Layer.In20.Cu] 148 | Name=In20.Cu 149 | Type=0 150 | Enabled=0 151 | [pcbnew/Layer.In21.Cu] 152 | Name=In21.Cu 153 | Type=0 154 | Enabled=0 155 | [pcbnew/Layer.In22.Cu] 156 | Name=In22.Cu 157 | Type=0 158 | Enabled=0 159 | [pcbnew/Layer.In23.Cu] 160 | Name=In23.Cu 161 | Type=0 162 | Enabled=0 163 | [pcbnew/Layer.In24.Cu] 164 | Name=In24.Cu 165 | Type=0 166 | Enabled=0 167 | [pcbnew/Layer.In25.Cu] 168 | Name=In25.Cu 169 | Type=0 170 | Enabled=0 171 | [pcbnew/Layer.In26.Cu] 172 | Name=In26.Cu 173 | Type=0 174 | Enabled=0 175 | [pcbnew/Layer.In27.Cu] 176 | Name=In27.Cu 177 | Type=0 178 | Enabled=0 179 | [pcbnew/Layer.In28.Cu] 180 | Name=In28.Cu 181 | Type=0 182 | Enabled=0 183 | [pcbnew/Layer.In29.Cu] 184 | Name=In29.Cu 185 | Type=0 186 | Enabled=0 187 | [pcbnew/Layer.In30.Cu] 188 | Name=In30.Cu 189 | Type=0 190 | Enabled=0 191 | [pcbnew/Layer.B.Cu] 192 | Name=B.Cu 193 | Type=0 194 | Enabled=1 195 | [pcbnew/Layer.B.Adhes] 196 | Enabled=1 197 | [pcbnew/Layer.F.Adhes] 198 | Enabled=1 199 | [pcbnew/Layer.B.Paste] 200 | Enabled=1 201 | [pcbnew/Layer.F.Paste] 202 | Enabled=1 203 | [pcbnew/Layer.B.SilkS] 204 | Enabled=1 205 | [pcbnew/Layer.F.SilkS] 206 | Enabled=1 207 | [pcbnew/Layer.B.Mask] 208 | Enabled=1 209 | [pcbnew/Layer.F.Mask] 210 | Enabled=1 211 | [pcbnew/Layer.Dwgs.User] 212 | Enabled=1 213 | [pcbnew/Layer.Cmts.User] 214 | Enabled=1 215 | [pcbnew/Layer.Eco1.User] 216 | Enabled=1 217 | [pcbnew/Layer.Eco2.User] 218 | Enabled=1 219 | [pcbnew/Layer.Edge.Cuts] 220 | Enabled=1 221 | [pcbnew/Layer.Margin] 222 | Enabled=1 223 | [pcbnew/Layer.B.CrtYd] 224 | Enabled=1 225 | [pcbnew/Layer.F.CrtYd] 226 | Enabled=1 227 | [pcbnew/Layer.B.Fab] 228 | Enabled=1 229 | [pcbnew/Layer.F.Fab] 230 | Enabled=1 231 | [pcbnew/Layer.Rescue] 232 | Enabled=0 233 | [pcbnew/Netclasses] 234 | [pcbnew/Netclasses/Default] 235 | Name=Default 236 | Clearance=0.2 237 | TrackWidth=0.25 238 | ViaDiameter=0.8 239 | ViaDrill=0.4 240 | uViaDiameter=0.3 241 | uViaDrill=0.1 242 | dPairWidth=0.2 243 | dPairGap=0.25 244 | dPairViaGap=0.25 245 | -------------------------------------------------------------------------------- /cad/stoerbert.sch: -------------------------------------------------------------------------------- 1 | EESchema Schematic File Version 4 2 | EELAYER 30 0 3 | EELAYER END 4 | $Descr A4 11693 8268 5 | encoding utf-8 6 | Sheet 1 1 7 | Title "" 8 | Date "" 9 | Rev "" 10 | Comp "" 11 | Comment1 "" 12 | Comment2 "" 13 | Comment3 "" 14 | Comment4 "" 15 | $EndDescr 16 | $Comp 17 | L stoerbert:OmronB3F SW1 18 | U 1 1 5DE7A9D8 19 | P 1250 1350 20 | F 0 "SW1" H 1578 1546 50 0000 L CNN 21 | F 1 "OmronB3F" H 1578 1455 50 0000 L CNN 22 | F 2 "cad:ToggleSwitch" H 1250 1350 50 0001 C CNN 23 | F 3 "" H 1250 1350 50 0001 C CNN 24 | 1 1250 1350 25 | 1 0 0 -1 26 | $EndComp 27 | $Comp 28 | L stoerbert:OmronB3F SW2 29 | U 1 1 5DE7ADB7 30 | P 2800 1350 31 | F 0 "SW2" H 3128 1546 50 0000 L CNN 32 | F 1 "OmronB3F" H 3128 1455 50 0000 L CNN 33 | F 2 "cad:ToggleSwitch" H 2800 1350 50 0001 C CNN 34 | F 3 "" H 2800 1350 50 0001 C CNN 35 | 1 2800 1350 36 | 1 0 0 -1 37 | $EndComp 38 | $Comp 39 | L stoerbert:OmronB3F SW3 40 | U 1 1 5DE7B778 41 | P 4200 1350 42 | F 0 "SW3" H 4528 1546 50 0000 L CNN 43 | F 1 "OmronB3F" H 4528 1455 50 0000 L CNN 44 | F 2 "cad:ToggleSwitch" H 4200 1350 50 0001 C CNN 45 | F 3 "" H 4200 1350 50 0001 C CNN 46 | 1 4200 1350 47 | 1 0 0 -1 48 | $EndComp 49 | $Comp 50 | L stoerbert:OmronB3F SW4 51 | U 1 1 5DE7BBE2 52 | P 1250 1750 53 | F 0 "SW4" H 1578 1946 50 0000 L CNN 54 | F 1 "OmronB3F" H 1578 1855 50 0000 L CNN 55 | F 2 "cad:ToggleSwitch" H 1250 1750 50 0001 C CNN 56 | F 3 "" H 1250 1750 50 0001 C CNN 57 | 1 1250 1750 58 | 1 0 0 -1 59 | $EndComp 60 | $Comp 61 | L stoerbert:OmronB3F SW5 62 | U 1 1 5DE7C143 63 | P 2800 1750 64 | F 0 "SW5" H 3128 1946 50 0000 L CNN 65 | F 1 "OmronB3F" H 3128 1855 50 0000 L CNN 66 | F 2 "cad:ToggleSwitch" H 2800 1750 50 0001 C CNN 67 | F 3 "" H 2800 1750 50 0001 C CNN 68 | 1 2800 1750 69 | 1 0 0 -1 70 | $EndComp 71 | $Comp 72 | L stoerbert:OmronB3F SW6 73 | U 1 1 5DE7C4ED 74 | P 4200 1750 75 | F 0 "SW6" H 4528 1946 50 0000 L CNN 76 | F 1 "OmronB3F" H 4528 1855 50 0000 L CNN 77 | F 2 "cad:ToggleSwitch" H 4200 1750 50 0001 C CNN 78 | F 3 "" H 4200 1750 50 0001 C CNN 79 | 1 4200 1750 80 | 1 0 0 -1 81 | $EndComp 82 | $Comp 83 | L stoerbert:OmronB3F SW7 84 | U 1 1 5DE7C885 85 | P 1250 2150 86 | F 0 "SW7" H 1578 2346 50 0000 L CNN 87 | F 1 "OmronB3F" H 1578 2255 50 0000 L CNN 88 | F 2 "cad:ToggleSwitch" H 1250 2150 50 0001 C CNN 89 | F 3 "" H 1250 2150 50 0001 C CNN 90 | 1 1250 2150 91 | 1 0 0 -1 92 | $EndComp 93 | $Comp 94 | L stoerbert:OmronB3F SW8 95 | U 1 1 5DE7CCC0 96 | P 2800 2150 97 | F 0 "SW8" H 3128 2346 50 0000 L CNN 98 | F 1 "OmronB3F" H 3128 2255 50 0000 L CNN 99 | F 2 "cad:ToggleSwitch" H 2800 2150 50 0001 C CNN 100 | F 3 "" H 2800 2150 50 0001 C CNN 101 | 1 2800 2150 102 | 1 0 0 -1 103 | $EndComp 104 | $Comp 105 | L stoerbert:OmronB3F SW9 106 | U 1 1 5DE7D099 107 | P 4200 2150 108 | F 0 "SW9" H 4528 2346 50 0000 L CNN 109 | F 1 "OmronB3F" H 4528 2255 50 0000 L CNN 110 | F 2 "cad:ToggleSwitch" H 4200 2150 50 0001 C CNN 111 | F 3 "" H 4200 2150 50 0001 C CNN 112 | 1 4200 2150 113 | 1 0 0 -1 114 | $EndComp 115 | $Comp 116 | L stoerbert:OmronB3F SW_PREV1 117 | U 1 1 5DE7D6BD 118 | P 1250 2500 119 | F 0 "SW_PREV1" H 1578 2696 50 0000 L CNN 120 | F 1 "OmronB3F" H 1578 2605 50 0000 L CNN 121 | F 2 "cad:ToggleSwitch" H 1250 2500 50 0001 C CNN 122 | F 3 "" H 1250 2500 50 0001 C CNN 123 | 1 1250 2500 124 | 1 0 0 -1 125 | $EndComp 126 | $Comp 127 | L stoerbert:OmronB3F SW_PLAY1 128 | U 1 1 5DE7D9C2 129 | P 2800 2500 130 | F 0 "SW_PLAY1" H 3128 2696 50 0000 L CNN 131 | F 1 "OmronB3F" H 3128 2605 50 0000 L CNN 132 | F 2 "cad:ToggleSwitch" H 2800 2500 50 0001 C CNN 133 | F 3 "" H 2800 2500 50 0001 C CNN 134 | 1 2800 2500 135 | 1 0 0 -1 136 | $EndComp 137 | $Comp 138 | L stoerbert:OmronB3F SW_NEXT1 139 | U 1 1 5DE7DE6C 140 | P 4200 2500 141 | F 0 "SW_NEXT1" H 4528 2696 50 0000 L CNN 142 | F 1 "OmronB3F" H 4528 2605 50 0000 L CNN 143 | F 2 "cad:ToggleSwitch" H 4200 2500 50 0001 C CNN 144 | F 3 "" H 4200 2500 50 0001 C CNN 145 | 1 4200 2500 146 | 1 0 0 -1 147 | $EndComp 148 | $Comp 149 | L Device:R R14 150 | U 1 1 5DEC6AD6 151 | P 4950 5550 152 | F 0 "R14" V 5065 5550 50 0000 C CNN 153 | F 1 "R" H 5020 5505 50 0001 L CNN 154 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 4880 5550 50 0001 C CNN 155 | F 3 "~" H 4950 5550 50 0001 C CNN 156 | 1 4950 5550 157 | 0 -1 -1 0 158 | $EndComp 159 | $Comp 160 | L Device:R R13 161 | U 1 1 5DEC7481 162 | P 4950 5300 163 | F 0 "R13" V 5065 5300 50 0000 C CNN 164 | F 1 "R" V 5066 5300 50 0001 C CNN 165 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 4880 5300 50 0001 C CNN 166 | F 3 "~" H 4950 5300 50 0001 C CNN 167 | 1 4950 5300 168 | 0 -1 -1 0 169 | $EndComp 170 | $Comp 171 | L Device:R R12 172 | U 1 1 5DEC768E 173 | P 4950 5050 174 | F 0 "R12" V 5065 5050 50 0000 C CNN 175 | F 1 "R" H 5020 5005 50 0001 L CNN 176 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 4880 5050 50 0001 C CNN 177 | F 3 "~" H 4950 5050 50 0001 C CNN 178 | 1 4950 5050 179 | 0 -1 -1 0 180 | $EndComp 181 | $Comp 182 | L Device:R R11 183 | U 1 1 5DEC78E7 184 | P 4950 4800 185 | F 0 "R11" V 5065 4800 50 0000 C CNN 186 | F 1 "R" H 5020 4755 50 0001 L CNN 187 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 4880 4800 50 0001 C CNN 188 | F 3 "~" H 4950 4800 50 0001 C CNN 189 | 1 4950 4800 190 | 0 -1 -1 0 191 | $EndComp 192 | $Comp 193 | L Device:R R10 194 | U 1 1 5DEC7C75 195 | P 4950 4550 196 | F 0 "R10" V 5065 4550 50 0000 C CNN 197 | F 1 "R" H 5020 4505 50 0001 L CNN 198 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 4880 4550 50 0001 C CNN 199 | F 3 "~" H 4950 4550 50 0001 C CNN 200 | 1 4950 4550 201 | 0 -1 -1 0 202 | $EndComp 203 | $Comp 204 | L Device:R R9 205 | U 1 1 5DEC8068 206 | P 4950 4300 207 | F 0 "R9" V 5065 4300 50 0000 C CNN 208 | F 1 "R" H 5020 4255 50 0001 L CNN 209 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 4880 4300 50 0001 C CNN 210 | F 3 "~" H 4950 4300 50 0001 C CNN 211 | 1 4950 4300 212 | 0 -1 -1 0 213 | $EndComp 214 | $Comp 215 | L Device:R R6 216 | U 1 1 5DEC82E4 217 | P 2800 5550 218 | F 0 "R6" V 2915 5550 50 0000 C CNN 219 | F 1 "R" H 2870 5505 50 0001 L CNN 220 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 2730 5550 50 0001 C CNN 221 | F 3 "~" H 2800 5550 50 0001 C CNN 222 | 1 2800 5550 223 | 0 -1 -1 0 224 | $EndComp 225 | $Comp 226 | L Device:R R5 227 | U 1 1 5DEC8832 228 | P 2800 5300 229 | F 0 "R5" V 2915 5300 50 0000 C CNN 230 | F 1 "R" H 2870 5255 50 0001 L CNN 231 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 2730 5300 50 0001 C CNN 232 | F 3 "~" H 2800 5300 50 0001 C CNN 233 | 1 2800 5300 234 | 0 -1 -1 0 235 | $EndComp 236 | $Comp 237 | L Device:R R4 238 | U 1 1 5DEC8BC6 239 | P 2800 5050 240 | F 0 "R4" V 2915 5050 50 0000 C CNN 241 | F 1 "R" H 2870 5005 50 0001 L CNN 242 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 2730 5050 50 0001 C CNN 243 | F 3 "~" H 2800 5050 50 0001 C CNN 244 | 1 2800 5050 245 | 0 -1 -1 0 246 | $EndComp 247 | $Comp 248 | L Device:R R3 249 | U 1 1 5DEC8E5C 250 | P 2800 4800 251 | F 0 "R3" V 2915 4800 50 0000 C CNN 252 | F 1 "1k" V 2916 4800 50 0001 C CNN 253 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 2730 4800 50 0001 C CNN 254 | F 3 "~" H 2800 4800 50 0001 C CNN 255 | 1 2800 4800 256 | 0 -1 -1 0 257 | $EndComp 258 | $Comp 259 | L Device:R R2 260 | U 1 1 5DEC922D 261 | P 2800 4550 262 | F 0 "R2" V 2915 4550 50 0000 C CNN 263 | F 1 "1k" V 2916 4550 50 0001 C CNN 264 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 2730 4550 50 0001 C CNN 265 | F 3 "~" H 2800 4550 50 0001 C CNN 266 | 1 2800 4550 267 | 0 -1 -1 0 268 | $EndComp 269 | $Comp 270 | L Device:R R1 271 | U 1 1 5DEC94F5 272 | P 2800 4300 273 | F 0 "R1" V 2915 4300 50 0000 C CNN 274 | F 1 "1K" V 2916 4300 50 0001 C CNN 275 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 2730 4300 50 0001 C CNN 276 | F 3 "~" H 2800 4300 50 0001 C CNN 277 | 1 2800 4300 278 | 0 -1 -1 0 279 | $EndComp 280 | $Comp 281 | L 4xxx:4021 U2 282 | U 1 1 5DECC034 283 | P 6250 4400 284 | F 0 "U2" H 6250 5381 50 0000 C CNN 285 | F 1 "4021" H 6250 5290 50 0000 C CNN 286 | F 2 "cad:DIP-16_W7.62mm_large" H 6250 4550 50 0001 C CNN 287 | F 3 "https://assets.nexperia.com/documents/data-sheet/HEF4021B.pdf" H 6250 4550 50 0001 C CNN 288 | 1 6250 4400 289 | 1 0 0 -1 290 | $EndComp 291 | $Comp 292 | L 4xxx:4021 U1 293 | U 1 1 5DECD45D 294 | P 4100 4400 295 | F 0 "U1" H 4100 5381 50 0000 C CNN 296 | F 1 "4021" H 4100 5290 50 0000 C CNN 297 | F 2 "cad:DIP-16_W7.62mm_large" H 4100 4550 50 0001 C CNN 298 | F 3 "https://assets.nexperia.com/documents/data-sheet/HEF4021B.pdf" H 4100 4550 50 0001 C CNN 299 | 1 4100 4400 300 | 1 0 0 -1 301 | $EndComp 302 | Wire Wire Line 303 | 2650 4300 2350 4300 304 | Wire Wire Line 305 | 2350 4300 2350 4550 306 | Wire Wire Line 307 | 2350 6350 4600 6350 308 | Wire Wire Line 309 | 2650 4550 2350 4550 310 | Connection ~ 2350 4550 311 | Wire Wire Line 312 | 2350 4550 2350 4800 313 | Wire Wire Line 314 | 2650 4800 2350 4800 315 | Connection ~ 2350 4800 316 | Wire Wire Line 317 | 2350 4800 2350 5050 318 | Wire Wire Line 319 | 2650 5050 2350 5050 320 | Connection ~ 2350 5050 321 | Wire Wire Line 322 | 2350 5050 2350 5300 323 | Wire Wire Line 324 | 2650 5300 2350 5300 325 | Connection ~ 2350 5300 326 | Wire Wire Line 327 | 2350 5300 2350 5550 328 | Wire Wire Line 329 | 2650 5550 2350 5550 330 | Connection ~ 2350 5550 331 | Wire Wire Line 332 | 2350 5550 2350 5800 333 | Wire Wire Line 334 | 2950 4300 3450 4300 335 | Wire Wire Line 336 | 2950 4400 2950 4550 337 | Wire Wire Line 338 | 3000 4500 3000 4800 339 | Wire Wire Line 340 | 3000 4800 2950 4800 341 | Wire Wire Line 342 | 3050 4600 3050 5050 343 | Wire Wire Line 344 | 3050 5050 2950 5050 345 | Wire Wire Line 346 | 3100 4700 3100 5300 347 | Wire Wire Line 348 | 3100 5300 2950 5300 349 | Wire Wire Line 350 | 3150 4800 3150 5550 351 | Wire Wire Line 352 | 3150 5550 2950 5550 353 | $Comp 354 | L Device:R R7 355 | U 1 1 5DF04F75 356 | P 2800 5800 357 | F 0 "R7" V 2915 5800 50 0000 C CNN 358 | F 1 "R" H 2870 5755 50 0001 L CNN 359 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 2730 5800 50 0001 C CNN 360 | F 3 "~" H 2800 5800 50 0001 C CNN 361 | 1 2800 5800 362 | 0 -1 -1 0 363 | $EndComp 364 | $Comp 365 | L Device:R R8 366 | U 1 1 5DF0779D 367 | P 2800 6050 368 | F 0 "R8" V 2915 6050 50 0000 C CNN 369 | F 1 "R" H 2870 6005 50 0001 L CNN 370 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 2730 6050 50 0001 C CNN 371 | F 3 "~" H 2800 6050 50 0001 C CNN 372 | 1 2800 6050 373 | 0 -1 -1 0 374 | $EndComp 375 | Wire Wire Line 376 | 3200 4900 3200 5800 377 | Wire Wire Line 378 | 3200 5800 2950 5800 379 | Wire Wire Line 380 | 3250 5000 3250 6050 381 | Wire Wire Line 382 | 3250 6050 2950 6050 383 | Wire Wire Line 384 | 2650 5800 2350 5800 385 | Connection ~ 2350 5800 386 | Wire Wire Line 387 | 2350 5800 2350 6050 388 | Wire Wire Line 389 | 2650 6050 2350 6050 390 | Connection ~ 2350 6050 391 | Wire Wire Line 392 | 2350 6050 2350 6350 393 | $Comp 394 | L Device:R R15 395 | U 1 1 5DF0C4AF 396 | P 4950 5800 397 | F 0 "R15" V 5065 5800 50 0000 C CNN 398 | F 1 "R" H 5020 5755 50 0001 L CNN 399 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 4880 5800 50 0001 C CNN 400 | F 3 "~" H 4950 5800 50 0001 C CNN 401 | 1 4950 5800 402 | 0 -1 -1 0 403 | $EndComp 404 | $Comp 405 | L Device:R R16 406 | U 1 1 5DF0C888 407 | P 4950 6050 408 | F 0 "R16" V 5065 6050 50 0000 C CNN 409 | F 1 "R" H 5020 6005 50 0001 L CNN 410 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 4880 6050 50 0001 C CNN 411 | F 3 "~" H 4950 6050 50 0001 C CNN 412 | 1 4950 6050 413 | 0 -1 -1 0 414 | $EndComp 415 | Wire Wire Line 416 | 5100 4550 5100 4400 417 | Wire Wire Line 418 | 5100 4800 5150 4800 419 | Wire Wire Line 420 | 5150 4800 5150 4500 421 | Wire Wire Line 422 | 5200 4600 5200 5050 423 | Wire Wire Line 424 | 5200 5050 5100 5050 425 | Wire Wire Line 426 | 5850 4700 5700 4700 427 | Wire Wire Line 428 | 5250 4700 5250 5300 429 | Wire Wire Line 430 | 5250 5300 5100 5300 431 | Wire Wire Line 432 | 5300 4800 5300 5550 433 | Wire Wire Line 434 | 5300 5550 5100 5550 435 | Wire Wire Line 436 | 5350 4900 5350 5800 437 | Wire Wire Line 438 | 5350 5800 5100 5800 439 | Wire Wire Line 440 | 5400 5000 5400 6050 441 | Wire Wire Line 442 | 5400 6050 5100 6050 443 | Wire Wire Line 444 | 4800 4300 4600 4300 445 | Wire Wire Line 446 | 4600 4300 4600 4550 447 | Connection ~ 4600 6350 448 | Wire Wire Line 449 | 4800 4550 4600 4550 450 | Connection ~ 4600 4550 451 | Wire Wire Line 452 | 4600 4550 4600 4800 453 | Wire Wire Line 454 | 4800 4800 4600 4800 455 | Connection ~ 4600 4800 456 | Wire Wire Line 457 | 4600 4800 4600 5050 458 | Wire Wire Line 459 | 4800 5050 4600 5050 460 | Connection ~ 4600 5050 461 | Wire Wire Line 462 | 4600 5050 4600 5300 463 | Wire Wire Line 464 | 4800 5300 4600 5300 465 | Connection ~ 4600 5300 466 | Wire Wire Line 467 | 4600 5300 4600 5550 468 | Wire Wire Line 469 | 4800 5550 4600 5550 470 | Connection ~ 4600 5550 471 | Wire Wire Line 472 | 4600 5550 4600 5800 473 | Wire Wire Line 474 | 4800 5800 4600 5800 475 | Connection ~ 4600 5800 476 | Wire Wire Line 477 | 4600 5800 4600 6050 478 | Wire Wire Line 479 | 4800 6050 4600 6050 480 | Connection ~ 4600 6050 481 | Wire Wire Line 482 | 4600 6050 4600 6350 483 | Wire Wire Line 484 | 4100 3600 4100 3450 485 | Wire Wire Line 486 | 4100 3450 5050 3450 487 | Wire Wire Line 488 | 6250 3450 6250 3600 489 | Wire Wire Line 490 | 3700 4000 3450 4000 491 | Wire Wire Line 492 | 3450 4000 3450 3350 493 | Wire Wire Line 494 | 3450 3350 5400 3350 495 | Wire Wire Line 496 | 5400 3350 5400 4000 497 | Wire Wire Line 498 | 5400 4000 5800 4000 499 | Wire Wire Line 500 | 3700 3800 3550 3800 501 | Wire Wire Line 502 | 3550 3800 3550 3250 503 | Wire Wire Line 504 | 3550 3250 5500 3250 505 | Wire Wire Line 506 | 5500 3250 5500 3800 507 | Wire Wire Line 508 | 5500 3800 5700 3800 509 | Wire Wire Line 510 | 3700 4100 3350 4100 511 | Wire Wire Line 512 | 3350 4100 3350 3150 513 | Wire Wire Line 514 | 3350 3150 6900 3150 515 | Wire Wire Line 516 | 6900 3150 6900 4000 517 | Wire Wire Line 518 | 6900 4000 6650 4000 519 | $Comp 520 | L Connector:Conn_01x03_Female J_POT1 521 | U 1 1 5DF6FE95 522 | P 7650 2200 523 | F 0 "J_POT1" H 7678 2226 50 0000 L CNN 524 | F 1 "Conn_01x03_Female" H 7678 2135 50 0000 L CNN 525 | F 2 "Connector_PinHeader_2.00mm:PinHeader_1x03_P2.00mm_Vertical" H 7650 2200 50 0001 C CNN 526 | F 3 "~" H 7650 2200 50 0001 C CNN 527 | 1 7650 2200 528 | 1 0 0 -1 529 | $EndComp 530 | $Comp 531 | L Connector:Conn_01x06_Female J_DATA1 532 | U 1 1 5DF70692 533 | P 7650 1500 534 | F 0 "J_DATA1" H 7678 1476 50 0000 L CNN 535 | F 1 "Conn_01x06_Female" H 7678 1385 50 0000 L CNN 536 | F 2 "Connector_PinHeader_2.00mm:PinHeader_1x06_P2.00mm_Vertical" H 7650 1500 50 0001 C CNN 537 | F 3 "~" H 7650 1500 50 0001 C CNN 538 | 1 7650 1500 539 | 1 0 0 -1 540 | $EndComp 541 | $Comp 542 | L power:+5V #PWR0101 543 | U 1 1 5DF72751 544 | P 7050 2550 545 | F 0 "#PWR0101" H 7050 2400 50 0001 C CNN 546 | F 1 "+5V" V 7065 2678 50 0000 L CNN 547 | F 2 "" H 7050 2550 50 0001 C CNN 548 | F 3 "" H 7050 2550 50 0001 C CNN 549 | 1 7050 2550 550 | -1 0 0 1 551 | $EndComp 552 | $Comp 553 | L power:GND #PWR0102 554 | U 1 1 5DF732AD 555 | P 6850 2500 556 | F 0 "#PWR0102" H 6850 2250 50 0001 C CNN 557 | F 1 "GND" V 6855 2372 50 0000 R CNN 558 | F 2 "" H 6850 2500 50 0001 C CNN 559 | F 3 "" H 6850 2500 50 0001 C CNN 560 | 1 6850 2500 561 | 1 0 0 -1 562 | $EndComp 563 | Wire Wire Line 564 | 6850 2300 7450 2300 565 | Wire Wire Line 566 | 6950 2200 7450 2200 567 | Wire Wire Line 568 | 7450 2100 7050 2100 569 | Wire Wire Line 570 | 7050 2100 7050 1800 571 | Wire Wire Line 572 | 7050 1800 7450 1800 573 | Wire Wire Line 574 | 6750 3050 5800 3050 575 | Wire Wire Line 576 | 5800 3050 5800 4000 577 | Connection ~ 5800 4000 578 | Wire Wire Line 579 | 5800 4000 5850 4000 580 | Wire Wire Line 581 | 6650 2950 5700 2950 582 | Wire Wire Line 583 | 5700 2950 5700 3800 584 | Connection ~ 5700 3800 585 | Wire Wire Line 586 | 5700 3800 5850 3800 587 | Wire Wire Line 588 | 4500 4000 4650 4000 589 | Wire Wire Line 590 | 4650 4000 4650 2850 591 | Wire Wire Line 592 | 4650 2850 6550 2850 593 | $Comp 594 | L power:+5V #PWR0103 595 | U 1 1 5DFA25BE 596 | P 4100 800 597 | F 0 "#PWR0103" H 4100 650 50 0001 C CNN 598 | F 1 "+5V" H 4115 973 50 0000 C CNN 599 | F 2 "" H 4100 800 50 0001 C CNN 600 | F 3 "" H 4100 800 50 0001 C CNN 601 | 1 4100 800 602 | 1 0 0 -1 603 | $EndComp 604 | Wire Wire Line 605 | 4100 800 4100 950 606 | Wire Wire Line 607 | 4100 1150 4200 1150 608 | Wire Wire Line 609 | 4100 1150 4100 1550 610 | Wire Wire Line 611 | 4100 1550 4200 1550 612 | Connection ~ 4100 1150 613 | Wire Wire Line 614 | 4100 1550 4100 1950 615 | Wire Wire Line 616 | 4100 1950 4200 1950 617 | Connection ~ 4100 1550 618 | Wire Wire Line 619 | 4100 1950 4100 2300 620 | Wire Wire Line 621 | 4100 2300 4200 2300 622 | Connection ~ 4100 1950 623 | Wire Wire Line 624 | 2700 950 2700 1150 625 | Wire Wire Line 626 | 2700 1150 2800 1150 627 | Connection ~ 4100 950 628 | Wire Wire Line 629 | 4100 950 4100 1150 630 | Wire Wire Line 631 | 2700 1150 2700 1550 632 | Wire Wire Line 633 | 2700 1550 2800 1550 634 | Connection ~ 2700 1150 635 | Wire Wire Line 636 | 2700 1550 2700 1950 637 | Wire Wire Line 638 | 2700 1950 2800 1950 639 | Connection ~ 2700 1550 640 | Wire Wire Line 641 | 2700 1950 2700 2300 642 | Wire Wire Line 643 | 2700 2300 2800 2300 644 | Connection ~ 2700 1950 645 | Wire Wire Line 646 | 1150 950 1150 1150 647 | Wire Wire Line 648 | 1150 1150 1250 1150 649 | Wire Wire Line 650 | 1150 1150 1150 1550 651 | Wire Wire Line 652 | 1150 1550 1250 1550 653 | Connection ~ 1150 1150 654 | Wire Wire Line 655 | 1150 1550 1150 1950 656 | Wire Wire Line 657 | 1150 1950 1250 1950 658 | Connection ~ 1150 1550 659 | Wire Wire Line 660 | 1150 1950 1150 2300 661 | Wire Wire Line 662 | 1150 2300 1250 2300 663 | Connection ~ 1150 1950 664 | Connection ~ 2700 950 665 | Wire Wire Line 666 | 2700 950 4100 950 667 | Wire Wire Line 668 | 1150 950 2700 950 669 | $Comp 670 | L power:GND #PWR0104 671 | U 1 1 5E0AB5A0 672 | P 4600 6600 673 | F 0 "#PWR0104" H 4600 6350 50 0001 C CNN 674 | F 1 "GND" H 4605 6427 50 0000 C CNN 675 | F 2 "" H 4600 6600 50 0001 C CNN 676 | F 3 "" H 4600 6600 50 0001 C CNN 677 | 1 4600 6600 678 | 1 0 0 -1 679 | $EndComp 680 | Wire Wire Line 681 | 4600 6350 4600 6600 682 | $Comp 683 | L power:+5V #PWR0105 684 | U 1 1 5E0CCB34 685 | P 5050 3650 686 | F 0 "#PWR0105" H 5050 3500 50 0001 C CNN 687 | F 1 "+5V" H 5065 3823 50 0000 C CNN 688 | F 2 "" H 5050 3650 50 0001 C CNN 689 | F 3 "" H 5050 3650 50 0001 C CNN 690 | 1 5050 3650 691 | -1 0 0 1 692 | $EndComp 693 | Wire Wire Line 694 | 5050 3450 5050 3650 695 | Connection ~ 5050 3450 696 | Wire Wire Line 697 | 5050 3450 6250 3450 698 | Wire Wire Line 699 | 3100 4700 3550 4700 700 | Wire Wire Line 701 | 3150 4800 3500 4800 702 | Wire Wire Line 703 | 5100 4300 5500 4300 704 | Wire Wire Line 705 | 5150 4500 5550 4500 706 | Wire Wire Line 707 | 5100 4400 5450 4400 708 | Wire Wire Line 709 | 5300 4800 5650 4800 710 | Wire Wire Line 711 | 3200 4900 3700 4900 712 | Wire Wire Line 713 | 5200 4600 5600 4600 714 | Wire Wire Line 715 | 5400 5000 5850 5000 716 | Wire Wire Line 717 | 2950 4400 3400 4400 718 | Wire Wire Line 719 | 3000 4500 3350 4500 720 | Wire Wire Line 721 | 3050 4600 3300 4600 722 | Wire Wire Line 723 | 3250 5000 3700 5000 724 | Wire Wire Line 725 | 1250 1250 1050 1250 726 | Wire Wire Line 727 | 1050 1250 1050 6450 728 | Wire Wire Line 729 | 1050 6450 3300 6450 730 | Wire Wire Line 731 | 3300 6450 3300 4600 732 | Connection ~ 3300 4600 733 | Wire Wire Line 734 | 3300 4600 3700 4600 735 | Wire Wire Line 736 | 1250 1650 950 1650 737 | Wire Wire Line 738 | 950 1650 950 6550 739 | Wire Wire Line 740 | 950 6550 3350 6550 741 | Wire Wire Line 742 | 3350 6550 3350 4500 743 | Connection ~ 3350 4500 744 | Wire Wire Line 745 | 3350 4500 3700 4500 746 | Wire Wire Line 747 | 1250 2050 850 2050 748 | Wire Wire Line 749 | 850 2050 850 6650 750 | Wire Wire Line 751 | 850 6650 3400 6650 752 | Wire Wire Line 753 | 3400 6650 3400 4400 754 | Connection ~ 3400 4400 755 | Wire Wire Line 756 | 3400 4400 3700 4400 757 | Wire Wire Line 758 | 1250 2400 750 2400 759 | Wire Wire Line 760 | 750 2400 750 6750 761 | Wire Wire Line 762 | 750 6750 3450 6750 763 | Wire Wire Line 764 | 3450 6750 3450 4300 765 | Connection ~ 3450 4300 766 | Wire Wire Line 767 | 3450 4300 3700 4300 768 | Wire Wire Line 769 | 2800 1250 2050 1250 770 | Wire Wire Line 771 | 2050 1250 2050 6850 772 | Wire Wire Line 773 | 2050 6850 3500 6850 774 | Wire Wire Line 775 | 3500 6850 3500 4800 776 | Connection ~ 3500 4800 777 | Wire Wire Line 778 | 3500 4800 3700 4800 779 | Wire Wire Line 780 | 2800 1650 2150 1650 781 | Wire Wire Line 782 | 2150 1650 2150 6950 783 | Wire Wire Line 784 | 2150 6950 3550 6950 785 | Wire Wire Line 786 | 3550 6950 3550 4700 787 | Connection ~ 3550 4700 788 | Wire Wire Line 789 | 3550 4700 3700 4700 790 | Wire Wire Line 791 | 2800 2050 2250 2050 792 | Wire Wire Line 793 | 2250 2050 2250 2650 794 | Wire Wire Line 795 | 2250 2650 1150 2650 796 | Wire Wire Line 797 | 1150 2650 1150 7050 798 | Wire Wire Line 799 | 1150 7050 5450 7050 800 | Wire Wire Line 801 | 5450 7050 5450 4400 802 | Connection ~ 5450 4400 803 | Wire Wire Line 804 | 5450 4400 5850 4400 805 | Wire Wire Line 806 | 2800 2400 2350 2400 807 | Wire Wire Line 808 | 2350 2400 2350 2750 809 | Wire Wire Line 810 | 2350 2750 1250 2750 811 | Wire Wire Line 812 | 1250 2750 1250 7150 813 | Wire Wire Line 814 | 1250 7150 5500 7150 815 | Wire Wire Line 816 | 5500 7150 5500 4300 817 | Connection ~ 5500 4300 818 | Wire Wire Line 819 | 5500 4300 5850 4300 820 | Wire Wire Line 821 | 4200 1250 3600 1250 822 | Wire Wire Line 823 | 3600 1250 3600 2850 824 | Wire Wire Line 825 | 3600 2850 1350 2850 826 | Wire Wire Line 827 | 1350 2850 1350 7250 828 | Wire Wire Line 829 | 1350 7250 5550 7250 830 | Wire Wire Line 831 | 5550 7250 5550 4500 832 | Connection ~ 5550 4500 833 | Wire Wire Line 834 | 5550 4500 5850 4500 835 | Wire Wire Line 836 | 4200 1650 3700 1650 837 | Wire Wire Line 838 | 3700 1650 3700 2950 839 | Wire Wire Line 840 | 3700 2950 1450 2950 841 | Wire Wire Line 842 | 1450 2950 1450 7350 843 | Wire Wire Line 844 | 1450 7350 5600 7350 845 | Wire Wire Line 846 | 5600 7350 5600 4600 847 | Connection ~ 5600 4600 848 | Wire Wire Line 849 | 5600 4600 5850 4600 850 | Wire Wire Line 851 | 4200 2050 3800 2050 852 | Wire Wire Line 853 | 3800 2050 3800 3050 854 | Wire Wire Line 855 | 3800 3050 1550 3050 856 | Wire Wire Line 857 | 1550 3050 1550 7450 858 | Wire Wire Line 859 | 1550 7450 5650 7450 860 | Wire Wire Line 861 | 5650 7450 5650 4800 862 | Connection ~ 5650 4800 863 | Wire Wire Line 864 | 5650 4800 5850 4800 865 | Wire Wire Line 866 | 4200 2400 4200 2750 867 | Wire Wire Line 868 | 4200 2750 2550 2750 869 | Wire Wire Line 870 | 2550 2750 2550 3150 871 | Wire Wire Line 872 | 2550 3150 1650 3150 873 | Wire Wire Line 874 | 1650 3150 1650 7550 875 | Wire Wire Line 876 | 1650 7550 5700 7550 877 | Wire Wire Line 878 | 5700 7550 5700 4700 879 | Connection ~ 5700 4700 880 | Wire Wire Line 881 | 5700 4700 5250 4700 882 | Wire Wire Line 883 | 5350 4900 5850 4900 884 | Wire Wire Line 885 | 6850 2500 6850 2300 886 | Connection ~ 6850 2300 887 | Wire Wire Line 888 | 6950 2200 6950 2550 889 | Wire Wire Line 890 | 6950 2550 7050 2550 891 | Wire Wire Line 892 | 6550 1300 7450 1300 893 | Wire Wire Line 894 | 6550 1300 6550 2850 895 | Wire Wire Line 896 | 6650 1400 7450 1400 897 | Wire Wire Line 898 | 6650 1400 6650 2950 899 | Wire Wire Line 900 | 6750 1500 7450 1500 901 | Wire Wire Line 902 | 6750 1500 6750 3050 903 | Wire Wire Line 904 | 6850 1600 7450 1600 905 | Wire Wire Line 906 | 6850 1600 6850 2300 907 | Wire Wire Line 908 | 6950 2200 6950 1700 909 | Wire Wire Line 910 | 6950 1700 7450 1700 911 | Connection ~ 6950 2200 912 | $EndSCHEMATC 913 | -------------------------------------------------------------------------------- /cad/stoerbert.sch-bak: -------------------------------------------------------------------------------- 1 | EESchema Schematic File Version 4 2 | EELAYER 30 0 3 | EELAYER END 4 | $Descr A4 11693 8268 5 | encoding utf-8 6 | Sheet 1 1 7 | Title "" 8 | Date "" 9 | Rev "" 10 | Comp "" 11 | Comment1 "" 12 | Comment2 "" 13 | Comment3 "" 14 | Comment4 "" 15 | $EndDescr 16 | $Comp 17 | L stoerbert:OmronB3F SW1 18 | U 1 1 5DE7A9D8 19 | P 1250 1350 20 | F 0 "SW1" H 1578 1546 50 0000 L CNN 21 | F 1 "OmronB3F" H 1578 1455 50 0000 L CNN 22 | F 2 "cad:ToggleSwitch" H 1250 1350 50 0001 C CNN 23 | F 3 "" H 1250 1350 50 0001 C CNN 24 | 1 1250 1350 25 | 1 0 0 -1 26 | $EndComp 27 | $Comp 28 | L stoerbert:OmronB3F SW2 29 | U 1 1 5DE7ADB7 30 | P 2800 1350 31 | F 0 "SW2" H 3128 1546 50 0000 L CNN 32 | F 1 "OmronB3F" H 3128 1455 50 0000 L CNN 33 | F 2 "cad:ToggleSwitch" H 2800 1350 50 0001 C CNN 34 | F 3 "" H 2800 1350 50 0001 C CNN 35 | 1 2800 1350 36 | 1 0 0 -1 37 | $EndComp 38 | $Comp 39 | L stoerbert:OmronB3F SW3 40 | U 1 1 5DE7B778 41 | P 4200 1350 42 | F 0 "SW3" H 4528 1546 50 0000 L CNN 43 | F 1 "OmronB3F" H 4528 1455 50 0000 L CNN 44 | F 2 "cad:ToggleSwitch" H 4200 1350 50 0001 C CNN 45 | F 3 "" H 4200 1350 50 0001 C CNN 46 | 1 4200 1350 47 | 1 0 0 -1 48 | $EndComp 49 | $Comp 50 | L stoerbert:OmronB3F SW4 51 | U 1 1 5DE7BBE2 52 | P 1250 1750 53 | F 0 "SW4" H 1578 1946 50 0000 L CNN 54 | F 1 "OmronB3F" H 1578 1855 50 0000 L CNN 55 | F 2 "cad:ToggleSwitch" H 1250 1750 50 0001 C CNN 56 | F 3 "" H 1250 1750 50 0001 C CNN 57 | 1 1250 1750 58 | 1 0 0 -1 59 | $EndComp 60 | $Comp 61 | L stoerbert:OmronB3F SW5 62 | U 1 1 5DE7C143 63 | P 2800 1750 64 | F 0 "SW5" H 3128 1946 50 0000 L CNN 65 | F 1 "OmronB3F" H 3128 1855 50 0000 L CNN 66 | F 2 "cad:ToggleSwitch" H 2800 1750 50 0001 C CNN 67 | F 3 "" H 2800 1750 50 0001 C CNN 68 | 1 2800 1750 69 | 1 0 0 -1 70 | $EndComp 71 | $Comp 72 | L stoerbert:OmronB3F SW6 73 | U 1 1 5DE7C4ED 74 | P 4200 1750 75 | F 0 "SW6" H 4528 1946 50 0000 L CNN 76 | F 1 "OmronB3F" H 4528 1855 50 0000 L CNN 77 | F 2 "cad:ToggleSwitch" H 4200 1750 50 0001 C CNN 78 | F 3 "" H 4200 1750 50 0001 C CNN 79 | 1 4200 1750 80 | 1 0 0 -1 81 | $EndComp 82 | $Comp 83 | L stoerbert:OmronB3F SW7 84 | U 1 1 5DE7C885 85 | P 1250 2150 86 | F 0 "SW7" H 1578 2346 50 0000 L CNN 87 | F 1 "OmronB3F" H 1578 2255 50 0000 L CNN 88 | F 2 "cad:ToggleSwitch" H 1250 2150 50 0001 C CNN 89 | F 3 "" H 1250 2150 50 0001 C CNN 90 | 1 1250 2150 91 | 1 0 0 -1 92 | $EndComp 93 | $Comp 94 | L stoerbert:OmronB3F SW8 95 | U 1 1 5DE7CCC0 96 | P 2800 2150 97 | F 0 "SW8" H 3128 2346 50 0000 L CNN 98 | F 1 "OmronB3F" H 3128 2255 50 0000 L CNN 99 | F 2 "cad:ToggleSwitch" H 2800 2150 50 0001 C CNN 100 | F 3 "" H 2800 2150 50 0001 C CNN 101 | 1 2800 2150 102 | 1 0 0 -1 103 | $EndComp 104 | $Comp 105 | L stoerbert:OmronB3F SW9 106 | U 1 1 5DE7D099 107 | P 4200 2150 108 | F 0 "SW9" H 4528 2346 50 0000 L CNN 109 | F 1 "OmronB3F" H 4528 2255 50 0000 L CNN 110 | F 2 "cad:ToggleSwitch" H 4200 2150 50 0001 C CNN 111 | F 3 "" H 4200 2150 50 0001 C CNN 112 | 1 4200 2150 113 | 1 0 0 -1 114 | $EndComp 115 | $Comp 116 | L stoerbert:OmronB3F SW_PREV1 117 | U 1 1 5DE7D6BD 118 | P 1250 2500 119 | F 0 "SW_PREV1" H 1578 2696 50 0000 L CNN 120 | F 1 "OmronB3F" H 1578 2605 50 0000 L CNN 121 | F 2 "cad:ToggleSwitch" H 1250 2500 50 0001 C CNN 122 | F 3 "" H 1250 2500 50 0001 C CNN 123 | 1 1250 2500 124 | 1 0 0 -1 125 | $EndComp 126 | $Comp 127 | L stoerbert:OmronB3F SW_PLAY1 128 | U 1 1 5DE7D9C2 129 | P 2800 2500 130 | F 0 "SW_PLAY1" H 3128 2696 50 0000 L CNN 131 | F 1 "OmronB3F" H 3128 2605 50 0000 L CNN 132 | F 2 "cad:ToggleSwitch" H 2800 2500 50 0001 C CNN 133 | F 3 "" H 2800 2500 50 0001 C CNN 134 | 1 2800 2500 135 | 1 0 0 -1 136 | $EndComp 137 | $Comp 138 | L stoerbert:OmronB3F SW_NEXT1 139 | U 1 1 5DE7DE6C 140 | P 4200 2500 141 | F 0 "SW_NEXT1" H 4528 2696 50 0000 L CNN 142 | F 1 "OmronB3F" H 4528 2605 50 0000 L CNN 143 | F 2 "cad:ToggleSwitch" H 4200 2500 50 0001 C CNN 144 | F 3 "" H 4200 2500 50 0001 C CNN 145 | 1 4200 2500 146 | 1 0 0 -1 147 | $EndComp 148 | $Comp 149 | L Device:R R14 150 | U 1 1 5DEC6AD6 151 | P 4950 5550 152 | F 0 "R14" V 5065 5550 50 0000 C CNN 153 | F 1 "R" H 5020 5505 50 0001 L CNN 154 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 4880 5550 50 0001 C CNN 155 | F 3 "~" H 4950 5550 50 0001 C CNN 156 | 1 4950 5550 157 | 0 -1 -1 0 158 | $EndComp 159 | $Comp 160 | L Device:R R13 161 | U 1 1 5DEC7481 162 | P 4950 5300 163 | F 0 "R13" V 5065 5300 50 0000 C CNN 164 | F 1 "R" V 5066 5300 50 0001 C CNN 165 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 4880 5300 50 0001 C CNN 166 | F 3 "~" H 4950 5300 50 0001 C CNN 167 | 1 4950 5300 168 | 0 -1 -1 0 169 | $EndComp 170 | $Comp 171 | L Device:R R12 172 | U 1 1 5DEC768E 173 | P 4950 5050 174 | F 0 "R12" V 5065 5050 50 0000 C CNN 175 | F 1 "R" H 5020 5005 50 0001 L CNN 176 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 4880 5050 50 0001 C CNN 177 | F 3 "~" H 4950 5050 50 0001 C CNN 178 | 1 4950 5050 179 | 0 -1 -1 0 180 | $EndComp 181 | $Comp 182 | L Device:R R11 183 | U 1 1 5DEC78E7 184 | P 4950 4800 185 | F 0 "R11" V 5065 4800 50 0000 C CNN 186 | F 1 "R" H 5020 4755 50 0001 L CNN 187 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 4880 4800 50 0001 C CNN 188 | F 3 "~" H 4950 4800 50 0001 C CNN 189 | 1 4950 4800 190 | 0 -1 -1 0 191 | $EndComp 192 | $Comp 193 | L Device:R R10 194 | U 1 1 5DEC7C75 195 | P 4950 4550 196 | F 0 "R10" V 5065 4550 50 0000 C CNN 197 | F 1 "R" H 5020 4505 50 0001 L CNN 198 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 4880 4550 50 0001 C CNN 199 | F 3 "~" H 4950 4550 50 0001 C CNN 200 | 1 4950 4550 201 | 0 -1 -1 0 202 | $EndComp 203 | $Comp 204 | L Device:R R9 205 | U 1 1 5DEC8068 206 | P 4950 4300 207 | F 0 "R9" V 5065 4300 50 0000 C CNN 208 | F 1 "R" H 5020 4255 50 0001 L CNN 209 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 4880 4300 50 0001 C CNN 210 | F 3 "~" H 4950 4300 50 0001 C CNN 211 | 1 4950 4300 212 | 0 -1 -1 0 213 | $EndComp 214 | $Comp 215 | L Device:R R6 216 | U 1 1 5DEC82E4 217 | P 2800 5550 218 | F 0 "R6" V 2915 5550 50 0000 C CNN 219 | F 1 "R" H 2870 5505 50 0001 L CNN 220 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 2730 5550 50 0001 C CNN 221 | F 3 "~" H 2800 5550 50 0001 C CNN 222 | 1 2800 5550 223 | 0 -1 -1 0 224 | $EndComp 225 | $Comp 226 | L Device:R R5 227 | U 1 1 5DEC8832 228 | P 2800 5300 229 | F 0 "R5" V 2915 5300 50 0000 C CNN 230 | F 1 "R" H 2870 5255 50 0001 L CNN 231 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 2730 5300 50 0001 C CNN 232 | F 3 "~" H 2800 5300 50 0001 C CNN 233 | 1 2800 5300 234 | 0 -1 -1 0 235 | $EndComp 236 | $Comp 237 | L Device:R R4 238 | U 1 1 5DEC8BC6 239 | P 2800 5050 240 | F 0 "R4" V 2915 5050 50 0000 C CNN 241 | F 1 "R" H 2870 5005 50 0001 L CNN 242 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 2730 5050 50 0001 C CNN 243 | F 3 "~" H 2800 5050 50 0001 C CNN 244 | 1 2800 5050 245 | 0 -1 -1 0 246 | $EndComp 247 | $Comp 248 | L Device:R R3 249 | U 1 1 5DEC8E5C 250 | P 2800 4800 251 | F 0 "R3" V 2915 4800 50 0000 C CNN 252 | F 1 "1k" V 2916 4800 50 0001 C CNN 253 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 2730 4800 50 0001 C CNN 254 | F 3 "~" H 2800 4800 50 0001 C CNN 255 | 1 2800 4800 256 | 0 -1 -1 0 257 | $EndComp 258 | $Comp 259 | L Device:R R2 260 | U 1 1 5DEC922D 261 | P 2800 4550 262 | F 0 "R2" V 2915 4550 50 0000 C CNN 263 | F 1 "1k" V 2916 4550 50 0001 C CNN 264 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 2730 4550 50 0001 C CNN 265 | F 3 "~" H 2800 4550 50 0001 C CNN 266 | 1 2800 4550 267 | 0 -1 -1 0 268 | $EndComp 269 | $Comp 270 | L Device:R R1 271 | U 1 1 5DEC94F5 272 | P 2800 4300 273 | F 0 "R1" V 2915 4300 50 0000 C CNN 274 | F 1 "1K" V 2916 4300 50 0001 C CNN 275 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 2730 4300 50 0001 C CNN 276 | F 3 "~" H 2800 4300 50 0001 C CNN 277 | 1 2800 4300 278 | 0 -1 -1 0 279 | $EndComp 280 | $Comp 281 | L 4xxx:4021 U2 282 | U 1 1 5DECC034 283 | P 6250 4400 284 | F 0 "U2" H 6250 5381 50 0000 C CNN 285 | F 1 "4021" H 6250 5290 50 0000 C CNN 286 | F 2 "Package_DIP:DIP-16_W7.62mm" H 6250 4550 50 0001 C CNN 287 | F 3 "https://assets.nexperia.com/documents/data-sheet/HEF4021B.pdf" H 6250 4550 50 0001 C CNN 288 | 1 6250 4400 289 | 1 0 0 -1 290 | $EndComp 291 | $Comp 292 | L 4xxx:4021 U1 293 | U 1 1 5DECD45D 294 | P 4100 4400 295 | F 0 "U1" H 4100 5381 50 0000 C CNN 296 | F 1 "4021" H 4100 5290 50 0000 C CNN 297 | F 2 "cad:DIP-16_W7.62mm_large" H 4100 4550 50 0001 C CNN 298 | F 3 "https://assets.nexperia.com/documents/data-sheet/HEF4021B.pdf" H 4100 4550 50 0001 C CNN 299 | 1 4100 4400 300 | 1 0 0 -1 301 | $EndComp 302 | Wire Wire Line 303 | 2650 4300 2350 4300 304 | Wire Wire Line 305 | 2350 4300 2350 4550 306 | Wire Wire Line 307 | 2350 6350 4600 6350 308 | Wire Wire Line 309 | 2650 4550 2350 4550 310 | Connection ~ 2350 4550 311 | Wire Wire Line 312 | 2350 4550 2350 4800 313 | Wire Wire Line 314 | 2650 4800 2350 4800 315 | Connection ~ 2350 4800 316 | Wire Wire Line 317 | 2350 4800 2350 5050 318 | Wire Wire Line 319 | 2650 5050 2350 5050 320 | Connection ~ 2350 5050 321 | Wire Wire Line 322 | 2350 5050 2350 5300 323 | Wire Wire Line 324 | 2650 5300 2350 5300 325 | Connection ~ 2350 5300 326 | Wire Wire Line 327 | 2350 5300 2350 5550 328 | Wire Wire Line 329 | 2650 5550 2350 5550 330 | Connection ~ 2350 5550 331 | Wire Wire Line 332 | 2350 5550 2350 5800 333 | Wire Wire Line 334 | 2950 4300 3450 4300 335 | Wire Wire Line 336 | 2950 4400 2950 4550 337 | Wire Wire Line 338 | 3000 4500 3000 4800 339 | Wire Wire Line 340 | 3000 4800 2950 4800 341 | Wire Wire Line 342 | 3050 4600 3050 5050 343 | Wire Wire Line 344 | 3050 5050 2950 5050 345 | Wire Wire Line 346 | 3100 4700 3100 5300 347 | Wire Wire Line 348 | 3100 5300 2950 5300 349 | Wire Wire Line 350 | 3150 4800 3150 5550 351 | Wire Wire Line 352 | 3150 5550 2950 5550 353 | $Comp 354 | L Device:R R7 355 | U 1 1 5DF04F75 356 | P 2800 5800 357 | F 0 "R7" V 2915 5800 50 0000 C CNN 358 | F 1 "R" H 2870 5755 50 0001 L CNN 359 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 2730 5800 50 0001 C CNN 360 | F 3 "~" H 2800 5800 50 0001 C CNN 361 | 1 2800 5800 362 | 0 -1 -1 0 363 | $EndComp 364 | $Comp 365 | L Device:R R8 366 | U 1 1 5DF0779D 367 | P 2800 6050 368 | F 0 "R8" V 2915 6050 50 0000 C CNN 369 | F 1 "R" H 2870 6005 50 0001 L CNN 370 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 2730 6050 50 0001 C CNN 371 | F 3 "~" H 2800 6050 50 0001 C CNN 372 | 1 2800 6050 373 | 0 -1 -1 0 374 | $EndComp 375 | Wire Wire Line 376 | 3200 4900 3200 5800 377 | Wire Wire Line 378 | 3200 5800 2950 5800 379 | Wire Wire Line 380 | 3250 5000 3250 6050 381 | Wire Wire Line 382 | 3250 6050 2950 6050 383 | Wire Wire Line 384 | 2650 5800 2350 5800 385 | Connection ~ 2350 5800 386 | Wire Wire Line 387 | 2350 5800 2350 6050 388 | Wire Wire Line 389 | 2650 6050 2350 6050 390 | Connection ~ 2350 6050 391 | Wire Wire Line 392 | 2350 6050 2350 6350 393 | $Comp 394 | L Device:R R15 395 | U 1 1 5DF0C4AF 396 | P 4950 5800 397 | F 0 "R15" V 5065 5800 50 0000 C CNN 398 | F 1 "R" H 5020 5755 50 0001 L CNN 399 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 4880 5800 50 0001 C CNN 400 | F 3 "~" H 4950 5800 50 0001 C CNN 401 | 1 4950 5800 402 | 0 -1 -1 0 403 | $EndComp 404 | $Comp 405 | L Device:R R16 406 | U 1 1 5DF0C888 407 | P 4950 6050 408 | F 0 "R16" V 5065 6050 50 0000 C CNN 409 | F 1 "R" H 5020 6005 50 0001 L CNN 410 | F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" V 4880 6050 50 0001 C CNN 411 | F 3 "~" H 4950 6050 50 0001 C CNN 412 | 1 4950 6050 413 | 0 -1 -1 0 414 | $EndComp 415 | Wire Wire Line 416 | 5100 4550 5100 4400 417 | Wire Wire Line 418 | 5100 4800 5150 4800 419 | Wire Wire Line 420 | 5150 4800 5150 4500 421 | Wire Wire Line 422 | 5200 4600 5200 5050 423 | Wire Wire Line 424 | 5200 5050 5100 5050 425 | Wire Wire Line 426 | 5850 4700 5700 4700 427 | Wire Wire Line 428 | 5250 4700 5250 5300 429 | Wire Wire Line 430 | 5250 5300 5100 5300 431 | Wire Wire Line 432 | 5300 4800 5300 5550 433 | Wire Wire Line 434 | 5300 5550 5100 5550 435 | Wire Wire Line 436 | 5350 4900 5350 5800 437 | Wire Wire Line 438 | 5350 5800 5100 5800 439 | Wire Wire Line 440 | 5400 5000 5400 6050 441 | Wire Wire Line 442 | 5400 6050 5100 6050 443 | Wire Wire Line 444 | 4800 4300 4600 4300 445 | Wire Wire Line 446 | 4600 4300 4600 4550 447 | Connection ~ 4600 6350 448 | Wire Wire Line 449 | 4800 4550 4600 4550 450 | Connection ~ 4600 4550 451 | Wire Wire Line 452 | 4600 4550 4600 4800 453 | Wire Wire Line 454 | 4800 4800 4600 4800 455 | Connection ~ 4600 4800 456 | Wire Wire Line 457 | 4600 4800 4600 5050 458 | Wire Wire Line 459 | 4800 5050 4600 5050 460 | Connection ~ 4600 5050 461 | Wire Wire Line 462 | 4600 5050 4600 5300 463 | Wire Wire Line 464 | 4800 5300 4600 5300 465 | Connection ~ 4600 5300 466 | Wire Wire Line 467 | 4600 5300 4600 5550 468 | Wire Wire Line 469 | 4800 5550 4600 5550 470 | Connection ~ 4600 5550 471 | Wire Wire Line 472 | 4600 5550 4600 5800 473 | Wire Wire Line 474 | 4800 5800 4600 5800 475 | Connection ~ 4600 5800 476 | Wire Wire Line 477 | 4600 5800 4600 6050 478 | Wire Wire Line 479 | 4800 6050 4600 6050 480 | Connection ~ 4600 6050 481 | Wire Wire Line 482 | 4600 6050 4600 6350 483 | Wire Wire Line 484 | 4100 3600 4100 3450 485 | Wire Wire Line 486 | 4100 3450 5050 3450 487 | Wire Wire Line 488 | 6250 3450 6250 3600 489 | Wire Wire Line 490 | 3700 4000 3450 4000 491 | Wire Wire Line 492 | 3450 4000 3450 3350 493 | Wire Wire Line 494 | 3450 3350 5400 3350 495 | Wire Wire Line 496 | 5400 3350 5400 4000 497 | Wire Wire Line 498 | 5400 4000 5800 4000 499 | Wire Wire Line 500 | 3700 3800 3550 3800 501 | Wire Wire Line 502 | 3550 3800 3550 3250 503 | Wire Wire Line 504 | 3550 3250 5500 3250 505 | Wire Wire Line 506 | 5500 3250 5500 3800 507 | Wire Wire Line 508 | 5500 3800 5700 3800 509 | Wire Wire Line 510 | 3700 4100 3350 4100 511 | Wire Wire Line 512 | 3350 4100 3350 3150 513 | Wire Wire Line 514 | 3350 3150 6900 3150 515 | Wire Wire Line 516 | 6900 3150 6900 4000 517 | Wire Wire Line 518 | 6900 4000 6650 4000 519 | $Comp 520 | L Connector:Conn_01x03_Female J_POT1 521 | U 1 1 5DF6FE95 522 | P 7650 2200 523 | F 0 "J_POT1" H 7678 2226 50 0000 L CNN 524 | F 1 "Conn_01x03_Female" H 7678 2135 50 0000 L CNN 525 | F 2 "Connector_PinHeader_2.00mm:PinHeader_1x03_P2.00mm_Vertical" H 7650 2200 50 0001 C CNN 526 | F 3 "~" H 7650 2200 50 0001 C CNN 527 | 1 7650 2200 528 | 1 0 0 -1 529 | $EndComp 530 | $Comp 531 | L Connector:Conn_01x06_Female J_DATA1 532 | U 1 1 5DF70692 533 | P 7650 1500 534 | F 0 "J_DATA1" H 7678 1476 50 0000 L CNN 535 | F 1 "Conn_01x06_Female" H 7678 1385 50 0000 L CNN 536 | F 2 "Connector_PinHeader_2.00mm:PinHeader_1x06_P2.00mm_Vertical" H 7650 1500 50 0001 C CNN 537 | F 3 "~" H 7650 1500 50 0001 C CNN 538 | 1 7650 1500 539 | 1 0 0 -1 540 | $EndComp 541 | $Comp 542 | L power:+5V #PWR0101 543 | U 1 1 5DF72751 544 | P 7050 2550 545 | F 0 "#PWR0101" H 7050 2400 50 0001 C CNN 546 | F 1 "+5V" V 7065 2678 50 0000 L CNN 547 | F 2 "" H 7050 2550 50 0001 C CNN 548 | F 3 "" H 7050 2550 50 0001 C CNN 549 | 1 7050 2550 550 | -1 0 0 1 551 | $EndComp 552 | $Comp 553 | L power:GND #PWR0102 554 | U 1 1 5DF732AD 555 | P 6850 2500 556 | F 0 "#PWR0102" H 6850 2250 50 0001 C CNN 557 | F 1 "GND" V 6855 2372 50 0000 R CNN 558 | F 2 "" H 6850 2500 50 0001 C CNN 559 | F 3 "" H 6850 2500 50 0001 C CNN 560 | 1 6850 2500 561 | 1 0 0 -1 562 | $EndComp 563 | Wire Wire Line 564 | 6850 2300 7450 2300 565 | Wire Wire Line 566 | 6950 2200 7450 2200 567 | Wire Wire Line 568 | 7450 2100 7050 2100 569 | Wire Wire Line 570 | 7050 2100 7050 1800 571 | Wire Wire Line 572 | 7050 1800 7450 1800 573 | Wire Wire Line 574 | 6750 3050 5800 3050 575 | Wire Wire Line 576 | 5800 3050 5800 4000 577 | Connection ~ 5800 4000 578 | Wire Wire Line 579 | 5800 4000 5850 4000 580 | Wire Wire Line 581 | 6650 2950 5700 2950 582 | Wire Wire Line 583 | 5700 2950 5700 3800 584 | Connection ~ 5700 3800 585 | Wire Wire Line 586 | 5700 3800 5850 3800 587 | Wire Wire Line 588 | 4500 4000 4650 4000 589 | Wire Wire Line 590 | 4650 4000 4650 2850 591 | Wire Wire Line 592 | 4650 2850 6550 2850 593 | $Comp 594 | L power:+5V #PWR0103 595 | U 1 1 5DFA25BE 596 | P 4100 800 597 | F 0 "#PWR0103" H 4100 650 50 0001 C CNN 598 | F 1 "+5V" H 4115 973 50 0000 C CNN 599 | F 2 "" H 4100 800 50 0001 C CNN 600 | F 3 "" H 4100 800 50 0001 C CNN 601 | 1 4100 800 602 | 1 0 0 -1 603 | $EndComp 604 | Wire Wire Line 605 | 4100 800 4100 950 606 | Wire Wire Line 607 | 4100 1150 4200 1150 608 | Wire Wire Line 609 | 4100 1150 4100 1550 610 | Wire Wire Line 611 | 4100 1550 4200 1550 612 | Connection ~ 4100 1150 613 | Wire Wire Line 614 | 4100 1550 4100 1950 615 | Wire Wire Line 616 | 4100 1950 4200 1950 617 | Connection ~ 4100 1550 618 | Wire Wire Line 619 | 4100 1950 4100 2300 620 | Wire Wire Line 621 | 4100 2300 4200 2300 622 | Connection ~ 4100 1950 623 | Wire Wire Line 624 | 2700 950 2700 1150 625 | Wire Wire Line 626 | 2700 1150 2800 1150 627 | Connection ~ 4100 950 628 | Wire Wire Line 629 | 4100 950 4100 1150 630 | Wire Wire Line 631 | 2700 1150 2700 1550 632 | Wire Wire Line 633 | 2700 1550 2800 1550 634 | Connection ~ 2700 1150 635 | Wire Wire Line 636 | 2700 1550 2700 1950 637 | Wire Wire Line 638 | 2700 1950 2800 1950 639 | Connection ~ 2700 1550 640 | Wire Wire Line 641 | 2700 1950 2700 2300 642 | Wire Wire Line 643 | 2700 2300 2800 2300 644 | Connection ~ 2700 1950 645 | Wire Wire Line 646 | 1150 950 1150 1150 647 | Wire Wire Line 648 | 1150 1150 1250 1150 649 | Wire Wire Line 650 | 1150 1150 1150 1550 651 | Wire Wire Line 652 | 1150 1550 1250 1550 653 | Connection ~ 1150 1150 654 | Wire Wire Line 655 | 1150 1550 1150 1950 656 | Wire Wire Line 657 | 1150 1950 1250 1950 658 | Connection ~ 1150 1550 659 | Wire Wire Line 660 | 1150 1950 1150 2300 661 | Wire Wire Line 662 | 1150 2300 1250 2300 663 | Connection ~ 1150 1950 664 | Connection ~ 2700 950 665 | Wire Wire Line 666 | 2700 950 4100 950 667 | Wire Wire Line 668 | 1150 950 2700 950 669 | $Comp 670 | L power:GND #PWR0104 671 | U 1 1 5E0AB5A0 672 | P 4600 6600 673 | F 0 "#PWR0104" H 4600 6350 50 0001 C CNN 674 | F 1 "GND" H 4605 6427 50 0000 C CNN 675 | F 2 "" H 4600 6600 50 0001 C CNN 676 | F 3 "" H 4600 6600 50 0001 C CNN 677 | 1 4600 6600 678 | 1 0 0 -1 679 | $EndComp 680 | Wire Wire Line 681 | 4600 6350 4600 6600 682 | $Comp 683 | L power:+5V #PWR0105 684 | U 1 1 5E0CCB34 685 | P 5050 3650 686 | F 0 "#PWR0105" H 5050 3500 50 0001 C CNN 687 | F 1 "+5V" H 5065 3823 50 0000 C CNN 688 | F 2 "" H 5050 3650 50 0001 C CNN 689 | F 3 "" H 5050 3650 50 0001 C CNN 690 | 1 5050 3650 691 | -1 0 0 1 692 | $EndComp 693 | Wire Wire Line 694 | 5050 3450 5050 3650 695 | Connection ~ 5050 3450 696 | Wire Wire Line 697 | 5050 3450 6250 3450 698 | Wire Wire Line 699 | 3100 4700 3550 4700 700 | Wire Wire Line 701 | 3150 4800 3500 4800 702 | Wire Wire Line 703 | 5100 4300 5500 4300 704 | Wire Wire Line 705 | 5150 4500 5550 4500 706 | Wire Wire Line 707 | 5100 4400 5450 4400 708 | Wire Wire Line 709 | 5300 4800 5650 4800 710 | Wire Wire Line 711 | 3200 4900 3700 4900 712 | Wire Wire Line 713 | 5200 4600 5600 4600 714 | Wire Wire Line 715 | 5400 5000 5850 5000 716 | Wire Wire Line 717 | 2950 4400 3400 4400 718 | Wire Wire Line 719 | 3000 4500 3350 4500 720 | Wire Wire Line 721 | 3050 4600 3300 4600 722 | Wire Wire Line 723 | 3250 5000 3700 5000 724 | Wire Wire Line 725 | 1250 1250 1050 1250 726 | Wire Wire Line 727 | 1050 1250 1050 6450 728 | Wire Wire Line 729 | 1050 6450 3300 6450 730 | Wire Wire Line 731 | 3300 6450 3300 4600 732 | Connection ~ 3300 4600 733 | Wire Wire Line 734 | 3300 4600 3700 4600 735 | Wire Wire Line 736 | 1250 1650 950 1650 737 | Wire Wire Line 738 | 950 1650 950 6550 739 | Wire Wire Line 740 | 950 6550 3350 6550 741 | Wire Wire Line 742 | 3350 6550 3350 4500 743 | Connection ~ 3350 4500 744 | Wire Wire Line 745 | 3350 4500 3700 4500 746 | Wire Wire Line 747 | 1250 2050 850 2050 748 | Wire Wire Line 749 | 850 2050 850 6650 750 | Wire Wire Line 751 | 850 6650 3400 6650 752 | Wire Wire Line 753 | 3400 6650 3400 4400 754 | Connection ~ 3400 4400 755 | Wire Wire Line 756 | 3400 4400 3700 4400 757 | Wire Wire Line 758 | 1250 2400 750 2400 759 | Wire Wire Line 760 | 750 2400 750 6750 761 | Wire Wire Line 762 | 750 6750 3450 6750 763 | Wire Wire Line 764 | 3450 6750 3450 4300 765 | Connection ~ 3450 4300 766 | Wire Wire Line 767 | 3450 4300 3700 4300 768 | Wire Wire Line 769 | 2800 1250 2050 1250 770 | Wire Wire Line 771 | 2050 1250 2050 6850 772 | Wire Wire Line 773 | 2050 6850 3500 6850 774 | Wire Wire Line 775 | 3500 6850 3500 4800 776 | Connection ~ 3500 4800 777 | Wire Wire Line 778 | 3500 4800 3700 4800 779 | Wire Wire Line 780 | 2800 1650 2150 1650 781 | Wire Wire Line 782 | 2150 1650 2150 6950 783 | Wire Wire Line 784 | 2150 6950 3550 6950 785 | Wire Wire Line 786 | 3550 6950 3550 4700 787 | Connection ~ 3550 4700 788 | Wire Wire Line 789 | 3550 4700 3700 4700 790 | Wire Wire Line 791 | 2800 2050 2250 2050 792 | Wire Wire Line 793 | 2250 2050 2250 2650 794 | Wire Wire Line 795 | 2250 2650 1150 2650 796 | Wire Wire Line 797 | 1150 2650 1150 7050 798 | Wire Wire Line 799 | 1150 7050 5450 7050 800 | Wire Wire Line 801 | 5450 7050 5450 4400 802 | Connection ~ 5450 4400 803 | Wire Wire Line 804 | 5450 4400 5850 4400 805 | Wire Wire Line 806 | 2800 2400 2350 2400 807 | Wire Wire Line 808 | 2350 2400 2350 2750 809 | Wire Wire Line 810 | 2350 2750 1250 2750 811 | Wire Wire Line 812 | 1250 2750 1250 7150 813 | Wire Wire Line 814 | 1250 7150 5500 7150 815 | Wire Wire Line 816 | 5500 7150 5500 4300 817 | Connection ~ 5500 4300 818 | Wire Wire Line 819 | 5500 4300 5850 4300 820 | Wire Wire Line 821 | 4200 1250 3600 1250 822 | Wire Wire Line 823 | 3600 1250 3600 2850 824 | Wire Wire Line 825 | 3600 2850 1350 2850 826 | Wire Wire Line 827 | 1350 2850 1350 7250 828 | Wire Wire Line 829 | 1350 7250 5550 7250 830 | Wire Wire Line 831 | 5550 7250 5550 4500 832 | Connection ~ 5550 4500 833 | Wire Wire Line 834 | 5550 4500 5850 4500 835 | Wire Wire Line 836 | 4200 1650 3700 1650 837 | Wire Wire Line 838 | 3700 1650 3700 2950 839 | Wire Wire Line 840 | 3700 2950 1450 2950 841 | Wire Wire Line 842 | 1450 2950 1450 7350 843 | Wire Wire Line 844 | 1450 7350 5600 7350 845 | Wire Wire Line 846 | 5600 7350 5600 4600 847 | Connection ~ 5600 4600 848 | Wire Wire Line 849 | 5600 4600 5850 4600 850 | Wire Wire Line 851 | 4200 2050 3800 2050 852 | Wire Wire Line 853 | 3800 2050 3800 3050 854 | Wire Wire Line 855 | 3800 3050 1550 3050 856 | Wire Wire Line 857 | 1550 3050 1550 7450 858 | Wire Wire Line 859 | 1550 7450 5650 7450 860 | Wire Wire Line 861 | 5650 7450 5650 4800 862 | Connection ~ 5650 4800 863 | Wire Wire Line 864 | 5650 4800 5850 4800 865 | Wire Wire Line 866 | 4200 2400 4200 2750 867 | Wire Wire Line 868 | 4200 2750 2550 2750 869 | Wire Wire Line 870 | 2550 2750 2550 3150 871 | Wire Wire Line 872 | 2550 3150 1650 3150 873 | Wire Wire Line 874 | 1650 3150 1650 7550 875 | Wire Wire Line 876 | 1650 7550 5700 7550 877 | Wire Wire Line 878 | 5700 7550 5700 4700 879 | Connection ~ 5700 4700 880 | Wire Wire Line 881 | 5700 4700 5250 4700 882 | Wire Wire Line 883 | 5350 4900 5850 4900 884 | Wire Wire Line 885 | 6850 2500 6850 2300 886 | Connection ~ 6850 2300 887 | Wire Wire Line 888 | 6950 2200 6950 2550 889 | Wire Wire Line 890 | 6950 2550 7050 2550 891 | Wire Wire Line 892 | 6550 1300 7450 1300 893 | Wire Wire Line 894 | 6550 1300 6550 2850 895 | Wire Wire Line 896 | 6650 1400 7450 1400 897 | Wire Wire Line 898 | 6650 1400 6650 2950 899 | Wire Wire Line 900 | 6750 1500 7450 1500 901 | Wire Wire Line 902 | 6750 1500 6750 3050 903 | Wire Wire Line 904 | 6850 1600 7450 1600 905 | Wire Wire Line 906 | 6850 1600 6850 2300 907 | Wire Wire Line 908 | 6950 2200 6950 1700 909 | Wire Wire Line 910 | 6950 1700 7450 1700 911 | Connection ~ 6950 2200 912 | $EndSCHEMATC 913 | -------------------------------------------------------------------------------- /cad/sym-lib-table: -------------------------------------------------------------------------------- 1 | (sym_lib_table 2 | (lib (name stoerbert)(type Legacy)(uri ${KIPRJMOD}/stoerbert.lib)(options "")(descr "")) 3 | ) 4 | -------------------------------------------------------------------------------- /commands.h: -------------------------------------------------------------------------------- 1 | #ifndef COMMANDS_H 2 | #define COMMANDS_H 3 | 4 | // Command to character mappings 5 | const char COMMAND0 = '0'; 6 | const char COMMAND1 = '1'; 7 | const char COMMAND2 = '2'; 8 | const char COMMAND3 = '3'; 9 | const char COMMAND4 = '4'; 10 | const char COMMAND5 = '5'; 11 | const char COMMAND6 = '6'; 12 | const char COMMAND7 = '7'; 13 | const char COMMAND8 = '8'; 14 | const char COMMAND9 = '9'; 15 | const char COMMAND_PLAY_PAUSE = 'p'; 16 | const char COMMAND_PREVIOUS = 'b'; 17 | const char COMMAND_NEXT = 'f'; 18 | const char COMMAND_GOD_MODE = 'g'; 19 | const char COMMAND_INCREASE_VOLUME = '+'; 20 | const char COMMAND_DECREASE_VOLUME = '-'; 21 | 22 | #endif 23 | -------------------------------------------------------------------------------- /debug.h: -------------------------------------------------------------------------------- 1 | #define DEBUG 2 | #ifdef DEBUG 3 | #define DPRINTLN(x) Serial.println(x) 4 | #define DPRINTBINLN(x) Serial.println(x, BIN) 5 | #define DPRINTLNF(x) Serial.println(F(x)) 6 | #define DPRINT(x) Serial.print(x) 7 | #define DPRINTBIN(x) Serial.print(x, BIN) 8 | #define DPRINTF(x) Serial.print(F(x)) 9 | #else 10 | #define DPRINTLN(x) 11 | #define DPRINTBINLN(x) 12 | #define DPRINTLNF(x) 13 | #define DPRINT(x) 14 | #define DPRINTBIN(x) 15 | #define DPRINTF(x) 16 | #endif 17 | -------------------------------------------------------------------------------- /pins.h: -------------------------------------------------------------------------------- 1 | #ifndef PINS_H 2 | #define PINS_H 3 | 4 | #define PIN_VS1053_SHIELD_RESET -1 // VS1053 reset pin (unused!) 5 | #define PIN_VS1053_SHIELD_CS 7 // VS1053 chip select pin (output) 6 | #define PIN_VS1053_SHIELD_DCS 6 // VS1053 Data/command select pin (output) 7 | #define PIN_VS1053_CARDCS 4 // Card chip select pin 8 | #define PIN_VS1053_DREQ 3 // VS1053 Data request, ideally an Interrupt pin 9 | #define PIN_VOLUME A0 // Volume knob pin 10 | #define PIN_SR_DATA 2 // Shift register data pin 11 | #define PIN_SR_CLOCK 5 // Shift register clock pin 12 | #define PIN_SR_LATCH 8 // Shift register latch pin 13 | 14 | #endif 15 | -------------------------------------------------------------------------------- /player.cpp: -------------------------------------------------------------------------------- 1 | #include "player.h" 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | 13 | #include "plugin.h" 14 | #include "pins.h" 15 | #include "debug.h" 16 | #include "power.h" 17 | #include "commands.h" 18 | 19 | extern const unsigned short PROGMEM plugin[]; 20 | 21 | player p = {{}, "k01", 0, 0, false, 0, false, 1, 50, false, 0}; 22 | 23 | Adafruit_VS1053_FilePlayer musicPlayer = Adafruit_VS1053_FilePlayer( 24 | PIN_VS1053_SHIELD_RESET, 25 | PIN_VS1053_SHIELD_CS, 26 | PIN_VS1053_SHIELD_DCS, 27 | PIN_VS1053_DREQ, 28 | PIN_VS1053_CARDCS 29 | ); 30 | 31 | Adafruit_VS1053 vs1053 = Adafruit_VS1053( 32 | PIN_VS1053_SHIELD_RESET, 33 | PIN_VS1053_SHIELD_CS, 34 | PIN_VS1053_SHIELD_DCS, 35 | PIN_VS1053_DREQ 36 | ); 37 | 38 | // ################################## 39 | // File handling 40 | // ################################## 41 | 42 | // Detect sequence in album based on filename 43 | int detectFileSequence(char *fileName) { 44 | char s[3]; 45 | s[0] = fileName[0]; 46 | s[1] = fileName[1]; 47 | return atoi(s) - 1; 48 | } 49 | 50 | // Load album files 51 | // Directory and file structure needs to be: 52 | // /[1-9]/[01-99].mp3 53 | void loadAlbum() { 54 | char folder[6]; 55 | sprintf(folder, "/%s/", p.currentAlbum); 56 | 57 | DPRINTF("Loading files from directory: "); 58 | DPRINTLN(folder); 59 | 60 | File dir = SD.open(folder); 61 | 62 | // Process diretories in / 63 | uint8_t i = 0; 64 | while (true) { 65 | File entry = dir.openNextFile(); 66 | 67 | if (!entry) { 68 | break; 69 | } 70 | 71 | // Ignore everything but files 72 | if (entry.isDirectory()) { 73 | continue; 74 | } 75 | 76 | DPRINTF("Found file: "); 77 | DPRINTLN(entry.name()); 78 | 79 | if (!musicPlayer.isMP3File(entry.name())) { 80 | DPRINTLNF("Not a MP3 skipping"); 81 | continue; 82 | } 83 | 84 | int sequence = detectFileSequence(entry.name()); 85 | DPRINTF("Adding file to position: "); 86 | DPRINTLN(sequence); 87 | 88 | free(p.album[sequence]); 89 | p.album[sequence] = malloc(strlen(entry.name()) + 1); 90 | strcpy(p.album[sequence], entry.name()); 91 | i++; 92 | 93 | entry.close(); 94 | } 95 | 96 | p.currentAlbumTrackCount = i; 97 | } 98 | 99 | // ################################## 100 | // VS1053 controls 101 | // ################################## 102 | 103 | // Set volume 104 | void setVolume() { 105 | if (p.volume > VOLUME_MIN) { 106 | p.volume = VOLUME_MIN; 107 | } 108 | 109 | //DPRINTF("Setting volume to: "); 110 | //DPRINTLN(p.volume); 111 | musicPlayer.setVolume(p.volume, p.volume); 112 | } 113 | 114 | // Increase volume 115 | void increaseVolume() { 116 | if (p.volume - VOLUME_STEP < 0) { 117 | p.volume = 0; 118 | } else { 119 | p.volume -= VOLUME_STEP; 120 | } 121 | setVolume(); 122 | } 123 | 124 | // Decrease volume 125 | void decreaseVolume() { 126 | if (p.volume + VOLUME_STEP > VOLUME_MIN) { 127 | p.volume = VOLUME_MIN; 128 | } else { 129 | p.volume += VOLUME_STEP; 130 | } 131 | setVolume(); 132 | } 133 | 134 | // ################################## 135 | // EEPROM state saving 136 | // ################################## 137 | 138 | // Save current player state to EEPROM 139 | // We need to save 4 bytes to EEPROM 140 | // Bytes 1-3: Current album name (i.e "k01") 141 | // Byte 4: Current track 142 | void saveState() { 143 | uint8_t i = 0; 144 | 145 | // Save current album 146 | DPRINTF("Saving album to EEPROM: "); 147 | for (; i < FOLDER_NAME_LENGTH - 1; i++) { 148 | EEPROM.write(i, p.currentAlbum[i]); 149 | DPRINT(i); 150 | DPRINTF("->"); 151 | DPRINT(p.currentAlbum[i]); 152 | DPRINTF(" "); 153 | } 154 | DPRINTLNF(""); 155 | 156 | // Save the current track 157 | EEPROM.write(i, p.currentTrack); 158 | DPRINTF("Saving track to EEPROM: "); 159 | DPRINT(i); 160 | DPRINTF("->"); 161 | DPRINTLN(p.currentTrack); 162 | } 163 | 164 | // Load current player state from EEPROM 165 | bool loadState() { 166 | bool valid = false; 167 | uint8_t i = 0; 168 | 169 | // Load current album 170 | char currentAlbum[FOLDER_NAME_LENGTH]; 171 | for (; i < FOLDER_NAME_LENGTH - 1; i++) { 172 | currentAlbum[i] = EEPROM.read(i); 173 | if (currentAlbum[i] != 0) { 174 | valid = true; 175 | } 176 | } 177 | currentAlbum[i] = '\0'; 178 | 179 | if (!valid) { 180 | return valid; 181 | } 182 | 183 | strcpy(p.currentAlbum, currentAlbum); 184 | 185 | DPRINTF("Loaded album from EEPROM: "); 186 | DPRINTLN(p.currentAlbum); 187 | 188 | // Load the current track 189 | p.currentTrack = EEPROM.read(i); 190 | 191 | DPRINTF("Loaded track from EEPROM: "); 192 | DPRINTLN(p.currentTrack); 193 | 194 | return valid; 195 | } 196 | 197 | // Clear player state from EEPROM 198 | void clearState() { 199 | for (int i = 0; i < FOLDER_NAME_LENGTH + 1; i++) { 200 | EEPROM.write(i, 0); 201 | } 202 | } 203 | 204 | // ################################## 205 | // Reset 206 | // ################################## 207 | // 208 | // Soft reset 209 | void resetPlayer() { 210 | DPRINTLNF("Failure state reached resetting"); 211 | clearState(); 212 | reset(); 213 | } 214 | 215 | // ################################## 216 | // Power reminder 217 | // ################################## 218 | 219 | // Set when to play the next power reminder 220 | void setPowerReminder() { 221 | p.powerReminderDelay = millis() + POWER_REMINDER_PERIOD; 222 | } 223 | 224 | // Play the power reminder 225 | void powerReminder() { 226 | if (p.isPlaying || p.powerReminderDelay == 0) { 227 | setPowerReminder(); 228 | return; 229 | } 230 | 231 | if (p.powerReminderDelay > millis()) { 232 | return; 233 | } 234 | 235 | DPRINTLNF("Playing power reminder"); 236 | 237 | for (uint8_t i = 0; i < 3; i++) { 238 | musicPlayer.sineTest(1000, 500); 239 | musicPlayer.stopPlaying(); 240 | delay(500); 241 | } 242 | 243 | setPowerReminder(); 244 | } 245 | 246 | // ################################## 247 | // Player controls 248 | // ################################## 249 | 250 | // Reset album playback 251 | void resetPlayback() { 252 | p.isPlaying = false; 253 | musicPlayer.stopPlaying(); 254 | p.currentTrack = 0; 255 | clearState(); 256 | } 257 | 258 | // Play individual file 259 | void playFile() { 260 | char path[99]; 261 | sprintf(path, "/%s/%s", p.currentAlbum, p.album[p.currentTrack]); 262 | 263 | musicPlayer.stopPlaying(); 264 | 265 | if (!SD.exists(path)) { 266 | DPRINTF("File missing: "); 267 | DPRINTLN(path); 268 | resetPlayer(); 269 | resetPlayback(); 270 | return; 271 | } 272 | 273 | saveState(); 274 | 275 | DPRINTF("Playing file "); 276 | DPRINTLN(path); 277 | 278 | p.isPlaying = true; 279 | musicPlayer.startPlayingFile(path); 280 | } 281 | 282 | // Toggle Play/Pause 283 | void togglePlayPause() { 284 | if (musicPlayer.paused()) { 285 | musicPlayer.pausePlaying(false); 286 | } else { 287 | musicPlayer.pausePlaying(true); 288 | } 289 | } 290 | 291 | // Skip forward 292 | void playNextTrack() { 293 | if (p.currentTrack == p.currentAlbumTrackCount - 1) { 294 | return; 295 | } 296 | 297 | p.currentTrack++; 298 | playFile(); 299 | } 300 | 301 | // Skip backward 302 | void playPreviousTrack() { 303 | if (p.currentTrack == 0) { 304 | return; 305 | } 306 | 307 | p.currentTrack--; 308 | playFile(); 309 | } 310 | 311 | // Sets the current album 312 | bool setAlbum(char c) { 313 | if (p.isGodMode) { 314 | // God mode allows for 99 albums 315 | // g01 - g99 316 | // alternate which index to set 317 | // album select in god mode requires two key presses 318 | p.currentAlbum[p.godModeAlbumIndex] = c; 319 | if (p.godModeAlbumIndex == 1) { 320 | p.godModeAlbumIndex++; 321 | return false; 322 | } else { 323 | p.godModeAlbumIndex--; 324 | return true; 325 | } 326 | } else { 327 | // Regular mode only has 9 albums 328 | // k01 - k09 329 | // so only 2nd index needs to be changed 330 | p.currentAlbum[2] = c; 331 | return true; 332 | } 333 | } 334 | 335 | // Resumes playback after power cycle 336 | void resumePlayback() { 337 | if (p.hasResumed) { 338 | return; 339 | } 340 | p.hasResumed = true; 341 | 342 | if (loadState()) { 343 | DPRINTLNF("Resuming playback"); 344 | if (p.currentAlbum[0] == 'g') { 345 | p.isGodMode = true; 346 | } 347 | loadAlbum(); 348 | playFile(); 349 | } 350 | } 351 | 352 | // Play album 353 | void playAlbum() { 354 | resetPlayback(); 355 | 356 | loadAlbum(); 357 | 358 | if (p.currentAlbumTrackCount == 0) { 359 | DPRINTLNF("No tracks found"); 360 | resetPlayer(); 361 | return; 362 | } 363 | 364 | DPRINTF("Playing album "); 365 | DPRINTLN(p.currentAlbum); 366 | 367 | playFile(); 368 | } 369 | 370 | // Advance to the next track 371 | void advanceTrack() 372 | { 373 | // Don't do anything if we are not playing 374 | if (!p.isPlaying) { 375 | return; 376 | } 377 | 378 | // Exit if we are currently playing or paused 379 | if (musicPlayer.playingMusic || musicPlayer.paused()) { 380 | return; 381 | } 382 | 383 | // Exit if we reached the last track 384 | if (p.currentTrack == p.currentAlbumTrackCount - 1) { 385 | DPRINTLNF("End of album reached"); 386 | resetPlayback(); 387 | return; 388 | } 389 | 390 | playNextTrack(); 391 | } 392 | 393 | // Set up player 394 | void setupPlayer() { 395 | if (!musicPlayer.begin()) { 396 | DPRINTLNF("Couldn't find VS1053"); 397 | while (1); 398 | } 399 | DPRINTLNF("VS1053 found"); 400 | 401 | if (!SD.begin(PIN_VS1053_CARDCS)) { 402 | DPRINTLNF("SD failed, or not present"); 403 | while (1); 404 | } 405 | 406 | musicPlayer.useInterrupt(VS1053_FILEPLAYER_PIN_INT); 407 | 408 | // Set up volume knob 409 | pinMode(PIN_VOLUME, INPUT); 410 | setVolume(); 411 | 412 | // Load patches 413 | vs1053.applyPatch(plugin, sizeof(plugin)/sizeof(plugin[0])); 414 | delay(100); 415 | 416 | // Enable mono mode 417 | vs1053.sciWrite(VS1053_REG_WRAMADDR, 0x1e09); 418 | vs1053.sciWrite(VS1053_REG_WRAM, 0x0001); 419 | 420 | // Disable ADC 421 | vs1053.sciWrite(VS1053_REG_WRAMADDR, 0xC01E); 422 | vs1053.sciWrite(VS1053_REG_WRAM, 0x0000); 423 | } 424 | 425 | // Handle player state 426 | void handlePlayer() { 427 | // Handle volume pot 428 | p.volume = map(analogRead(PIN_VOLUME), 0, 1023, 0, VOLUME_MIN); 429 | setVolume(); 430 | 431 | resumePlayback(); 432 | powerReminder(); 433 | advanceTrack(); 434 | } 435 | 436 | // ################################## 437 | // Handles the god mode 438 | // Sequence: prev - play/pause - play/pause - next 439 | // ################################## 440 | 441 | // Toggles god mode 442 | void toggleGodMode() { 443 | resetPlayback(); 444 | 445 | musicPlayer.sineTest(150, 500); 446 | musicPlayer.stopPlaying(); 447 | 448 | p.isGodMode = !p.isGodMode; 449 | 450 | if (p.isGodMode) { 451 | DPRINTLNF("Godmode enabled"); 452 | p.currentAlbum[0] = 'g'; 453 | } else { 454 | DPRINTLNF("Godmode disabled"); 455 | p.currentAlbum[0] = 'k'; 456 | } 457 | } 458 | 459 | // Detects god mode sequence 460 | bool detectGodMode(char c) { 461 | if (p.godModeFlag == 0 && c == COMMAND_PREVIOUS) { 462 | p.godModeFlag++; 463 | return false; 464 | } else if (p.godModeFlag == 1 && c == COMMAND_PLAY_PAUSE) { 465 | p.godModeFlag++; 466 | return false; 467 | } else if (p.godModeFlag == 2 && c == COMMAND_PLAY_PAUSE) { 468 | p.godModeFlag++; 469 | return false; 470 | } else if (p.godModeFlag == 3 && c == COMMAND_NEXT) { 471 | p.godModeFlag = 0; 472 | toggleGodMode(); 473 | return true; 474 | } 475 | 476 | p.godModeFlag = 0; 477 | return false; 478 | } 479 | 480 | // Wether or not god mode is enabled 481 | bool isGodMode() { 482 | return p.isGodMode; 483 | } 484 | -------------------------------------------------------------------------------- /player.h: -------------------------------------------------------------------------------- 1 | #ifndef PLAYER_H 2 | #define PLAYER_H 3 | 4 | #include 5 | 6 | const uint8_t VOLUME_STEP = 10; 7 | const uint8_t VOLUME_MIN = 75; 8 | const uint8_t MAX_TRACKS = 30; 9 | 10 | const uint8_t FOLDER_NAME_LENGTH = 4; 11 | 12 | const uint32_t POWER_REMINDER_PERIOD = 300000; 13 | 14 | // Player holds current player state 15 | struct player { 16 | char *album[MAX_TRACKS]; // Album track buffer 17 | char currentAlbum[FOLDER_NAME_LENGTH]; // Currently selected album 18 | uint8_t currentAlbumTrackCount; // Track count for currently selected album 19 | uint8_t currentTrack; // Current track 20 | bool isPlaying; // Whether or not there is currently an album playing 21 | uint8_t godModeFlag; // God detction mode flag 22 | bool isGodMode; // Whether or not god mode is enabled 23 | uint8_t godModeAlbumIndex; // Which index to set when selecting the album in god mode 24 | uint8_t volume; // Current Volume level 25 | bool hasResumed; // Whether or not the player has tried to resume 26 | uint32_t powerReminderDelay; // Time when to run the next power reminder 27 | }; 28 | 29 | void setupPlayer(); 30 | void handlePlayer(); 31 | 32 | void increaseVolume(); 33 | void decreaseVolume(); 34 | void togglePlayPause(); 35 | void playNextTrack(); 36 | void playPreviousTrack(); 37 | bool setAlbum(char c); 38 | void playAlbum(); 39 | bool detectGodMode(char c); 40 | void toggleGodMode(); 41 | bool isGodMode(); 42 | 43 | #endif 44 | -------------------------------------------------------------------------------- /plugin.h: -------------------------------------------------------------------------------- 1 | // VS1053 patch set 2 | // see: 3 | // http://www.vlsi.fi/en/support/software/vs10xxpatches.html 4 | 5 | #ifndef PLUGIN_H 6 | #define PLUGIN_H 7 | 8 | #include 9 | 10 | const unsigned short PROGMEM plugin[] = { 11 | 0x0007,0x0001, /*copy 1*/ 12 | 0x8050, 13 | 0x0006,0x001e, /*copy 30*/ 14 | 0x2a00,0xc000,0x3e12,0xb817,0x3e14,0xf812,0x3e01,0xb811, 15 | 0x0007,0x9717,0x0020,0xffd2,0x0030,0x11d1,0x3111,0x8024, 16 | 0x3704,0xc024,0x3b81,0x8024,0x3101,0x8024,0x3b81,0x8024, 17 | 0x3f04,0xc024,0x2808,0x4800,0x36f1,0x9811, 18 | 0x0007,0x0001, /*copy 1*/ 19 | 0x8060, 20 | 0x0006,0x0532, /*copy 1330*/ 21 | 0xf400,0x4095,0x0000,0x02c2,0x6124,0x0024,0x0000,0x0024, 22 | 0x2800,0x1ac5,0x4192,0x4542,0x0000,0x0041,0x2000,0x0015, 23 | 0x0030,0x0317,0x2000,0x0000,0x3f00,0x4024,0x2000,0x0000, 24 | 0x0000,0x0000,0x3e12,0x3800,0x3e00,0xb804,0x0030,0x0015, 25 | 0x0007,0x8257,0x3700,0x984c,0xf224,0x1444,0xf224,0x0024, 26 | 0x0008,0x0002,0x2910,0x0181,0x0000,0x1bc8,0xb428,0x1402, 27 | 0x0000,0x8004,0x2910,0x0195,0x0000,0x1bc8,0xb428,0x0024, 28 | 0x0006,0x0095,0x2800,0x2945,0x3e13,0x780e,0x3e11,0x7803, 29 | 0x3e13,0xf806,0x3e11,0xf801,0x3510,0xb808,0x003f,0xe004, 30 | 0xfec4,0x3800,0x48be,0x17c3,0xfec6,0x41c2,0x48be,0x4497, 31 | 0x4090,0x1c46,0xf06c,0x0024,0x2400,0x2580,0x6090,0x41c3, 32 | 0x6628,0x1c47,0x0000,0x0024,0x2800,0x2449,0xf07e,0x0024, 33 | 0xf400,0x4182,0x673a,0x1c46,0x0000,0x0024,0x2800,0x2589, 34 | 0xf06c,0x0024,0xf400,0x41c3,0x0000,0x0024,0x4224,0x3442, 35 | 0x2900,0xb740,0x4336,0x37c3,0x0000,0x1805,0x2900,0xb740, 36 | 0x4508,0x40c2,0x450a,0x9808,0x0000,0x0207,0xa478,0x1bc0, 37 | 0xc45a,0x1807,0x0030,0x03d5,0x3d01,0x5bc1,0x36f3,0xd806, 38 | 0x3601,0x5803,0x36f3,0x0024,0x36f3,0x580e,0x0007,0x8257, 39 | 0x0000,0x6004,0x3730,0x8024,0xb244,0x1c04,0xd428,0x3c02, 40 | 0x0006,0xc717,0x2800,0x2d05,0x4284,0x0024,0x3613,0x3c02, 41 | 0x0006,0xc357,0x2901,0x6b00,0x3e11,0x5c05,0x4284,0x1bc5, 42 | 0x0000,0x0024,0x2800,0x2fc5,0x0000,0x0024,0x3613,0x0024, 43 | 0x3e10,0x3813,0x3e14,0x8024,0x3e04,0x8024,0x2900,0x4880, 44 | 0x0006,0x02d3,0x36e3,0x0024,0x3009,0x1bd3,0x0007,0x8257, 45 | 0x3700,0x8024,0xf224,0x0024,0x0000,0x0024,0x2800,0x31d1, 46 | 0x3600,0x9844,0x2900,0x3780,0x0000,0x3248,0x2911,0xf140, 47 | 0x0000,0x0024,0x0030,0x0057,0x3700,0x0024,0xf200,0x4595, 48 | 0x0fff,0xfe02,0xa024,0x164c,0x8000,0x17cc,0x3f00,0x0024, 49 | 0x3500,0x0024,0x0021,0x6d82,0xd024,0x44c0,0x0006,0xa402, 50 | 0x2800,0x3695,0xd024,0x0024,0x0000,0x0000,0x2800,0x3695, 51 | 0x000b,0x6d57,0x3009,0x3c00,0x36f0,0x8024,0x36f2,0x1800, 52 | 0x2000,0x0000,0x0000,0x0024,0x3e14,0x7810,0x3e13,0xb80d, 53 | 0x3e13,0xf80a,0x3e10,0xb803,0x3e11,0x3805,0x3e11,0xb807, 54 | 0x3e14,0xf801,0x3e15,0x3815,0x0001,0x000a,0x0006,0xc4d7, 55 | 0xbf8e,0x9c42,0x3e01,0x9c03,0x0006,0xa017,0x0023,0xffd1, 56 | 0x0007,0x8250,0x0fff,0xfd85,0x3001,0x0024,0xa45a,0x4494, 57 | 0x0000,0x0093,0x2800,0x3dd1,0xf25a,0x104c,0x34f3,0x0024, 58 | 0x2800,0x3dd1,0x0000,0x0024,0x3413,0x084c,0x0000,0x0095, 59 | 0x3281,0xf806,0x4091,0x4d64,0x2400,0x4000,0x4efa,0x9c10, 60 | 0xf1eb,0x6061,0xfe55,0x2f66,0x5653,0x4d64,0x48b2,0xa201, 61 | 0x4efa,0xa201,0x36f3,0x3c10,0x36f5,0x1815,0x36f4,0xd801, 62 | 0x36f1,0x9807,0x36f1,0x1805,0x36f0,0x9803,0x36f3,0xd80a, 63 | 0x36f3,0x980d,0x2000,0x0000,0x36f4,0x5810,0x36f3,0x0024, 64 | 0x3009,0x3848,0x3e14,0x3811,0x3e00,0x0024,0x0000,0x4000, 65 | 0x0001,0x0010,0x2915,0x94c0,0x0001,0xcc11,0x36f0,0x0024, 66 | 0x2927,0x9e40,0x3604,0x1811,0x3613,0x0024,0x3e14,0x3811, 67 | 0x3e00,0x0024,0x0000,0x4000,0x0001,0x0010,0x2915,0x94c0, 68 | 0x0001,0xcc11,0x36f0,0x0024,0x36f4,0x1811,0x3009,0x1808, 69 | 0x2000,0x0000,0x0000,0x190d,0x3613,0x0024,0x3e22,0xb815, 70 | 0x3e05,0xb814,0x3615,0x0024,0x0000,0x800a,0x3e13,0x7801, 71 | 0x3e10,0xb803,0x3e11,0x3805,0x3e11,0xb807,0x3e14,0x3811, 72 | 0x3e14,0xb813,0x3e03,0xf80e,0xb488,0x44d5,0x3543,0x134c, 73 | 0x34e5,0xc024,0x3524,0x8024,0x35a4,0xc024,0x3710,0x8a0c, 74 | 0x3540,0x4a0c,0x3d44,0x8024,0x3a10,0x8024,0x3590,0x0024, 75 | 0x4010,0x15c1,0x6010,0x3400,0x3710,0x8024,0x2800,0x5444, 76 | 0x3af0,0x8024,0x3df0,0x0024,0x3591,0x4024,0x3530,0x4024, 77 | 0x4192,0x4050,0x6100,0x1482,0x4020,0x1753,0xbf8e,0x1582, 78 | 0x4294,0x4011,0xbd86,0x408e,0x2400,0x524e,0xfe6d,0x2819, 79 | 0x520e,0x0a00,0x5207,0x2819,0x4fbe,0x0024,0xad56,0x904c, 80 | 0xaf5e,0x1010,0xf7d4,0x0024,0xf7fc,0x2042,0x6498,0x2046, 81 | 0x3cf4,0x0024,0x3400,0x170c,0x4090,0x1492,0x35a4,0xc024, 82 | 0x2800,0x4cd5,0x3c00,0x0024,0x4480,0x914c,0x36f3,0xd80e, 83 | 0x36f4,0x9813,0x36f4,0x1811,0x36f1,0x9807,0x36f1,0x1805, 84 | 0x36f0,0x9803,0x36f3,0x5801,0x3405,0x9014,0x36e3,0x0024, 85 | 0x2000,0x0000,0x36f2,0x9815,0x2814,0x9c91,0x0000,0x004d, 86 | 0x2814,0x9940,0x003f,0x0013,0x3613,0x0024,0x3e12,0xb817, 87 | 0x3e12,0x3815,0x3e05,0xb814,0x3655,0x0024,0x0000,0x800a, 88 | 0x3e10,0x3801,0x3e10,0xb803,0x3e11,0x3805,0x3e11,0xb810, 89 | 0x3e13,0xf80e,0x3e03,0x534c,0x3450,0x4024,0x6814,0x0024, 90 | 0x0000,0x0024,0x2800,0x7358,0x4192,0x0024,0x2400,0x7301, 91 | 0x0000,0x0024,0xf400,0x4450,0x2938,0x1880,0x3613,0x0024, 92 | 0x3c10,0x050c,0x3c10,0x4024,0x3c90,0x8024,0x34f3,0x0024, 93 | 0x3464,0x0024,0x3011,0x0c40,0x3011,0x4c41,0x2915,0x9900, 94 | 0x3011,0x8f82,0x3411,0x2c40,0x3411,0x6c41,0x2915,0xa580, 95 | 0x34e1,0xaf82,0x3009,0x3040,0x4c8a,0x0040,0x3010,0x7041, 96 | 0x2800,0x6594,0x3010,0xb382,0x3411,0x0024,0x3411,0x6c44, 97 | 0x34e1,0xac45,0xbe8a,0xaf86,0x0fe0,0x0006,0x3009,0x3044, 98 | 0x3009,0x3045,0x3009,0x3386,0x3411,0x0024,0x3411,0x4ccc, 99 | 0x2915,0x9900,0x34e1,0x984c,0x3e10,0x7800,0x3009,0x3802, 100 | 0x3011,0x0c40,0x3011,0x4c41,0x2915,0x9900,0x30e1,0x8f82, 101 | 0x3009,0x1bc6,0x2915,0xa940,0x36f1,0x5804,0x3011,0x2c40, 102 | 0x3011,0x6c41,0x30b1,0xac42,0x3009,0x0c40,0x3009,0x0c41, 103 | 0x2915,0x9900,0x3613,0x0f82,0x3e10,0x7800,0x3009,0x3802, 104 | 0x3010,0x1044,0x3010,0x5045,0x2915,0x9900,0x3010,0x9386, 105 | 0x3009,0x1bc6,0x2915,0xa940,0x36f1,0x5804,0xf1ca,0xac40, 106 | 0x4ce2,0xac41,0x3009,0x2ec2,0x2800,0x6e52,0x629c,0x0024, 107 | 0xf1c2,0x4182,0x3c10,0x0c44,0x3c10,0x4c45,0x2915,0x4780, 108 | 0x3ce0,0x8f86,0x4080,0x0024,0x0000,0x0024,0x2800,0x7315, 109 | 0x0020,0x0000,0x3411,0x0c40,0x3411,0x4c41,0x2915,0xb780, 110 | 0x34e1,0x8f82,0x0000,0x03c3,0x4234,0x0024,0x4c82,0x0024, 111 | 0x0000,0x0024,0x2915,0x4355,0x0000,0x7308,0x0000,0x0000, 112 | 0x3a10,0x0d8c,0x36f3,0x538c,0x36f3,0xd80e,0x36f1,0x9810, 113 | 0x36f1,0x1805,0x36f0,0x9803,0x36f0,0x1801,0x3405,0x9014, 114 | 0x36f3,0x0024,0x36f2,0x1815,0x2000,0x0000,0x36f2,0x9817, 115 | 0x3613,0x0024,0x3e12,0xb817,0x3e12,0x3815,0x3e05,0xb814, 116 | 0x3645,0x0024,0x0000,0x800a,0x3e10,0x3801,0x3e10,0xb803, 117 | 0x3e11,0x3805,0x3e11,0xb810,0x3e13,0xf80e,0x3e03,0x534c, 118 | 0x3440,0x4024,0x4192,0x0024,0x2400,0x8f01,0x0000,0x0024, 119 | 0xb68c,0x4450,0x2938,0x1880,0x3613,0x050c,0x3c10,0x0c40, 120 | 0x3c10,0x4c41,0x3ce0,0x8f82,0x003c,0x2584,0x2915,0x9900, 121 | 0x0018,0x8245,0x3411,0x2c40,0x3411,0x6c41,0x2915,0xa580, 122 | 0x34e1,0xac42,0x4c8a,0xb040,0x3009,0x3041,0x2800,0x8014, 123 | 0x3009,0x3382,0x3411,0x0f4c,0x3411,0x6c44,0x34e1,0xac45, 124 | 0xbe8a,0xac46,0x499c,0xb044,0xf38c,0xb045,0x3009,0x3386, 125 | 0x3009,0x0c40,0x3009,0x0c41,0xf1ca,0x8f82,0x4ce2,0x1044, 126 | 0x3411,0x4024,0x2800,0x8252,0x4294,0x1386,0x6294,0x0024, 127 | 0xf1c2,0x0024,0x4e8a,0x4195,0x35e3,0x0024,0x2915,0xa955, 128 | 0xf400,0x4546,0x3009,0x2c40,0x3009,0x2c41,0x3009,0x2c42, 129 | 0x3009,0x0c40,0x3009,0x0c41,0xf1ca,0x8f82,0x4ce2,0x9044, 130 | 0x3009,0x1045,0x2800,0x86c5,0x3009,0x1386,0x2800,0x86d2, 131 | 0x4294,0x0024,0x6294,0x0024,0xf1c2,0x0024,0x4e8a,0x4195, 132 | 0x35e3,0x0024,0x2915,0xa955,0xf400,0x4546,0xf1ca,0xac40, 133 | 0x4ce2,0xac41,0x3009,0x2ec2,0x2800,0x8952,0x629c,0x0024, 134 | 0xf1c2,0x4182,0x3c20,0x0c84,0x3cf0,0x8fc6,0x6264,0x4017, 135 | 0x3cf0,0x4fc5,0x2800,0x8f08,0x0020,0x0000,0x2800,0x8c59, 136 | 0xf400,0x45c0,0x6cea,0x0024,0x0000,0x0024,0x2800,0x8f09, 137 | 0x0020,0x0000,0x3411,0x0c40,0x3411,0x4c41,0x2915,0xb780, 138 | 0x34e1,0x8f82,0x0000,0x03c3,0x4234,0x0024,0x4c82,0x0024, 139 | 0x0000,0x0024,0x2915,0x4355,0x0000,0x8f08,0x0000,0x0000, 140 | 0x3a10,0x0d8c,0x36f3,0x53cc,0x36f3,0xd80e,0x36f1,0x9810, 141 | 0x36f1,0x1805,0x36f0,0x9803,0x36f0,0x1801,0x3405,0x9014, 142 | 0x36f3,0x0024,0x36f2,0x1815,0x2000,0x0000,0x36f2,0x9817, 143 | 0xf400,0x4595,0x35e3,0x3840,0x3e13,0xf80e,0x3e13,0x7808, 144 | 0x3510,0x0024,0x3e10,0x0024,0x3510,0x0024,0x3e10,0x0024, 145 | 0x3510,0x0024,0x3e00,0x0024,0x0001,0xb6ce,0x002b,0xb30f, 146 | 0x292d,0xa940,0x0000,0x004d,0x36d3,0x0024,0x36f3,0x5808, 147 | 0x36f3,0xd80e,0x2000,0x0000,0x3009,0x1800,0xf400,0x4595, 148 | 0x35f3,0x3840,0x3e13,0xf80e,0x3e13,0x7808,0x3510,0x0024, 149 | 0x3e10,0x0024,0x3510,0x0024,0x3e00,0x0024,0x0000,0x9b0e, 150 | 0x0028,0x088f,0x2927,0xff80,0x0000,0x008d,0x36e3,0x0024, 151 | 0x36f3,0x5808,0x36f3,0xd80e,0x2000,0x0000,0x3009,0x1800, 152 | 0x0028,0x2b0f,0x0000,0xa08e,0x2828,0x0b15,0x0007,0x2605, 153 | 0x3613,0x0001,0x3e14,0x3811,0x0001,0x0011,0x0001,0xcc10, 154 | 0x2915,0x94c0,0x0000,0x4000,0x3e10,0x534c,0x3430,0xc024, 155 | 0x3e10,0xc024,0x2927,0xc4c0,0x3e01,0x0024,0x36d3,0x0024, 156 | 0x0001,0x0011,0x0001,0xcc10,0x2915,0x94c0,0x0000,0x4000, 157 | 0x2828,0x0b00,0x36f4,0x1811,0x3e00,0x0024,0x2800,0xa480, 158 | 0x0028,0x2bc8,0x3605,0x7840,0x3e13,0x780e,0x3e13,0xf808, 159 | 0x3e05,0x4024,0x0000,0x42ce,0x0027,0x9e0f,0x2922,0xa6c0, 160 | 0x0000,0x190d,0x36f3,0x0024,0x36f3,0xd808,0x36f3,0x580e, 161 | 0x2000,0x0000,0x3009,0x1800,0xf400,0x4595,0x35d3,0x3840, 162 | 0x3e13,0xf80e,0x3e13,0x7808,0x3510,0x0024,0x3e10,0x0024, 163 | 0x3510,0x0024,0x3e10,0x0024,0x3510,0x0024,0x3e10,0x0024, 164 | 0x3510,0x0024,0x3e00,0x0024,0x0000,0xa9ce,0x0025,0xf54f, 165 | 0x2925,0xe580,0x0000,0x004d,0x36c3,0x0024,0x36f3,0x5808, 166 | 0x36f3,0xd80e,0x2000,0x0000,0x3009,0x1800,0x3433,0x0000, 167 | 0x6890,0x3040,0x3cc0,0xa000,0x0008,0x6201,0x000d,0x3500, 168 | 0x3613,0x110c,0x3e10,0x0024,0x3e10,0x4024,0x34c0,0x8024, 169 | 0x2900,0x9200,0x3e00,0x8024,0x0026,0x0a4f,0x0000,0xad8e, 170 | 0x2825,0xf880,0x0000,0x07cd,0x0000,0x0801,0x6012,0x0024, 171 | 0x0000,0x0024,0x2826,0x0a85,0x0000,0x0024,0x2800,0xaa80, 172 | 0x0000,0x0024,0x3605,0x7840,0x3e13,0x780e,0x3e13,0xf808, 173 | 0x3e05,0x4024,0x0000,0xb28e,0x0022,0xf54f,0x2922,0xda80, 174 | 0x0000,0x190d,0x36f3,0x0024,0x36f3,0xd808,0x36f3,0x580e, 175 | 0x2000,0x0000,0x3009,0x1800,0x3e00,0x0024,0x2800,0x96c0, 176 | 0x0022,0xf608,0x3605,0x7840,0x3e13,0x780e,0x3e13,0xf808, 177 | 0x3e05,0x4024,0x0000,0xb68e,0x0022,0xa1cf,0x2922,0x9980, 178 | 0x0000,0x190d,0x36f3,0x0024,0x36f3,0xd808,0x36f3,0x580e, 179 | 0x2000,0x0000,0x3009,0x1800,0x3009,0x3400,0x2800,0xaf40, 180 | 0x0022,0xa288,0xb386,0x40d7,0x4284,0x184c,0x0000,0x05c0, 181 | 0x2800,0xb8d5,0xf5d8,0x3804,0x0000,0x0984,0x6400,0xb84a, 182 | 0x3e13,0xf80d,0xa204,0x380e,0x0000,0x800a,0x0000,0x00ce, 183 | 0x2400,0xbc0e,0xffa4,0x0024,0x48b6,0x0024,0x0000,0x0024, 184 | 0x2800,0xbc04,0x4000,0x40c2,0x4224,0x0024,0x6090,0x0024, 185 | 0xffa4,0x0024,0x0fff,0xfe83,0xfe86,0x1bce,0x36f3,0xd80d, 186 | 0x48b6,0x0024,0x0fff,0xff03,0xa230,0x45c3,0x2000,0x0000, 187 | 0x36f1,0x180a, 188 | 0x0007,0x0001, /*copy 1*/ 189 | 0x8300, 190 | 0x0006,0x0a1c, /*copy 2588*/ 191 | 0x0030,0x0055,0xb080,0x1402,0x0fdf,0xffc1,0x0007,0x9257, 192 | 0xb212,0x3c00,0x3d00,0x4024,0x0006,0x0097,0x3f10,0x0024, 193 | 0x3f00,0x0024,0x0030,0x0297,0x3f00,0x0024,0x0007,0x9017, 194 | 0x3f00,0x0024,0x0007,0x81d7,0x3f10,0x0024,0xc090,0x3c00, 195 | 0x0006,0x0297,0xb080,0x3c00,0x0000,0x0401,0x000a,0x1055, 196 | 0x0006,0x0017,0x3f10,0x3401,0x000a,0x2795,0x3f00,0x3401, 197 | 0x0001,0x6ad7,0xf400,0x55c0,0x0000,0x0817,0xb080,0x57c0, 198 | 0x0014,0x958f,0x0000,0x588e,0x0030,0x0017,0x3700,0x0024, 199 | 0x0004,0x0001,0xb012,0x0024,0x0000,0x004d,0x280f,0xe115, 200 | 0x0006,0x2016,0x0006,0x01d7,0x3f00,0x0024,0x0000,0x190d, 201 | 0x000f,0xf94f,0x0000,0xcd0e,0x280f,0xe100,0x0006,0x2016, 202 | 0x0000,0x0080,0x0005,0x4f92,0x2909,0xf840,0x3613,0x2800, 203 | 0x0006,0x0197,0x0006,0xa115,0xb080,0x0024,0x3f00,0x3400, 204 | 0x0007,0x8a57,0x3700,0x0024,0x4080,0x0024,0x0000,0x0040, 205 | 0x2800,0xced5,0x0006,0xa2d7,0x3009,0x3c00,0x0006,0xa157, 206 | 0x3009,0x1c00,0x0006,0x01d7,0x0000,0x190d,0x000a,0x708f, 207 | 0x0000,0xd7ce,0x290b,0x1a80,0x3f00,0x184c,0x0030,0x0017, 208 | 0x4080,0x1c01,0x0000,0x0200,0x2800,0xcb15,0xb102,0x0024, 209 | 0x0000,0xcd08,0x2800,0xcb15,0x0000,0xd3ce,0x0011,0x210f, 210 | 0x0000,0x190d,0x280f,0xcb00,0x3613,0x0024,0x0006,0xa115, 211 | 0x0006,0x01d7,0x37f0,0x1401,0x6100,0x1c01,0x4012,0x0024, 212 | 0x0000,0x8000,0x6010,0x0024,0x34f3,0x0400,0x2800,0xd698, 213 | 0x0000,0x0024,0x0000,0x8001,0x6010,0x3c01,0x0000,0x000d, 214 | 0x2811,0x8259,0x0000,0x0024,0x2a11,0x2100,0x0030,0x0257, 215 | 0x3700,0x0024,0x4080,0x0024,0x0000,0x0024,0x2800,0xd9d5, 216 | 0x0006,0x0197,0x0006,0xa115,0x3f00,0x3400,0x003f,0xc000, 217 | 0xb600,0x41c1,0x0012,0x5103,0x000c,0xc002,0xdcd6,0x0024, 218 | 0x0019,0xd4c2,0x2801,0xf485,0x0001,0x1008,0x0013,0xd9c3, 219 | 0x6fd6,0x0024,0x0000,0x190d,0x2800,0xdf95,0x0014,0x1b01, 220 | 0x0020,0x480f,0x0000,0xde4e,0x0000,0x190d,0x2820,0x41c0, 221 | 0x0001,0x1008,0x0039,0x324f,0x0001,0x3ece,0x2820,0x4a18, 222 | 0xb882,0x0024,0x2a20,0x48c0,0x003f,0xfd00,0xb700,0x0024, 223 | 0x003f,0xf901,0x6010,0x0024,0x0000,0x0024,0x280a,0xc505, 224 | 0x0000,0x190d,0x0014,0x1b01,0x0015,0x59c0,0x6fc2,0x0024, 225 | 0x0000,0x0024,0x2800,0xe9d5,0x0000,0x0024,0x290c,0x4840, 226 | 0x3613,0x0024,0x290c,0x4840,0x4086,0x184c,0x0000,0x18c2, 227 | 0x6234,0x0024,0x0000,0x1d02,0x2800,0xe5d5,0x6234,0x0024, 228 | 0x0030,0x0317,0x2800,0xe9c0,0x3f00,0x0024,0x0000,0x1d82, 229 | 0x2800,0xe855,0x6234,0x0024,0x2912,0x0d00,0x4084,0x184c, 230 | 0xf200,0x0024,0x6200,0x0024,0x0006,0x0017,0x2800,0xe540, 231 | 0xb080,0x3c40,0x0000,0x0202,0x2800,0xe9d5,0xa024,0x0024, 232 | 0xc020,0x0024,0x2800,0xe540,0x0030,0x02d7,0x000a,0x8c8f, 233 | 0x0000,0xeb0e,0x000c,0x0981,0x280a,0x71c0,0x002c,0x9d40, 234 | 0x000a,0x708f,0x0000,0xd7ce,0x280a,0xc0d5,0x0012,0x5182, 235 | 0x6fd6,0x0024,0x003f,0xfd81,0x280a,0x8e45,0xb710,0x0024, 236 | 0xb710,0x0024,0x003f,0xfc01,0x6012,0x0024,0x0000,0x0101, 237 | 0x2801,0x06d5,0xffd2,0x0024,0x48b2,0x0024,0x4190,0x0024, 238 | 0x0000,0x190d,0x2801,0x06d5,0x0030,0x0250,0xb880,0x104c, 239 | 0x3cf0,0x0024,0x0010,0x5500,0xb880,0x23c0,0xb882,0x2000, 240 | 0x0007,0x8590,0x2914,0xbec0,0x0000,0x0440,0x0007,0x8b50, 241 | 0xb880,0x0024,0x2920,0x0100,0x3800,0x0024,0x2920,0x0000, 242 | 0x0006,0x8a91,0x0000,0x0800,0xb880,0xa440,0x003f,0xfd81, 243 | 0xb710,0xa7c0,0x003f,0xfc01,0x6012,0x0024,0x0000,0x0101, 244 | 0x2801,0x1015,0x0000,0x0024,0xffe2,0x0024,0x48b2,0x0024, 245 | 0x4190,0x0024,0x0000,0x0024,0x2801,0x1015,0x0000,0x0024, 246 | 0x2912,0x2d80,0x0000,0x0780,0x4080,0x0024,0x0006,0x8a90, 247 | 0x2801,0x1015,0x0000,0x01c2,0xb886,0x8040,0x3613,0x03c1, 248 | 0xbcd2,0x0024,0x0030,0x0011,0x2800,0xfc95,0x003f,0xff42, 249 | 0xb886,0x8040,0x3009,0x03c1,0x0000,0x0020,0xac22,0x0024, 250 | 0x0000,0x0102,0x6cd2,0x0024,0x3e10,0x0024,0x2909,0x8c80, 251 | 0x3e00,0x4024,0x36f3,0x0024,0x3e11,0x8024,0x3e01,0xc024, 252 | 0x2901,0x34c0,0x0000,0x0201,0xf400,0x4512,0x2900,0x0c80, 253 | 0x3213,0x1b8c,0x3100,0x0024,0xb010,0x0024,0x0000,0x0024, 254 | 0x2801,0x1015,0x0000,0x0024,0x291a,0x8a40,0x0000,0x0100, 255 | 0x2920,0x0200,0x3633,0x0024,0x2920,0x0280,0x0000,0x0401, 256 | 0x408e,0x0024,0x2920,0x0280,0x0000,0x0401,0x003f,0xfd81, 257 | 0xb710,0x4006,0x003f,0xfc01,0x6012,0x0024,0x0000,0x0101, 258 | 0x2801,0x1015,0x0000,0x0024,0xffe2,0x0024,0x48b2,0x0024, 259 | 0x4190,0x0024,0x0000,0x0024,0x2801,0x1015,0x0000,0x0024, 260 | 0x2912,0x2d80,0x0000,0x0780,0x4080,0x0024,0x0000,0x01c2, 261 | 0x2800,0xf885,0x0006,0x8a90,0x2a01,0x1000,0x2920,0x0100, 262 | 0x0000,0x0401,0x0000,0x0180,0x2920,0x0200,0x3613,0x0024, 263 | 0x2920,0x0280,0x3613,0x0024,0x0000,0x0401,0x2920,0x0280, 264 | 0x4084,0x984c,0x0019,0x9d01,0x6212,0x0024,0x001e,0x5c01, 265 | 0x2801,0x0b55,0x6012,0x0024,0x0000,0x0024,0x2801,0x0d45, 266 | 0x0000,0x0024,0x001b,0x5bc1,0x6212,0x0024,0x001b,0xdd81, 267 | 0x2801,0x1115,0x6012,0x0024,0x0000,0x0024,0x2801,0x1115, 268 | 0x0000,0x0024,0x0000,0x004d,0x000a,0xbf4f,0x280a,0xb880, 269 | 0x0001,0x0e4e,0x0020,0xfb4f,0x0000,0x190d,0x0001,0x154e, 270 | 0x2920,0xf440,0x3009,0x2bc1,0x291a,0x8a40,0x36e3,0x0024, 271 | 0x0000,0x190d,0x000a,0x708f,0x280a,0xcac0,0x0000,0xd7ce, 272 | 0x0030,0x0017,0x3700,0x4024,0x0000,0x0200,0xb102,0x0024, 273 | 0x0000,0x00c0,0x2801,0x1445,0x0005,0x4f92,0x2909,0xf840, 274 | 0x3613,0x2800,0x0006,0x0197,0x0006,0xa115,0xb080,0x0024, 275 | 0x3f00,0x3400,0x0000,0x190d,0x000a,0x708f,0x280a,0xc0c0, 276 | 0x0000,0xd7ce,0x0000,0x004d,0x0020,0xfe0f,0x2820,0xfb40, 277 | 0x0001,0x164e,0x2801,0x1815,0x3009,0x1000,0x6012,0x93cc, 278 | 0x0000,0x0024,0x2801,0x32c5,0x0000,0x0024,0x3413,0x0024, 279 | 0x34b0,0x0024,0x4080,0x0024,0x0000,0x0200,0x2801,0x1b15, 280 | 0xb882,0x0024,0x3453,0x0024,0x3009,0x13c0,0x4080,0x0024, 281 | 0x0000,0x0200,0x2801,0x32c5,0x0000,0x0024,0xb882,0x130c, 282 | 0x0000,0x004d,0x0021,0x058f,0x2821,0x0340,0x0001,0x1c0e, 283 | 0x2801,0x2c55,0x6012,0x0024,0x0000,0x0024,0x2801,0x2c55, 284 | 0x0000,0x0024,0x34c3,0x184c,0x3e13,0xb80f,0xf400,0x4500, 285 | 0x0026,0x9dcf,0x0001,0x200e,0x0000,0xfa0d,0x2926,0x8e80, 286 | 0x3e10,0x110c,0x36f3,0x0024,0x2801,0x2c40,0x36f3,0x980f, 287 | 0x001c,0xdd00,0x001c,0xd901,0x6ec2,0x0024,0x001c,0xdd00, 288 | 0x2801,0x2315,0x0018,0xdbc1,0x3413,0x184c,0xf400,0x4500, 289 | 0x2926,0xc640,0x3e00,0x13cc,0x2801,0x2a00,0x36f3,0x0024, 290 | 0x6ec2,0x0024,0x003f,0xc000,0x2801,0x2595,0x002a,0x4001, 291 | 0x3413,0x184c,0xf400,0x4500,0x2926,0xafc0,0x3e00,0x13cc, 292 | 0x2801,0x2a00,0x36f3,0x0024,0xb400,0x0024,0xd100,0x0024, 293 | 0x0000,0x0024,0x2801,0x2a05,0x0000,0x0024,0x3613,0x0024, 294 | 0x3e11,0x4024,0x2926,0x8540,0x3e01,0x0024,0x4080,0x1b8c, 295 | 0x0000,0x0024,0x2801,0x2a05,0x0000,0x0024,0x3413,0x184c, 296 | 0xf400,0x4500,0x2926,0x8e80,0x3e10,0x13cc,0x36f3,0x0024, 297 | 0x3110,0x8024,0x31f0,0xc024,0x0000,0x4000,0x0000,0x0021, 298 | 0x6d06,0x0024,0x3110,0x8024,0x2826,0xa8c4,0x31f0,0xc024, 299 | 0x2a26,0xad00,0x34c3,0x184c,0x3410,0x8024,0x3430,0xc024, 300 | 0x0000,0x4000,0x0000,0x0021,0x6d06,0x0024,0x0000,0x0024, 301 | 0x2801,0x32d4,0x4d06,0x0024,0x0000,0x0200,0x2922,0x1885, 302 | 0x0001,0x3148,0x0000,0x0200,0x3e10,0x8024,0x2921,0xca80, 303 | 0x3e00,0xc024,0x291a,0x8a40,0x0000,0x0024,0x2922,0x1880, 304 | 0x36f3,0x0024,0x0000,0x004d,0x0021,0x0ecf,0x2821,0x0bc0, 305 | 0x0001,0x324e,0x2801,0x1540,0x3c30,0x4024,0x0000,0x190d, 306 | 0x0001,0x33ce,0x2821,0x0f80,0x0021,0x420f,0x0000,0x190d, 307 | 0x3e00,0x0024,0x2801,0xd080,0x0021,0x42c8,0x0020,0xcd4f, 308 | 0x2820,0xc780,0x0001,0x358e,0x0006,0xf017,0x0000,0x0015, 309 | 0xb070,0xbc15,0x0001,0x374e,0x0020,0xdf0f,0x2820,0xcd80, 310 | 0x0000,0x190d,0x3e00,0x23c1,0x2801,0xd080,0x0020,0xdfc8, 311 | 0x3613,0x0024,0x3e10,0xb803,0x3e14,0x3811,0x3e11,0x3805, 312 | 0x3e00,0x3801,0x0007,0xc390,0x0006,0xa011,0x3010,0x0444, 313 | 0x3050,0x4405,0x6458,0x0302,0xff94,0x4081,0x0003,0xffc5, 314 | 0x48b6,0x0024,0xff82,0x0024,0x42b2,0x0042,0xb458,0x0003, 315 | 0x4cd6,0x9801,0xf248,0x1bc0,0xb58a,0x0024,0x6de6,0x1804, 316 | 0x0006,0x0010,0x3810,0x9bc5,0x3800,0xc024,0x36f4,0x1811, 317 | 0x36f0,0x9803,0x283e,0x2d80,0x0fff,0xffc3,0x2801,0x4c80, 318 | 0x0000,0x0024,0x3413,0x0024,0x2801,0x4085,0xf400,0x4517, 319 | 0x2801,0x4480,0x6894,0x13cc,0x37b0,0x184c,0x6090,0x1d51, 320 | 0x0000,0x0910,0x3f00,0x060c,0x3100,0x4024,0x6016,0xb812, 321 | 0x000c,0x8012,0x2801,0x4311,0xb884,0x0024,0x6894,0x3002, 322 | 0x0000,0x028d,0x003a,0x5e0f,0x0001,0x548e,0x2939,0xb0c0, 323 | 0x3e10,0x93cc,0x4084,0x9bd2,0x4282,0x0024,0x0000,0x0040, 324 | 0x2801,0x4685,0x4292,0x130c,0x3443,0x0024,0x2801,0x47c5, 325 | 0x000c,0x8390,0x2a01,0x4b40,0x3444,0x0024,0x3073,0x0024, 326 | 0xc090,0x014c,0x2801,0x4b40,0x3800,0x0024,0x000c,0x4113, 327 | 0xb880,0x2380,0x3304,0x4024,0x3800,0x05cc,0xcc92,0x05cc, 328 | 0x3910,0x0024,0x3910,0x4024,0x000c,0x8110,0x3910,0x0024, 329 | 0x39f0,0x4024,0x3810,0x0024,0x38d0,0x4024,0x3810,0x0024, 330 | 0x38f0,0x4024,0x34c3,0x0024,0x3444,0x0024,0x3073,0x0024, 331 | 0x3063,0x0024,0x3000,0x0024,0x4080,0x0024,0x0000,0x0024, 332 | 0x2839,0x53d5,0x4284,0x0024,0x3613,0x0024,0x2801,0x4e85, 333 | 0x6898,0xb804,0x0000,0x0084,0x293b,0x1cc0,0x3613,0x0024, 334 | 0x000c,0x8117,0x3711,0x0024,0x37d1,0x4024,0x4e8a,0x0024, 335 | 0x0000,0x0015,0x2801,0x5145,0xce9a,0x0024,0x3f11,0x0024, 336 | 0x3f01,0x4024,0x000c,0x8197,0x408a,0x9bc4,0x3f15,0x4024, 337 | 0x2801,0x5385,0x4284,0x3c15,0x6590,0x0024,0x0000,0x0024, 338 | 0x2839,0x53d5,0x4284,0x0024,0x0000,0x0024,0x2801,0x3f58, 339 | 0x458a,0x0024,0x2a39,0x53c0,0x003e,0x2d4f,0x283a,0x5ed5, 340 | 0x0001,0x380e,0x000c,0x4653,0x0000,0x0246,0xffac,0x0c01, 341 | 0x48be,0x0024,0x4162,0x4546,0x6642,0x4055,0x3501,0x8024, 342 | 0x0000,0x0087,0x667c,0x4057,0x000c,0x41d5,0x283a,0x62d5, 343 | 0x3501,0x8024,0x667c,0x1c47,0x3701,0x8024,0x283a,0x62d5, 344 | 0xc67c,0x0024,0x0000,0x0024,0x283a,0x62c5,0x0000,0x0024, 345 | 0x2a3a,0x5ec0,0x3009,0x3851,0x3e14,0xf812,0x3e12,0xb817, 346 | 0x3e11,0x8024,0x0006,0x0293,0x3301,0x8024,0x468c,0x3804, 347 | 0x0006,0xa057,0x2801,0x6084,0x0006,0x0011,0x469c,0x0024, 348 | 0x3be1,0x8024,0x2801,0x6095,0x0006,0xc392,0x3311,0x0024, 349 | 0x33f1,0x2844,0x3009,0x2bc4,0x0030,0x04d2,0x3311,0x0024, 350 | 0x3a11,0x0024,0x3201,0x8024,0x003f,0xfc04,0xb64c,0x0fc4, 351 | 0xc648,0x0024,0x3a01,0x0024,0x3111,0x1fd3,0x6498,0x07c6, 352 | 0x868c,0x2444,0x0023,0xffd2,0x3901,0x8e06,0x0030,0x0551, 353 | 0x3911,0x8e06,0x3961,0x9c44,0xf400,0x44c6,0xd46c,0x1bc4, 354 | 0x36f1,0xbc13,0x2801,0x6a15,0x36f2,0x9817,0x002b,0xffd2, 355 | 0x3383,0x188c,0x3e01,0x8c06,0x0006,0xa097,0x3009,0x1c12, 356 | 0x3213,0x0024,0x468c,0xbc12,0x002b,0xffd2,0xf400,0x4197, 357 | 0x2801,0x6704,0x3713,0x0024,0x2801,0x6745,0x37e3,0x0024, 358 | 0x3009,0x2c17,0x3383,0x0024,0x3009,0x0c06,0x468c,0x4197, 359 | 0x0006,0xa052,0x2801,0x6944,0x3713,0x2813,0x2801,0x6985, 360 | 0x37e3,0x0024,0x3009,0x2c17,0x36f1,0x8024,0x36f2,0x9817, 361 | 0x36f4,0xd812,0x2100,0x0000,0x3904,0x5bd1,0x2a01,0x5a4e, 362 | 0x3e11,0x7804,0x0030,0x0257,0x3701,0x0024,0x0013,0x4d05, 363 | 0xd45b,0xe0e1,0x0007,0xc795,0x2801,0x7195,0x0fff,0xff45, 364 | 0x3511,0x184c,0x4488,0xb808,0x0006,0x8a97,0x2801,0x7145, 365 | 0x3009,0x1c40,0x3511,0x1fc1,0x0000,0x0020,0xac52,0x1405, 366 | 0x6ce2,0x0024,0x0000,0x0024,0x2801,0x7141,0x68c2,0x0024, 367 | 0x291a,0x8a40,0x3e10,0x0024,0x2921,0xca80,0x3e00,0x4024, 368 | 0x36f3,0x0024,0x3009,0x1bc8,0x36f0,0x1801,0x3601,0x5804, 369 | 0x3e13,0x780f,0x3e13,0xb808,0x0008,0x9b0f,0x0001,0x744e, 370 | 0x2908,0x9300,0x0000,0x004d,0x36f3,0x9808,0x2000,0x0000, 371 | 0x36f3,0x580f,0x0007,0x81d7,0x3711,0x8024,0x3711,0xc024, 372 | 0x3700,0x0024,0x0000,0x2001,0xb012,0x0024,0x0034,0x0000, 373 | 0x2801,0x7705,0x0000,0x01c1,0x0014,0xc000,0x0000,0x01c1, 374 | 0x4fce,0x0024,0xffea,0x0024,0x48b6,0x0024,0x4384,0x4097, 375 | 0xb886,0x45c6,0xfede,0x0024,0x4db6,0x0024,0x466c,0x0024, 376 | 0x0006,0xc610,0x8dd6,0x8007,0x0000,0x00c6,0xff6e,0x0024, 377 | 0x48b2,0x0024,0x0034,0x2406,0xffee,0x0024,0x2914,0xaa80, 378 | 0x40b2,0x0024,0xf1c6,0x0024,0xf1d6,0x0024,0x0000,0x0201, 379 | 0x8d86,0x0024,0x61de,0x0024,0x0006,0xc612,0x2801,0x7d81, 380 | 0x0006,0xc713,0x4c86,0x0024,0x2912,0x1180,0x0006,0xc351, 381 | 0x0006,0x0210,0x2912,0x0d00,0x3810,0x984c,0xf200,0x2043, 382 | 0x2808,0xa000,0x3800,0x0024,0x3e12,0xb817,0x3e12,0x3815, 383 | 0x3e05,0xb814,0x3625,0x0024,0x0000,0x800a,0x3e10,0x3801, 384 | 0x3e10,0xb803,0x3e11,0x3805,0x3e11,0xb807,0x3e14,0x3811, 385 | 0x0006,0xa090,0x2912,0x0d00,0x3e14,0xc024,0x4088,0x8000, 386 | 0x4080,0x0024,0x0007,0x90d1,0x2801,0x8545,0x0000,0x0024, 387 | 0x0007,0x9051,0x3100,0x4024,0x4100,0x0024,0x3900,0x0024, 388 | 0x0007,0x90d1,0x0004,0x0000,0x31f0,0x4024,0x6014,0x0400, 389 | 0x0000,0x0024,0x2801,0x8991,0x4080,0x0024,0x0000,0x0000, 390 | 0x2801,0x8905,0x0000,0x0024,0x0007,0x9053,0x3300,0x0024, 391 | 0x4080,0x0024,0x0000,0x0000,0x2801,0x8998,0x0000,0x0024, 392 | 0x0007,0x9051,0x3900,0x0024,0x3200,0x504c,0x6410,0x0024, 393 | 0x3cf0,0x0000,0x4080,0x0024,0x0006,0xc691,0x2801,0xa245, 394 | 0x3009,0x0400,0x0007,0x9051,0x0000,0x1001,0x3100,0x0024, 395 | 0x6012,0x0024,0x0006,0xc6d0,0x2801,0x9689,0x003f,0xe000, 396 | 0x0006,0xc693,0x3900,0x0c00,0x3009,0x0001,0x6014,0x0024, 397 | 0x0007,0x1ad0,0x2801,0x9695,0x3009,0x0000,0x4080,0x0024, 398 | 0x0000,0x0301,0x2801,0x9085,0x4090,0x0024,0x0000,0x0024, 399 | 0x2801,0x9195,0x0000,0x0024,0x3009,0x0000,0xc012,0x0024, 400 | 0x2801,0x9680,0x3009,0x2001,0x3009,0x0000,0x6012,0x0024, 401 | 0x0000,0x0341,0x2801,0x9395,0x0000,0x0024,0x6190,0x0024, 402 | 0x2801,0x9680,0x3009,0x2000,0x6012,0x0024,0x0000,0x0381, 403 | 0x2801,0x9555,0x0000,0x0024,0x6190,0x0024,0x2801,0x9680, 404 | 0x3009,0x2000,0x6012,0x0024,0x0000,0x00c0,0x2801,0x9695, 405 | 0x0000,0x0024,0x3009,0x2000,0x0006,0xa090,0x3009,0x0000, 406 | 0x4080,0x0024,0x0000,0x0081,0x2801,0x9b55,0x0007,0x8c13, 407 | 0x3300,0x104c,0xb010,0x0024,0x0002,0x8001,0x2801,0x9dc5, 408 | 0x34f0,0x0024,0x2801,0x9b40,0x0000,0x0024,0x0006,0xc351, 409 | 0x3009,0x0000,0x6090,0x0024,0x3009,0x2000,0x2900,0x0b80, 410 | 0x3009,0x0405,0x0006,0xc690,0x0006,0xc6d1,0x3009,0x0000, 411 | 0x3009,0x0401,0x6014,0x0024,0x0006,0xa093,0x2801,0x99d1, 412 | 0xb880,0x0024,0x2801,0xab00,0x3009,0x2c00,0x4040,0x0024, 413 | 0x6012,0x0024,0x0006,0xc6d0,0x2801,0xab18,0x0000,0x0024, 414 | 0x0006,0xc693,0x3009,0x0c00,0x3009,0x0001,0x6014,0x0024, 415 | 0x0006,0xc350,0x2801,0xab01,0x0000,0x0024,0x6090,0x0024, 416 | 0x3009,0x2c00,0x3009,0x0005,0x2900,0x0b80,0x0001,0xab08, 417 | 0x3009,0x0400,0x4080,0x0024,0x0003,0x8000,0x2801,0xab05, 418 | 0x0000,0x0024,0x6400,0x0024,0x0000,0x0081,0x2801,0xab09, 419 | 0x0000,0x0024,0x0007,0x8c13,0x3300,0x0024,0xb010,0x0024, 420 | 0x0006,0xc650,0x2801,0xab15,0x0000,0x0024,0x0001,0x0002, 421 | 0x3413,0x0000,0x3009,0x0401,0x4010,0x8406,0x0000,0x0281, 422 | 0xa010,0x13c1,0x4122,0x0024,0x0000,0x03c2,0x6122,0x8002, 423 | 0x462c,0x0024,0x469c,0x0024,0xfee2,0x0024,0x48be,0x0024, 424 | 0x6066,0x8400,0x0006,0xc350,0x2801,0xab01,0x0000,0x0024, 425 | 0x4090,0x0024,0x3009,0x2400,0x2900,0x0b80,0x3009,0x0005, 426 | 0x0007,0x1b50,0x2912,0x0d00,0x3613,0x0024,0x3a00,0x0380, 427 | 0x4080,0x0024,0x0000,0x00c1,0x2801,0xb3c5,0x3009,0x0000, 428 | 0xb010,0x008c,0x4192,0x0024,0x6012,0x0024,0x0006,0xf051, 429 | 0x2801,0xb1d8,0x3009,0x0400,0x0007,0x1fd1,0x30e3,0x0400, 430 | 0x4080,0x0024,0x0000,0x0301,0x2801,0xb3c5,0x3009,0x0000, 431 | 0xb010,0x0024,0x0000,0x0101,0x6012,0x0024,0x0006,0xf051, 432 | 0x2801,0xb3d5,0x0000,0x0024,0x3023,0x0400,0xf200,0x184c, 433 | 0xb880,0xa400,0x3009,0x2000,0x3009,0x0441,0x3e10,0x4402, 434 | 0x2909,0xa9c0,0x3e10,0x8024,0x36e3,0x0024,0x36f4,0xc024, 435 | 0x36f4,0x1811,0x36f1,0x9807,0x36f1,0x1805,0x36f0,0x9803, 436 | 0x36f0,0x1801,0x3405,0x9014,0x36f3,0x0024,0x36f2,0x1815, 437 | 0x2000,0x0000,0x36f2,0x9817,0x3613,0x0024,0x3e12,0xb817, 438 | 0x3e12,0x3815,0x3e05,0xb814,0x3615,0x0024,0x0000,0x800a, 439 | 0x3e10,0x3801,0x3e10,0xb803,0x3e11,0x3805,0x3e11,0xf810, 440 | 0x0001,0x0010,0x3e14,0x7812,0xb882,0x3813,0x2914,0xbec0, 441 | 0x0000,0x2200,0xb886,0x12cc,0x2801,0xc040,0x3454,0x8024, 442 | 0x0001,0x0000,0x3000,0x984c,0x4234,0xb843,0xf400,0x4095, 443 | 0x003b,0xffc2,0x3500,0x4024,0xb122,0x0842,0x4010,0x0bc3, 444 | 0x4010,0x0024,0x4010,0x0024,0x4010,0x0024,0x4d82,0x4011, 445 | 0x2938,0x0600,0xf400,0x4450,0x3223,0x184c,0x3210,0x8024, 446 | 0x32d0,0xc024,0x2938,0x0600,0x4d82,0x4450,0x3243,0x1bc3, 447 | 0x6396,0x0024,0x0005,0xdf90,0x3000,0x0024,0x6302,0x0024, 448 | 0x0005,0xe110,0x2801,0xbb11,0x0000,0x0024,0x2801,0xc6c0, 449 | 0x4086,0x0024,0x3200,0x930c,0x6398,0x1111,0x4244,0x0844, 450 | 0xf400,0x4095,0x3500,0x584c,0x4438,0x0805,0x453a,0x4115, 451 | 0x3500,0x8024,0x6122,0x4155,0x4280,0x1404,0x0001,0x0002, 452 | 0x4244,0x0024,0x4244,0x0024,0x4244,0x0024,0x4244,0x0024, 453 | 0x2938,0x2f80,0xf400,0x4090,0x6396,0x0024,0x0005,0xdf50, 454 | 0x3000,0x0024,0x6302,0x0024,0x0005,0xe0d2,0x2801,0xc251, 455 | 0x0000,0x0381,0x3073,0x0024,0x3023,0x0024,0x3000,0x0024, 456 | 0x6012,0x0024,0x0001,0x2212,0x2801,0xcbd5,0x0005,0x1453, 457 | 0x0001,0x0011,0x3093,0x184c,0x3000,0x4024,0x2900,0x7600, 458 | 0x3e00,0x4024,0x2801,0xcdc0,0x36f3,0x0024,0x0005,0xe3c1, 459 | 0x0001,0x0011,0x3613,0x024c,0x3e10,0x4024,0x3000,0x8024, 460 | 0x2900,0x5980,0x3e00,0x8024,0x36e3,0x0024,0x36f4,0xc024, 461 | 0x36f4,0x5812,0x36f1,0xd810,0x36f1,0x1805,0x36f0,0x9803, 462 | 0x36f0,0x1801,0x3405,0x9014,0x36f3,0x0024,0x36f2,0x1815, 463 | 0x2000,0x0000,0x36f2,0x9817,0x3613,0x0024,0x3e12,0xb817, 464 | 0x3e12,0x3815,0x3e05,0xb814,0x3625,0x0024,0x0000,0x800a, 465 | 0x3e10,0x3801,0x0000,0x00c1,0xb880,0xb803,0x3e10,0x904c, 466 | 0x3e11,0x3806,0x3e11,0xf810,0x0006,0xf450,0x3e14,0x7812, 467 | 0x3e14,0xc024,0x3cf0,0x2080,0x3009,0x23c0,0x3009,0x2380, 468 | 0x0000,0x0640,0x3009,0x2000,0x2921,0x9440,0x0000,0x00c0, 469 | 0x2921,0xdd40,0x3613,0x0024,0xf400,0x4004,0x0000,0x01c0, 470 | 0x6400,0x0024,0x0000,0x00c0,0x2801,0xf0c5,0x0000,0x01c1, 471 | 0x6412,0x4100,0x0006,0x0581,0x2801,0xe641,0x4412,0x0024, 472 | 0xf400,0x4057,0x3702,0x0024,0x2000,0x0000,0x0000,0x0024, 473 | 0x0006,0xf410,0x0000,0x0641,0x3613,0x0000,0x6012,0x0024, 474 | 0x0000,0x0024,0x2801,0xdc15,0x0000,0x0024,0x3009,0x2004, 475 | 0x2900,0xb340,0x3e01,0x0024,0x2801,0xe640,0x36f3,0x0024, 476 | 0x0006,0xf410,0x0000,0x0641,0x3613,0x0000,0x6012,0x0024, 477 | 0x0000,0x0024,0x2801,0xdf15,0x0000,0x0024,0x3009,0x2004, 478 | 0x2900,0xa140,0x3e01,0x0024,0x2801,0xe640,0x36f3,0x0024, 479 | 0x0006,0xf450,0x3613,0x0000,0x6090,0x3804,0x2900,0xb340, 480 | 0x3009,0x2000,0x2801,0xe640,0x36f3,0x0024,0x2923,0x4f00, 481 | 0x0007,0x2050,0x2801,0xe640,0x3009,0x2000,0x2923,0x7580, 482 | 0x0001,0xe648,0x34d3,0x184c,0x3430,0x0024,0x2922,0x4fc0, 483 | 0x3e00,0x0024,0x2801,0xe640,0x36f3,0x0024,0x0000,0x3fc0, 484 | 0x0007,0x2050,0x3613,0x0024,0x2923,0x8480,0x3e00,0x0024, 485 | 0x36f3,0x2000,0x0000,0x1800,0x3413,0x0024,0xf400,0x4510, 486 | 0x34f0,0x4024,0x6192,0x0024,0x6014,0x2001,0x0007,0x2051, 487 | 0x2801,0xe8c1,0x0000,0x0280,0x3009,0x2400,0x3009,0x0400, 488 | 0x4080,0x0024,0x0006,0xf352,0x2801,0xf1d5,0x3009,0x0842, 489 | 0x3009,0x0bc3,0x4d86,0x0024,0x0000,0x0201,0x2801,0xed05, 490 | 0x0030,0x0013,0x0006,0x8a93,0x3009,0x0c40,0x3009,0x0fc1, 491 | 0x6cde,0x0024,0x0000,0x0201,0x2801,0xf1c1,0x0030,0x0013, 492 | 0x3300,0x0024,0xb010,0x0024,0x0000,0x0100,0x2801,0xf1d5, 493 | 0x0000,0x00c1,0x2921,0x9440,0x3613,0x0024,0x2921,0xdd40, 494 | 0x3613,0x0024,0xf400,0x4004,0x0000,0x01c0,0x6400,0x0024, 495 | 0x0000,0x01c1,0x2801,0xd815,0x0000,0x00c0,0x2921,0x9440, 496 | 0x3613,0x0024,0x2921,0xc300,0x0000,0x0024,0x36f4,0xc024, 497 | 0x36f4,0x5812,0x36f1,0xd810,0x36f1,0x1806,0x36f0,0x9803, 498 | 0x36f0,0x1801,0x3405,0x9014,0x36f3,0x0024,0x36f2,0x1815, 499 | 0x2000,0x0000,0x36f2,0x9817,0x3613,0x0024,0x3e12,0xb817, 500 | 0x3e12,0x3815,0x3e05,0xb814,0x3615,0x0024,0x0000,0x800a, 501 | 0x3e10,0xb803,0x0012,0x5103,0x3e11,0x3805,0x3e11,0xb807, 502 | 0x3e14,0x380d,0x0030,0x0250,0x3e13,0xf80e,0xbe8b,0x83e0, 503 | 0x290c,0x4840,0x3613,0x0024,0x290c,0x4840,0x4086,0x984c, 504 | 0x0000,0x00ce,0x2401,0xfbce,0x3009,0x1bc0,0x0000,0x01c3, 505 | 0xae3a,0x184c,0x0000,0x0043,0x3009,0x3842,0x290c,0x4840, 506 | 0x3009,0x3840,0x4084,0x9bc0,0xfe26,0x9bc2,0xceba,0x0024, 507 | 0x4e8e,0x0024,0x4e9a,0x0024,0x4f8e,0x0024,0x0000,0x0102, 508 | 0x2802,0x0105,0x0030,0x0010,0x0000,0x0206,0x3613,0x0024, 509 | 0x290c,0x4840,0x3009,0x3840,0x3000,0xdbc0,0xb366,0x0024, 510 | 0x0000,0x0024,0x2802,0x0115,0x4e8e,0x0024,0x4e9a,0x0024, 511 | 0x4f8e,0x0024,0x0030,0x0010,0x2801,0xfdd5,0x0000,0x0206, 512 | 0x36f3,0xd80e,0x36f4,0x180d,0x36f1,0x9807,0x36f1,0x1805, 513 | 0x36f0,0x9803,0x3405,0x9014,0x36f3,0x0024,0x36f2,0x1815, 514 | 0x2000,0x0000,0x36f2,0x9817, 515 | 0x0007,0x0001, /*copy 1*/ 516 | 0x802e, 517 | 0x0006,0x0002, /*copy 2*/ 518 | 0x2801,0x6b00, 519 | 0x0007,0x0001, /*copy 1*/ 520 | 0x8030, 521 | 0x0006,0x0002, /*copy 2*/ 522 | 0x2800,0x1b40, 523 | 0x0007,0x0001, /*copy 1*/ 524 | 0x8028, 525 | 0x0006,0x0002, /*copy 2*/ 526 | 0x2a00,0x144e, 527 | 0x0007,0x0001, /*copy 1*/ 528 | 0x8032, 529 | 0x0006,0x0002, /*copy 2*/ 530 | 0x2801,0x7f80, 531 | 0x0007,0x0001, /*copy 1*/ 532 | 0x3580, 533 | 0x0006, 0x8038, 0x0000, /*Rle(56)*/ 534 | 0x0007,0x0001, /*copy 1*/ 535 | 0xfab3, 536 | 0x0006,0x01a4, /*copy 420*/ 537 | 0x0001,0x0001,0x0001,0x0001,0x0000,0xffff,0xfffe,0xfffb, 538 | 0xfff9,0xfff5,0xfff2,0xffed,0xffe8,0xffe3,0xffde,0xffd8, 539 | 0xffd3,0xffce,0xffca,0xffc7,0xffc4,0xffc4,0xffc5,0xffc7, 540 | 0xffcc,0xffd3,0xffdc,0xffe6,0xfff3,0x0001,0x0010,0x001f, 541 | 0x002f,0x003f,0x004e,0x005b,0x0066,0x006f,0x0074,0x0075, 542 | 0x0072,0x006b,0x005f,0x004f,0x003c,0x0024,0x0009,0xffed, 543 | 0xffcf,0xffb0,0xff93,0xff77,0xff5f,0xff4c,0xff3d,0xff35, 544 | 0xff34,0xff3b,0xff4a,0xff60,0xff7e,0xffa2,0xffcd,0xfffc, 545 | 0x002e,0x0061,0x0094,0x00c4,0x00f0,0x0114,0x0131,0x0144, 546 | 0x014b,0x0146,0x0134,0x0116,0x00eb,0x00b5,0x0075,0x002c, 547 | 0xffde,0xff8e,0xff3d,0xfeef,0xfea8,0xfe6a,0xfe39,0xfe16, 548 | 0xfe05,0xfe06,0xfe1b,0xfe43,0xfe7f,0xfecd,0xff2a,0xff95, 549 | 0x0009,0x0082,0x00fd,0x0173,0x01e1,0x0242,0x0292,0x02cc, 550 | 0x02ec,0x02f2,0x02da,0x02a5,0x0253,0x01e7,0x0162,0x00c9, 551 | 0x0021,0xff70,0xfebc,0xfe0c,0xfd68,0xfcd5,0xfc5b,0xfc00, 552 | 0xfbc9,0xfbb8,0xfbd2,0xfc16,0xfc85,0xfd1b,0xfdd6,0xfeae, 553 | 0xff9e,0x009c,0x01a0,0x02a1,0x0392,0x046c,0x0523,0x05b0, 554 | 0x060a,0x062c,0x0613,0x05bb,0x0526,0x0456,0x0351,0x021f, 555 | 0x00c9,0xff5a,0xfde1,0xfc6a,0xfb05,0xf9c0,0xf8aa,0xf7d0, 556 | 0xf73d,0xf6fa,0xf70f,0xf77e,0xf848,0xf96b,0xfadf,0xfc9a, 557 | 0xfe8f,0x00ad,0x02e3,0x051a,0x073f,0x0939,0x0af4,0x0c5a, 558 | 0x0d59,0x0de1,0x0de5,0x0d5c,0x0c44,0x0a9e,0x0870,0x05c7, 559 | 0x02b4,0xff4e,0xfbaf,0xf7f8,0xf449,0xf0c7,0xed98,0xeae0, 560 | 0xe8c4,0xe765,0xe6e3,0xe756,0xe8d2,0xeb67,0xef19,0xf3e9, 561 | 0xf9cd,0x00b5,0x088a,0x112b,0x1a72,0x2435,0x2e42,0x3866, 562 | 0x426b,0x4c1b,0x553e,0x5da2,0x6516,0x6b6f,0x7087,0x7441, 563 | 0x7686,0x774a,0x7686,0x7441,0x7087,0x6b6f,0x6516,0x5da2, 564 | 0x553e,0x4c1b,0x426b,0x3866,0x2e42,0x2435,0x1a72,0x112b, 565 | 0x088a,0x00b5,0xf9cd,0xf3e9,0xef19,0xeb67,0xe8d2,0xe756, 566 | 0xe6e3,0xe765,0xe8c4,0xeae0,0xed98,0xf0c7,0xf449,0xf7f8, 567 | 0xfbaf,0xff4e,0x02b4,0x05c7,0x0870,0x0a9e,0x0c44,0x0d5c, 568 | 0x0de5,0x0de1,0x0d59,0x0c5a,0x0af4,0x0939,0x073f,0x051a, 569 | 0x02e3,0x00ad,0xfe8f,0xfc9a,0xfadf,0xf96b,0xf848,0xf77e, 570 | 0xf70f,0xf6fa,0xf73d,0xf7d0,0xf8aa,0xf9c0,0xfb05,0xfc6a, 571 | 0xfde1,0xff5a,0x00c9,0x021f,0x0351,0x0456,0x0526,0x05bb, 572 | 0x0613,0x062c,0x060a,0x05b0,0x0523,0x046c,0x0392,0x02a1, 573 | 0x01a0,0x009c,0xff9e,0xfeae,0xfdd6,0xfd1b,0xfc85,0xfc16, 574 | 0xfbd2,0xfbb8,0xfbc9,0xfc00,0xfc5b,0xfcd5,0xfd68,0xfe0c, 575 | 0xfebc,0xff70,0x0021,0x00c9,0x0162,0x01e7,0x0253,0x02a5, 576 | 0x02da,0x02f2,0x02ec,0x02cc,0x0292,0x0242,0x01e1,0x0173, 577 | 0x00fd,0x0082,0x0009,0xff95,0xff2a,0xfecd,0xfe7f,0xfe43, 578 | 0xfe1b,0xfe06,0xfe05,0xfe16,0xfe39,0xfe6a,0xfea8,0xfeef, 579 | 0xff3d,0xff8e,0xffde,0x002c,0x0075,0x00b5,0x00eb,0x0116, 580 | 0x0134,0x0146,0x014b,0x0144,0x0131,0x0114,0x00f0,0x00c4, 581 | 0x0094,0x0061,0x002e,0xfffc,0xffcd,0xffa2,0xff7e,0xff60, 582 | 0xff4a,0xff3b,0xff34,0xff35,0xff3d,0xff4c,0xff5f,0xff77, 583 | 0xff93,0xffb0,0xffcf,0xffed,0x0009,0x0024,0x003c,0x004f, 584 | 0x005f,0x006b,0x0072,0x0075,0x0074,0x006f,0x0066,0x005b, 585 | 0x004e,0x003f,0x002f,0x001f,0x0010,0x0001,0xfff3,0xffe6, 586 | 0xffdc,0xffd3,0xffcc,0xffc7,0xffc5,0xffc4,0xffc4,0xffc7, 587 | 0xffca,0xffce,0xffd3,0xffd8,0xffde,0xffe3,0xffe8,0xffed, 588 | 0xfff2,0xfff5,0xfff9,0xfffb,0xfffe,0xffff,0x0000,0x0001, 589 | 0x0001,0x0001,0x0001,0x0000, 590 | 0x0007,0x0001, /*copy 1*/ 591 | 0x180b, 592 | 0x0006,0x0012, /*copy 18*/ 593 | 0x000f,0x0010,0x001c,0xfab3,0x3580,0x8037,0xa037,0x0001, 594 | 0x0000,0x3580,0x01a4,0x0768,0x0774,0x0787,0x0780,0x078b, 595 | 0x078d,0x0793, 596 | 0x000a,0x0001, /*copy 1*/ 597 | 0x0050, 598 | #define PLUGIN_SIZE 4448 599 | }; 600 | 601 | #endif 602 | -------------------------------------------------------------------------------- /power.cpp: -------------------------------------------------------------------------------- 1 | #include "power.h" 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | #include "debug.h" 8 | 9 | void setupPower() { 10 | wdt_enable(WDTO_2S); 11 | 12 | power_twi_disable(); 13 | #ifndef DEBUG 14 | power_usart0_disable(); 15 | #endif 16 | } 17 | 18 | void reset() { 19 | wdt_enable(WDTO_15MS); 20 | while(1); 21 | } 22 | 23 | void watchdogReset() { 24 | wdt_reset(); 25 | } 26 | -------------------------------------------------------------------------------- /power.h: -------------------------------------------------------------------------------- 1 | #ifndef POWER_H 2 | #define POWER_H 3 | 4 | void setupPower(); 5 | void reset(); 6 | void watchdogReset(); 7 | 8 | #endif 9 | -------------------------------------------------------------------------------- /sr.cpp: -------------------------------------------------------------------------------- 1 | #include "sr.h" 2 | 3 | #include 4 | #include 5 | #include "pins.h" 6 | #include "commands.h" 7 | #include "debug.h" 8 | 9 | sr sr1, sr2 = {0, -1, 0}; 10 | 11 | srAssignments sra = { 12 | // Shift register 1 13 | 0b00100000, 14 | 0b00001000, 15 | 0b00010000, 16 | 0b00000100, 17 | 0b00000010, 18 | 0b00000001, 19 | 20 | // Shift register 2 21 | 0b00000100, 22 | 0b00001000, 23 | 0b00100000, 24 | 0b00000010, 25 | 0b00000001, 26 | 0b00010000, 27 | }; 28 | 29 | // Set up shift register 30 | void setupSr() { 31 | // Set up shift registers for buttons 32 | pinMode(PIN_SR_LATCH, OUTPUT); 33 | pinMode(PIN_SR_CLOCK, OUTPUT); 34 | pinMode(PIN_SR_DATA, INPUT); 35 | } 36 | 37 | // Returns current shift register state as byte 38 | // Bit 7 = Pin 7 / Bit 0= Pin 0 39 | uint8_t srShiftIn(bool doLatch) { 40 | uint8_t data = 0; 41 | 42 | if (doLatch) { 43 | digitalWrite(PIN_SR_LATCH, 1); 44 | delayMicroseconds(20); 45 | digitalWrite(PIN_SR_LATCH, 0); 46 | } 47 | 48 | for (int i = 7; i >= 0; i--) { 49 | digitalWrite(PIN_SR_CLOCK, 0); 50 | delayMicroseconds(2); 51 | if (digitalRead(PIN_SR_DATA)) { 52 | data = data | (1 << i); 53 | } 54 | digitalWrite(PIN_SR_CLOCK, 1); 55 | 56 | } 57 | 58 | //DPRINTBINLN(data); 59 | 60 | return data; 61 | } 62 | 63 | // Debounce button presses 64 | bool debounce(sr *srd) { 65 | // First run 66 | if (srd->previous == -1) { 67 | srd->previous = srd->state; 68 | return false; 69 | } 70 | 71 | if (srd->state != srd->previous) { 72 | srd->previous = srd->state; 73 | 74 | if ((millis() - srd->debounceTime) > DEBOUNCE_DELAY) { 75 | srd->debounceTime = millis(); 76 | return true; 77 | } 78 | } 79 | 80 | return false; 81 | } 82 | -------------------------------------------------------------------------------- /sr.h: -------------------------------------------------------------------------------- 1 | #ifndef SR_H 2 | #define SR_H 3 | 4 | #include 5 | 6 | const uint16_t DEBOUNCE_DELAY = 500; 7 | 8 | // Shift register states 9 | struct sr { 10 | uint8_t state; // Shift register current state 11 | int8_t previous; // Shift register previous state 12 | uint32_t debounceTime; // Shift register time since last debounce 13 | }; 14 | 15 | // Shift register button - pin mappings 16 | struct srAssignments { 17 | // Shift register 1 18 | const uint8_t button2; 19 | const uint8_t button3; 20 | const uint8_t button5; 21 | const uint8_t button6; 22 | const uint8_t button9; 23 | const uint8_t buttonNext; 24 | 25 | // Shift register 2 26 | const uint8_t button1; 27 | const uint8_t button4; 28 | const uint8_t button7; 29 | const uint8_t button8; 30 | const uint8_t buttonPlayPause; 31 | const uint8_t buttonPrevious; 32 | }; 33 | 34 | void setupSr(); 35 | uint8_t srShiftIn(bool doLatch); 36 | bool debounce(sr *srd); 37 | 38 | #endif 39 | --------------------------------------------------------------------------------