mockband/README.md

187 lines
4.2 KiB
Markdown
Raw Normal View History

2023-12-31 20:33:29 -07:00
# Mock Band
Microcontroller Firmware to emulate guitar and drum kit controllers from the
Wii version of the Rock Band games.
2024-01-04 13:20:04 -07:00
![Two small plastic guitars and a cheap toy drum pad](docs/mockband.jpg)
2023-12-31 20:33:29 -07:00
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)).
2024-01-04 13:15:24 -07:00
Nicholas was also really nice about answering an email question I sent.
Thanks, Nicholas!
2023-12-31 20:33:29 -07:00
# Parts Needed
* A [Sparkfun Pro Micro](https://www.sparkfun.com/products/12640)
* A physical controller
2024-01-04 13:10:56 -07:00
# Controllers
2023-12-31 20:33:29 -07:00
2024-01-04 13:10:56 -07:00
## Guitar
2023-12-31 20:33:29 -07:00
2024-01-04 13:10:56 -07:00
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.
2023-12-31 20:33:29 -07:00
2024-01-04 13:10:56 -07:00
## Drums
2023-12-31 20:36:07 -07:00
2024-01-04 13:10:56 -07:00
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.
2023-12-31 20:36:07 -07:00
2024-01-04 13:10:56 -07:00
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.
2023-12-31 20:36:07 -07:00
2024-01-04 13:10:56 -07:00
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).
2023-12-31 20:36:07 -07:00
2024-01-04 13:10:56 -07:00
I'm sorry I didn't photograph or record any of this,
but it was pretty straightforward.
2023-12-31 20:36:07 -07:00
2024-01-01 12:42:07 -07:00
2024-01-04 13:10:56 -07:00
# 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
2024-01-01 12:42:07 -07:00
2024-01-04 13:10:56 -07:00
PID `0x004` means "Guitar controller".
2024-01-01 12:42:07 -07:00
2024-01-04 13:10:56 -07:00
leonardo.build.vid=0x1bad
leonardo.build.pid=0x0004
leonardo.build.usb_product="Mockband Guitar"
2024-01-01 12:42:07 -07:00
2024-01-04 13:10:56 -07:00
### 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
2024-01-04 13:15:24 -07:00
![guitar wiring](docs/guitar.png)
2024-01-04 13:10:56 -07:00
| 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
2024-01-04 13:15:24 -07:00
![drum wiring](docs/drums.png)
2024-01-04 13:10:56 -07:00
| 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 |
2024-01-01 12:42:07 -07:00
2024-01-01 14:24:07 -07:00
# Bugs / Not Yet Implemented
2024-01-01 12:42:07 -07:00
I'm tracking things I need to do in the
[forgejo issues](https://git.woozle.org/neale/mockband/issues).
2024-01-01 14:24:07 -07:00
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.
2024-01-04 13:10:56 -07:00
# Need help?
[Email me](mailto:neale@woozle.org),
I'm friendly :)