Close

circuit python, usb hid descriptors can suck a dick, Freecad is fantastic.

A project log for [on hold]projectSpigot

developing a standalone opensource gamepad to fill the gap left by the discontinuation of the Steam Controller, the greatest controller ever

ticktokTicktok 03/20/2021 at 02:370 Comments

Switched microcontroller the the Feather Bluefruit Sense. It's got a built in gyro, bluetooth, lipo charging, and works with circuit python.  I'm still not 100% sold on circuit python, but the ability to modify the code without an ide or anything required to flash it is pretty friendly, and one of my main goals with this project is to keep it open to the community.

I've got the circuit python library for the cirque touchpads working, and redesigned the ciruit python usb hid gamepad descriptor to have more values. So now it can support 16 buttons, a hat switch, and 6 axis(left stick x/y, right stick x/y, left trigger, right trigger.)

I modeled a rudimentary controller frame in FreeCAD to affix the pads, the breadboards, and start attaching buttons and such to.

Some of the discussion on r/SteamController about a SC2 some people have suggested 6 facebuttons like sega genesis, which sounded pretty great to me, so I'm going to add that.  Another suggestion was pressures sensative pads instead of click. So I'm going to test putting Force Sensitive Resistors(FSRs) behind the pads and see how that feels.

I just received my hall effect sensors that I'm going to use for the triggers. Need to model and print a trigger mechanism and test it out. I hadn't realized until recently that the Steam Controller already uses hall effect triggers.

I think I've got it figured out how I'm going to wire the buttons.  It's 18 buttons total

The cirque touchpads can actually take in 3 buttons and report them over their spi/i2c packet, but 1 of those buttons shares a spot with the in built "tap" software button, so I'm just going to attach the L/R shoulder/trigger buttons to the touchpad inputs, then matrix the other 16 buttons to reduce input pins. We'll see how well this works with circuit python or if there will be too much input latency.

I'm still considering swapping to the arduino nano rp2040 connect. It'll still run circuit python, and has built in bluetooth and imu, but has much more gpio, and the gpio is ran through the PIO cores, which might be able to drive the matrix fast enough.

Still need to test swapping between sending gamepad/keyboard/mouse inputs or sending all at once. Once I get all the inputs wired up and mounted to the 3d printed frame I think this'll go faster.

Doing some tutorials to practice surface modeling in FreeCAD so I can get a more rounded/organic design like the steam controller's housing.

I've also been brainstorming my vision for customizing input. First stage will just be a simple text file on the flash memory that can be edited from the pc it's plugged in. Next stage will be editing/selecting the configs on the fly using the controller's oled display. Next stage will be a pc app that can map those configs(and one day swap configs depending on what app is focus/running. Stretch goals is maybe a phone app.

Discussions