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.

NANO EVERY $11.00
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

http://thenorthwestenterprise.com/wp-content/uploads/2020/07/Whammy/Whammy_Control_Final.ino

 

// DigiTech Whammy IV - MIDI Controller.
// by Cameron @the.nw.enterprise, http://thenorthwestenterprise.com/
// 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() {

//MIDI.begin(MIDI_CHANNEL_OMNI);
Serial1.begin(31250);
delay(100);
setProgram(currentprogram);
pinMode(upButton, INPUT_PULLUP);
pinMode(dnButton, INPUT_PULLUP);
}

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

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

void setProgram(uint8_t p) {
Serial1.write((uint8_t)0xC0);
Serial1.write((uint8_t)p);}