# Mock Band Microcontroller Firmware to emulate guitar and drum kit controllers from the Wii version of the Rock Band games. 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)). All I did was speed up the loop code to detect drum pad strikes, which are very quick! # Parts Needed * A [Sparkfun Pro Micro](https://www.sparkfun.com/products/12640) * A physical controller # 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. # Compiling This compiles in the Arduino IDE. It doesn't have any library dependencies. 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](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](drums.png) | silkscreen pin name | description | | --- | --- | | TX0 | no connection | | RX1 | no connection | | 2 | 2x kick | | 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 | | 20 | green cymbal | | 21 | no connection | # 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. # Need help? [Email me](mailto:neale@woozle.org), I'm friendly :)