Loading

MIDI foot controller

by Amplivibe, published

MIDI foot controller by Amplivibe Nov 15, 2015
0 Share
Download All Files

Thing Apps Enabled

Order This Printed View All Apps

Contents

Tags

License

Use This Project

Give a Shout Out

If you print this Thing and display it in public proudly give attribution by printing and displaying this tag.

Print Thing Tag

Thing Statistics

1548Views 229Downloads Found in Music

Summary

I got the Eventide H9 for almost a year and i just love the pedal. Except that it just doesn't have enough buttons :-) Preset switching is a pain in the %$#, especially if you also want to tap tempo, adjust volume, use the 'hotknob' as a pedal and use the 'performance' button as well. I know that this is specifically for the H9, but I can imagine you can have the same feeling as well for other gear.

Features:

The foot controller has 2 expression pedal inputs and 8 momentary buttons and was made using an Arduino Uno.

Preset mode:
Page Up, Page Down, Tuner, Mode
Preset 1, Preset 2, Preset 3, Preset 4

Looper mode (didn't use this in the video):
Direction switch, Octave switch, Tuner, Mode
Record, Play, Stop, Empty

Source code on github:

https://github.com/jackha/midi-footcontroller-arduino

Youtube:

https://www.youtube.com/watch?v=iySvyHlC4qQ

https://youtu.be/PKquv8TrxEU

Post-Printing

To build this thing you need...

  • 8 momentary footswitch buttons "SPST Momentary Soft Touch Push Button Stomp Foot Pedal Electric Guitar Switch"

  • 8 LED thingy "WS2812 5050 RGB Built-in LED 8 Colorful LED Module for Arduino Dropshipping"

  • An Arduino UNO

  • 2 stereo female jack plugs

  • a female midi jack + 220 Ohm resistor

  • pin headers: you solder the wire on the pin header, then connect it into the arduino

  • wires, soldering iron

Anything unclear? Ask! (I'm not very good at detailed descriptions)

More from Music

view more

All Apps

3D Print your file with 3D Hubs, the world’s largest online marketplace for 3D printing services.

App Info Launch App

Auto-magically prepare your 3D models for 3D printing. A cloud based 3D models Preparing and Healing solution for 3D Printing, MakePrintable provides features for model repairing, wall thickness...

App Info Launch App

Kiri:Moto is an integrated cloud-based slicer and tool-path generator for 3D Printing, CAM / CNC and Laser cutting. *** 3D printing mode provides model slicing and GCode output using built-in...

App Info Launch App
KiriMoto Thing App

With 3D Slash, you can edit 3d models like a stonecutter. A unique interface: as fun as a building game! The perfect tool for non-designers and children to create in 3D.

App Info Launch App

Print through a distributed network of 3D printing enthusiasts from across the US, at a fraction of the cost of the competitors. We want to change the world for the better through technology, an...

App Info Launch App

Quickly Scale, Mirror or Cut your 3D Models

App Info Launch App

3D Print a wide range of designs with Treatstock. Easy to use tools to get the perfect result. The global 3D printing network that connects you with high-quality and fast working print services nea...

App Info Launch App

I am working on a similar project for an Irig Pro Duo. So far I am able to switch on and off pedals, put not able to switch presets.

//Arduino foot pedal switch/light contollor
//By Christopher M George
//04/6/2016 ver0.6
//04/3/2016 ver0.1

// used Libraries

include

SoftwareSerial mySerial(11, 10);

include

// this setups the foot buttons

include

ifdef AVR

include <avr/power.h>

endif

define PIN 12 // Pin used to communicate to pixels

define NUMPIXELS 10 // can be expanded to every switch

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

const byte ROWS = 2; //both can be expanded
const byte COLS = 5; //for switch matrix
char hexaKeys[ROWS][COLS] = {
{'0','1','2','3','4'},
{'5','6','7','8','9'}
};//Important to set keypad to switch matrix
byte rowPins[ROWS] = {9, 8}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {7, 6, 5, 4, 3}; //connect to the column pinouts of the keypad

Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
//initialize an instance of class NewKeypad
//variables used through out for lights
int pixelg=230;
int pixelr=255;
int pixelb=25;
int x;
int y;
int currentProgram = 0x16;
int lstat[NUMPIXELS];
int lights[10]= {5, 6, 7, 8, 9, 4, 3, 2, 1, 0};
int blights[10]= {4, 3, 2, 1, 0, 5, 6, 7, 8, 9};
int blevel=0;
int trigger=5;
int bank= 0;
int inByte = 0;
void setup() {
for(int i=0;i<10;i++){
lstat[i]=0;
}
Serial.begin(9600);
mySerial.begin(31250);
pixels.begin();
colorWipe();
}

void loop() {
colorSelect(inByte);
char customKey = customKeypad.getKey();
if (customKey== '0'){
lstatcheck(0);
noteSW(0,lstat[0]);
colorSweep(pixelr,pixelg,pixelb);
} else if (customKey== '1'){
lstatcheck(1);
noteSW(1,lstat[1]);
colorSweep(pixelr,pixelg,pixelb);
} else if (customKey== '2'){
lstatcheck(2);
noteSW(2,lstat[2]);
colorSweep(pixelr,pixelg,pixelb);
} else if (customKey== '3'){
lstatcheck(3);
noteSW(3,lstat[3]);
colorSweep(pixelr,pixelg,pixelb);
} else if (customKey== '4'){
lstatcheck(4);
noteSW(-4,lstat[4]);
colorSweep(pixelr,pixelg,pixelb);
} else if (customKey== '5'){
lstatcheck(5);
noteSW(5,lstat[5]);
colorSweep(pixelr,pixelg,pixelb);
} else if (customKey== '6'){
lstatcheck(6);
noteSW(6,lstat[6]);
colorSweep(pixelr,pixelg,pixelb);
} else if (customKey== '7'){
lstatcheck(7);
noteSW(7,lstat[7]);
colorSweep(pixelr,pixelg,pixelb);
} else if (customKey== '8'){
lstatcheck(8);
noteSW(8,lstat[8]);
colorSweep(pixelr,pixelg,pixelb);
} else if (customKey== '9'){
lstatcheck(9);
noteSW(-9,lstat[9]);
colorSweep(pixelr,pixelg,pixelb);
}
}
void colorSweep(int r,int g,int b){
for(int i=0;i<NUMPIXELS;i++){
if (lstat[i]==0){
pselect(lights[i],0,g,b);
}else{
pselect(lights[i],r,0,0);
}
}
pixels.show();
}

void pselect(int i, int r,int b, int g) {
pixels.setPixelColor(i, pixels.Color(r,g,b));
}

void lstatcheck(int p){
if (lstat[p]==0){
lstat[p]=1;
} else {
lstat[p]=0;
}
Serial.println(p);
}

void colorSelect(int c){
if (c==0){
pixelg=230;
pixelr=255;
pixelb=25;
}else if (c==1){
pixelg=130;
pixelr=125;
pixelb=255;
}
}

void colorWipe() {
for(int i=0;i<NUMPIXELS;i++){
pselect(i,0,pixelg,pixelb);
pixels.show();
}
}

void noteSW(int pitch, int switcher){
int Cnote = 0x16;
if (switcher==0){
noteOn(0xB0,Cnote+pitch, 0x00);
}else {
noteOn(0xB0,Cnote+pitch, 0x45);
}
}
// Send a two byte midi message 4/6/16
void midiProg(int status1, int data ) {
mySerial.write(status1);
mySerial.write(data);
}

void noteOn(int cmd, int pitch, int velocity) {
mySerial.write(cmd);
mySerial.write(pitch);
mySerial.write(velocity);
}
Maybe this might help on some of your coding as well

Top