So, this is a simple controller for a Digi Whammy.

The ones with MIDI have reasonable direct PC-message calls for presets, but NOT great increment/decrement controls.. so that is what this does.


The build is straightforward, and cost maybe $20. I built i on a NANO EVERY.. but that board is a little big for this case. I wish I had used a Pro Micro.

Enclosure 1590A $4.99
Switches 2 x $2.09 is $4.18
LED 1 x $1.15 is $1.15
power jack $0.75
Midi Jack $1.50
Total $23.57


The physical housing I already had- it got rejected from a different project. But it is this:

I drilled another hole for the MIDI jack.. and it was a tight fit:

But it fit. You can certainly do this in a 1590A.


Typical wiring. well documented in my other posts:


Now. The trick here was the code. The Whammy only supports this:


As you can see.. no easy up/down. So I had to write it in. Had some help from people, but here is the final code:

note- i haven’t tested this on the Whammy yet. It might be off by one, if they code PC0= PC1. I will update after I test it


// DigiTech Whammy IV - MIDI Controller.
// by Cameron @the.nw.enterprise,
// Adapted from MichaelJGuitar 2013 and help from GrumpyMike, as always
// Switch allows changing of Whammy preset.
// Configured to increment or decrement with a footswich buttonpress

#include <MIDI.h>
MIDI_CREATE_INSTANCE(HardwareSerial, Serial1, MIDI);

const int upButton = 8;
const int dnButton = 6; //your input pins- wire to footswitches

int upbuttonstate = 0;
int lastupbuttonstate = 0;
int dnbuttonstate = 0;
int lastdnbuttonstate = 0;
int currentprogram = 1;

void setup() {

pinMode(upButton, INPUT_PULLUP);
pinMode(dnButton, INPUT_PULLUP);

void loop() {
// define increment button action
upbuttonstate = digitalRead(upButton);
if(upbuttonstate != lastupbuttonstate)
{if (upbuttonstate == LOW)
delay (175);
if(currentprogram > 17) currentprogram = 1;
else { }
// define decrement button action
dnbuttonstate = digitalRead(dnButton);
if(dnbuttonstate != lastdnbuttonstate)
{if (dnbuttonstate == LOW)
delay (175);
if(currentprogram < 1) currentprogram = 17;
else { }

//set variable
lastupbuttonstate = upbuttonstate;
lastdnbuttonstate = dnbuttonstate;

void setProgram(uint8_t p) {