Brook UFB + Arduino

Hello. Newbie here. I hope this post doesn’t come across as lazy as I have done my best to do as much research on this as possible before posting it.

Also, as a side-note, this question may come across as me trying to cheat online, so I want to make it clear that I have no intention of using this to cheat at all. I merely wish to experiment with different fighting games using this.

I recently came across a series of posts here and in the programmable stick threads by a user @noodalls who was able to get an Arduino microcontroller to send inputs to a console using a ps360+, and at one point a Brook Universal Fighting Board.

I read his posts and watched some YouTube videos on his channel trying to figure out how he did that.

I am attempting to build a similar device, however, I am struggling with figuring out how to correctly and safely connect the Arduino to the button input pins on the Brook UFB.

I made an attempt to directly connect the digital output pins from an Arduino Mega 2560 to the button pins on the Brook and set the pins HIGH or LOW in an Arduino sketch, but I believe I damaged the board and will need to replace it due to my inexperience (totally my fault for not doing enough research before trying).

Is it possible to do this?

Thank you in advance for any help, and if this is a duplicate or similar post, I apologise, I am new to the forum.

It’s relatively unlikely that you’ve done significant damage to the controller board with the I/O pins from the arduino. I would suggest separating it from the arduino and checking to see if it still works. (Honestly, I’d be more inclined to believe that damage was caused by short circuiting something.)

It’s certainly possible to hook the arduino to a common ground active low controller board. You need to tie the grounds together, and you need to make sure that the currents going through the buttons aren’t too big. I guess you can get into trouble if the voltage on the arduino is too high but both devices are probably running on 5V. The most likely way to damage things is sinking too much current with the arduino I/O pins and burning them out.

Building a programmable controller is a pretty simple project, but you’ll want to understand some basics first.

Thank you! The Brook UFB appears to be powered by 5 volts w and I measured 3.3 volts on the input pins with a multimeter. At first I was sending 5 volts to the input pins without realizing it, which is why I had thought I damaged it (I will test it stand-alone soon to find out). But maybe the board is 5 volt tolerant on the input pins.

What exactly is the purpose of the arduino in this setup? Are you programming macros? Running scripts to execute combos?

Yes, this is exactly what my intention is. I would like to have the arduino connected to the Brook UFB, and have the buttons and joystick of a fightstick connected to the arduino.

The purpose of the setup would be to have the arduino drive the input pins on the Brook UFB when the buttons/stick directions connected to the arduino are pressed. This way I could program macros to execute when, say for example, R1+Y is pressed.

I hope I explained that clearly.

What’s the use case for macros? Curious.

Honestly just to play around with in single player mode in various fighting games such as Mortal Kombat story mode or SFV single player mode.

I’m a software developer and I like to mess around and have fun. I didn’t really have a specific use case, I just thought it would be an interesting project.

That was clear enough. I’d be curious to see how consistent combos executed in this manner are.

… I’d be curious to see how consistent combos executed in this manner are. …

It depends on platform and the game. Some older systems use a polling line once per frame so you can reliably synchronize using that. When I was doing combos on SF4 on the Xbox 360, the frame rate changed depending on whether I was using the VGA video cable or an NTSC one, and was slightly faster when buttons were down. (I ended up setting the programmable controller to just hold down ‘back’ to making timing more consistent.) And, I still have no idea how frames really work on MVC3.

I’ve been doing more research on this and I came across a development board called “GreatFet One” that appears to have the ability to act as both a USB host and a USB device. I’m now wondering if it would be possible to make it such that I can plug in an XBOX 360 controller, or other device such as a fightstick that shows up as an XBOX 360 controller when connected, and have it so that the macros work on whatever device is connected to the GreatFet One.

Link to the board if anyone is curious: https://greatscottgadgets.com/greatfet/one/

I am still around. I haven’t used the programmable stick setup for a long time, I feel most things are on PC now and could be tested just as easily with macro programs.

In five years or so of playing with the setup I never used any diodes or similar, and never ran into any problems. I certainly would take this as advice though, if I knew any better I would have done more. I’ve actually been thinking of rebuilding a setup using the photocouplers I’ve used in my input lag testing.

I’ve thrown in my code beneath. I think this was the last version I wrote. I had planned to rewrite all of this (and may one day) so can’t be quite sure how well it works. It was using a LCD screen and touch screen.

Thank you so much for that! And thank you for the videos that you put together on your YouTube channel, your design of the programmable stick is what inspired me to work on one. The work you’ve done on that, and on input lag testing is incredible.

One question regarding your programmable stick. I understand that you ran wires from the stick’s buttons to the Arduino, but how did you have the Arduino connected to the PS360/Brook UFB? Just directly to the input pins?

I’m not Noodals, but …

… I understand that you ran wires from the stick’s buttons to the Arduino, but how did you have the Arduino connected to the PS360/Brook UFB? Just directly to the input pins?

You will want to connect the ground lines (i.e. the 0V lines) for both together. You’ll probably also end up connecting the power lines together.

Here’s a drawing of how a common ground button might work:

So if the switch is open (like it is in the drawing) then the voltage at the controller pin gets pulled up to +V through the resistor. If the switch is closed, then the controller pin gets pulled down to ground. The resistor works to make sure that the pin goes closer to 0 than to +V, and it prevents a short circuit.

So, on a typical common ground controller PCB the way to simulate pushing a button is to connect to the high side of the connector for that button, and to pull the line low whenever you want to have the button pushed. In practice, you may be able to just hook directly to the arduino but with an unfamiliar set-up there’s a risk that you’ll burn out the pin if there’s too much current.

@Rufus This is wonderful, thank you!