Edit from the future (July 5, 2020): I have a video that walks through the thought process of this. Check it out here: https://www.youtube.com/watch?v=q9Ul6jhIMxE

I’ve written in the past about my indoor bike trainer.

Well, as it happens one part of the “bike computer” (a Joule 3.0 for those keeping track at home) part of it decided to die last week.

Specifically the resistance button…

This is kind of important. Googling around led to find that this was unfortunately a common predicament.

I tried to open it up but from the construction it seems that I would have to peel away the front cover to get to screws that are underneath it so I can actually take it apart. I stopped trying to repair it at that point.

When I’m simulating riding on a virtual road, this is how I switch virtual gears. Without it I’m kind of screwed. I can also control the system with a keyboard, and for a few times I was doing exactly that, using a wireless keyboard and hitting the “+” and “-” keys to switch gears.

One thing I noticed when I was using the keyboard instead of the ANT connected computer is that things were a lot more responsive.

Using the keyboard sucked. Using the computer now sucked as well. (Even when it was working it was only OK at best)

Then I had an idea. I would build an Arduino controlled doodad that can send USB keyboard commands to emulate me pressing + and – on the keyboard. I started to figure out what it would take this get this working — what does it take to get a controller up and running?

That’s when I had a better idea:

If a controller is what I was making… why not just freaking buy a controller.

I decided on a Buffalo Classic USB Gamepad that looks like it could run a Nintendo emulator. Then I installed JoyToKey and set the shoulder buttons to trigger + and – and I was a happy camper. While I was at it I added controls for some of the other buttons as well and now I have an even fuller functioning remote at my fingertips. Add in some zip-ties and it’s all ready to ride.

$14 later and I have a better solution than what I had started with originally! And this one doesn’t even have batteries that need to get charged!