Easy Arduino MIDI Controller

This guide is under development

In this guide we’ll build two simple triggers that can be assigned to any MIDI note—or any other MIDI value, like CC (control change) messages. Arduino will be recognized as a MIDI device by your computer, and the two triggers can control any software that responds to MIDI input.

The project is deliberately minimal and exemplary of core principles. Once you understand how it works, you can expand it: add more triggers, create combinations that send different MIDI values, or replace the buttons with other components—faders, knobs, various types of sensors. The architecture scales with your needs.

This project is the foundation of the triggers I’ve installed on my double-bell clarinet.

!!! Arduino Micro: Native MIDI Device !!!

Some Arduino boards are equipped to be recognized natively as MIDI USB devices—exactly like a MIDI keyboard or controller. This includes Arduino Leonardo, Arduino Due, and Arduino Micro, which we’ll use in this guide. Once you upload the code, your computer recognizes it immediately as a MIDI input device in your DAW (Reaper, Logic, Pro Tools, etc…), with no additional software required.

If you’d prefer to build a similar project using Arduino Nano—a more widely available and easier-to-find variant that doesn’t have native MIDI USB support—you’ll need to follow a different approach using Max/MSP for serial-to-MIDI conversion. See the [Arduino Nano guide] for that workflow.

What You Need

  • Arduino Micro
  • 2× momentary push buttons (triggers)
  • 2× 1kΩ resistors
  • Breadboard & jumper wires

Circuit Schematic

Both triggers work by closing a circuit between GND and a digital pin. Here’s how it works:

Understanding the Trigger Buttons

Each trigger button has 4 pins arranged in two pairs. When you press the button, it shorts one pair of pins together. The two pairs are electrically identical—they’re mirrored—so you can use whichever pins are most convenient for your layout. You only need to connect one pair.

The Wiring

  • GND (Ground): A single GND wire from Arduino runs to both triggers, connecting to one pin of each button.
  • Signal pins: The other pin of each trigger connects to Arduino digital pins D2 and D3 respectively.
  • Resistors: A 1kΩ pull-down resistor sits between each trigger pin and GND, ensuring stable readings (no floating states).

When you press a trigger, it pulls its pin to GND (LOW). When released, the resistor pulls it back to a defined state. Arduino reads these state changes and sends the corresponding MIDI note.

Why Use 1kΩ Resistors? (Pull-Down Resistors)

When a button is not pressed, the Arduino pin can “float” between HIGH and LOW states, causing false readings. The 1kΩ resistor solves this by:

  • Pulling the pin LOW when the button is open (not pressed)
  • Allowing the pin to go HIGH when the button connects 5V
  • Limiting current and preventing accidental shorts
  • Providing stable, predictable readings for reliable triggering

Without the resistor, you might get random MIDI notes firing or missed triggers. With it, your buttons work reliably every time.