Source: https://mokxi.com/learn/arcade-button-wiring-pro-micro-pico
Updated: 2026-10-05

Learn

# Wiring arcade buttons to a Pro Micro or a Pico

Beginner

Written by the Mokxi team, updated October 5, 2026

Start building free Open the editor

Or see every lesson.

- 261 parts on the bench
- 31 boards running now
- 1.00x real time, on every board

Hold the button

Hold the button: the lamp on GP14 and the Pico’s own LED light while it is down. No resistor on the button, just the internal pull-up.

An arcade button is a plunger with a microswitch under it. Wiring one to a microcontroller takes two wires and no other parts: one to ground and one to a pin. This page covers the details that trip people up: which tabs to use, how to run the ground, which pins to pick on a Pro Micro and a Pico, and how to read the button in code.

The circuit above is a 30 mm arcade button on a Raspberry Pi Pico in Mokxi. Press Run and hold the button: GP15 reads it, and a lamp on GP14 and the Pico’s own LED light while it is held. The fight stick and leverless projects linked below do the same with a full set of buttons on a Pro Micro.

## Which tabs to use

The microswitch under a button usually has two or three tabs. With two, there is nothing to choose. With three, they are common, normally open and normally closed. Connect common and normally open: that pair is open when the button is up and closed while it is pressed. The normally closed tab does the opposite, and a button wired to it reads as held all the time and released while you press it.

Levers work the same way. A lever is four microswitches, one per direction, and many come with a harness of five wires: one ground shared by all four switches, and one wire for each direction.

## One ground for everything

Every button needs a path to ground, but not its own ground wire back to the board. The usual method is a daisy chain: one wire that runs from the ground tab of the first button to the next, and so on, with one end going to a GND pin. The lever’s ground joins the same chain. Each button then needs only one signal wire of its own.

Make sure the chain actually reaches every button. A button whose ground tab was missed is the most common fault in a new stick, and it looks like a dead button or a bad pin. In the simulator you can pull one ground wire and see exactly that.

## Pull-ups, not resistors

A pin with nothing driving it floats and reads random values. The fix is a pull-up: a resistor to the supply that holds the pin HIGH until the switch pulls it to ground. Both the Pro Micro’s ATmega32U4 and the Pico’s RP2040 have one built into every pin, turned on with INPUT_PULLUP, so the button needs no resistor at all. The logic is inverted as a result: a pressed button reads LOW.

Neither board needs anything else for a button. Diodes are only needed for a key matrix, and a controller should not use a matrix: give every button its own pin so any combination can be held at once.

One button, read with the internal pull-up

## Pins on a Pro Micro

The Pro Micro modeled in Mokxi brings out 18 input and output pins: digital 0 to 10, 14, 15 and 16, and A0 to A3, which also work as digital pins. Any of them can read a button. Pins 0 and 1 are the hardware serial port, but a sketch that talks over USB leaves them free, and the fight stick example uses them for two buttons. There is no LED on pin 13; the RX and TX lamps light when their pin is LOW.

The fight stick project puts the lever on pins 2 to 5 and the buttons on 6 to 9, 1 and 0. The leverless project uses 2 to 7 for the buttons, 8 for a mode switch and A0 to A3 for LEDs.

## Pins on a Pico

A Raspberry Pi Pico has 26 GPIO pins on its headers, plenty for a full leverless layout with room for lighting. Any GPIO can read a button with its pull-up on. Plan the layout so each wire run in the case is short and tidy, and keep a written map of which button is on which GP number, because the firmware or sketch needs it.

In Mokxi, the Pico runs Arduino sketches with digitalRead, INPUT_PULLUP and interrupts on every pin. It does not model the Pico’s USB, its PIO blocks or its ADC, so you can test button wiring and logic but not a USB report or PIO-driven lighting.

## Lit buttons

Many arcade buttons can take an LED, and many builds use WS2812 addressable LEDs instead, one or two under each button on a single data wire. On a real Pico the WS2812 timing usually comes from the PIO; on a 32U4 it comes from carefully timed library code. In Mokxi, WS2812 strips run from the ESP32-C3 and C6, so the lighting project is on a C3, with four arcade buttons that each light their own pair of LEDs.

## Check before you solder

Wire the circuit in the simulator the way you plan to wire the case, and run a sketch that prints each button as it changes. If every button prints its own name on the right pin, the harness is right. What the simulator cannot check is the physical side: crimp quality, a loose quick-disconnect or a switch that has worn out. A multimeter on continuity finds those in a minute.

## Questions

Which arcade button tabs do I connect?

Common and normally open. Leave the normally closed tab empty, or the button reads backwards.

Do I need resistors for arcade buttons?

No. Turn on the pin’s internal pull-up with INPUT_PULLUP. The pin reads HIGH when the button is up and LOW when it is pressed.

Can all the buttons share one ground wire?

Yes. Daisy-chain the ground tabs from button to button and run one end to a GND pin. The lever’s ground joins the same chain.

Does Mokxi simulate the Pico as a USB controller?

No. Mokxi runs Arduino sketches on its Pico model but does not model the Pico’s USB, so you test the wiring and the code, not the USB report.

Related

## Keep going

DIY Fight Stick on an Arduino Pro Micro Leverless Controller Build: Buttons, Pins and Code Pull-Up Resistors and the Floating Input They Fix Arduino Button Debounce: See the Bounce, Then Fix It The Pico arcade button project Beginner The fight stick project on a Pro Micro Intermediate The Raspberry Pi Pico simulator Help: the parts games and controllers are made of The project page, with the full sketch Beginner

Sources

## Where the facts on this page come from

- Raspberry Pi: Pico series documentation and pinout
- Arduino reference: pinMode() and INPUT_PULLUP
- SparkFun: Pro Micro hookup guide

## Build this for real

Open the editor, change a value and watch the number move with it. Nothing to install, and no account needed.

Start building free Open the editor
