--- gitea: none include_toc: true --- # Introduction Microcontroller Firmware to emulate guitar and drum kit controllers from the Wii version of the Rock Band games. ![Two small plastic guitars and a cheap toy drum pad](docs/mockband.jpg) This is based on the foundational work done by Nicholas Angle on the [Wii Guitar Controller](https://github.com/NianZo/WiiGuitarController) ([text article](https://www.niangames.com/articles/reverse-engineering-rockband-guitar-controllers)). Nicholas was also really nice about answering an email question I sent. Thanks, Nicholas! # Parts Needed * A [Sparkfun Pro Micro](https://www.sparkfun.com/products/12640) * A physical controller # Skills Needed This is a research project: it's assumed you already have a skillset that includes: * Disassembling consumer electronics * Using a multimeter to perform continuity checks * Building electronics projects using a microcontroller * Soldering * Running the Arduino IDE *or* using `avrdude` to flash a firmware If you're not comfortable with the above list, your best option right now (Jan 2024) is to either buy a used kit, or wait for the Polybar project to finish their work producing a beginner-friendly kit with assembly manual. # Controllers ## Guitar I 3D printed the [MiniCaster](https://www.printables.com/model/479046-minicaster-mini-clone-heromidi-controller) by Vlad the Inhaler. It comes with full build instructions. ## Drums I bought a [Cheap children's drum toy](https://www.amazon.com/Electronic-Sboet-Practice-Headphone-Christmas/dp/B0CHJMYCH9/) from Amazon. There are dozens of copies of this thing, the one I got was on sale for $25. I had to unscrew the cover and remove the logic board, battery, and speaker. The pads were connected with a sort of ribbon connector, which I desoldered and removed, then placed in my own perma-proto board. I also hooked up a 3.5mm TRS jack for the two pedals, which I could have desoldered from the toy (I already had these). I'm sorry I didn't photograph or record any of this, but it was pretty straightforward. # Building This will compile in the Arduino IDE, or on the commandline using `make`. ## Command Line Just run `make` on a Unix system. I set up paths for my Debian install of Arduino 1.8; you may need to adjust them if your setup has different paths. There is a `flash-%` target that will upload the built firmware to a Pro Micro. The following targets exist: make flash-guitar # Guitar firmware make flash-guitar-wammy # Guitar firmware with wammy bar make flash-drums # Drums firmware ## Arduino Mockband has no library dependencies, and as far as I can tell, will work with the built-in Leonardo profile, even though you're uploading to a Pro Micro. You need to make two edits to `boards.txt`. Instructions for this are all over the place. Find your board, and edit the `build` lines. Don't edit anything that doesn't say `build` on the line! I can't help you if you do this. In my examples, I'm editing the lines for the leonardo build. Yours might be different: it should match the board you're using. ### Build flags This disables serial communications on the board. leonardo.build.extra_flags={build.usb_flags} -DCDC_DISABLED Hat tip to Nicholas Angle for figuring this out so I didn't have to. ### VID and PID These set the USB identifiers. VID is the Vendor ID, and PID is the Product ID. `0x1bad` means "Harmonix Music", at least, it does to the Linux kernel. #### For guitar PID `0x004` means "Guitar controller". leonardo.build.vid=0x1bad leonardo.build.pid=0x0004 leonardo.build.usb_product="Mockband Guitar" #### For drums PID `0x3110` means "Rock Band 2 drums". This works better with all versions of Rock Band on my wii, even if you don't use the cymbal inputs. leonardo.build.vid=0x1bad leonardo.build.pid=0x3110 leonardo.build.usb_product="Mockband Drums" # Wiring Both the guitar and drum kit I used provide simple momentary switches: nothing fancy like a piezo. If you're using fancier types of inputs, you'll need to modify the source code. ## Guitar ![guitar wiring](docs/guitar.png) | silkscreen pin name | description | | --- | --- | | TX0 | strum up | | RX1 | strum down | | 2 | tilt switch | | 3 | green | | 4 | red | | 5 | yellow | | 6 | blue | | 7 | orange | | 8 | no connection | | 9 | wammy bar (see note) | | 10 | plus | | 16 | minus | | 14 | orange solo | | 15 | blue solo | | 18 | yello solo | | 19 | red solo | | 20 | green solo | | 21 | no connection | The solo buttons and wammy bar are optional. I don't use them. If you hook up a wammy bar, be sure to uncomment the `#define WAMMY` in the code! ## Drum Kit ![drum wiring](docs/drums.png) | silkscreen pin name | description | | --- | --- | | TX0 | no connection | | RX1 | no connection | | 2 | 2x kick / hat (see below) | | 3 | green | | 4 | red | | 5 | yellow | | 6 | blue | | 7 | kick | | 8 | no connection | | 9 | no connection | | 10 | plus | | 16 | minus | | 14 | no connection | | 15 | blue cymbal | | 18 | yellow cymbal | | 19 | hi hat pedal (see below) | | 20 | green cymbal | | 21 | no connection | ### Pedals If you only have one pedal, wire it to pin 7. If you have two pedals, wire them to 7 and 2. If you have three pedals, wire them to 7, 2, and 19. Wii Rock Band 3 only looks at the 2x kick pin: it provides a checkbox to reassign this to the high hat. Clone Hero will use both the 2x kick and the hi hat. Maybe there is some other game that uses this too. # Related Projects Mockband is a research project. You can use it to build a fully working controller, but the main goal of this project is to inform other developers. If you're looking for a user-friendly way to get a Rock Band drum controller, consider the following alternatives: * Buying a used Harmonix (official Rock Band) drum kit * Mad Catz Rock Band 3 MIDI PRO-Adapter and a MIDI e-drum kit * [Santroller](https://santroller.tangentmc.net/wiring_guides/drum.html) wired to a used Harmonix drum kit # Bugs / Not Yet Implemented I'm tracking things I need to do in the [forgejo issues](https://git.woozle.org/neale/mockband/issues). There's a rumor that one day forgejo/gitea will join the fediverse. Until that happens, just [email me](mailto:neale@woozle.org), and I'll open an issue. # License You may use this under the terms of the [MIT License](docs/COPYING.md). # Need help? [Email me](mailto:neale@woozle.org), I'm friendly :)