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
https://thenorthwestenterprise.com/wp-content/uploads/2020/07/Whammy/Whammy_Control_Final.ino
// DigiTech Whammy IV - MIDI Controller. // by Cameron @the.nw.enterprise, https://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);}