Controlador midi Footswitch con arduino, código, esquema y algunas fotos.

Lautarotanok
#1 por Lautarotanok el 26/12/2020
Hola a todos estoy haciendo un footswitch Diy para mi eleven rack en arduino uno y una impresora 3d pero no me ha llegado el abs, no va conectado por midi usb sino que va conectado por puerto de midi físico en mi caso voy a integrar 8 pulsadores para midi y dos por medio de la coneccion footswitch del eleven rack para cambiar de bancos, con los pulsadores midi controlo on y off de distorsión, modulación, delay, reverb, fx loop, fx1, fx2 y tap tempo por lo cual este esquema sirve para controlar diversos dispositivos, incluso con el mismo esquema se puede hacer un disparador de loops o lo que se les ocurra que no necesite sensibilidad en los pulsadores, y si! es posible añadir unos potenciometros, dejo links de las paginas en ingles y español.

https://www.makeuseof.com/tag/make-midi-controller-arduino/
https://www.electrogeekshop.com/fabrica-tu-propio-controlador-midi-con-arduino/

Materiales cable DIN de 5 polos hembra
2 resistencias de 220 ohmios
8 interruptores momentáneos,
8 resistencias de 10k ohmios
hilos para conexión
un tablero de circuitos,
cable MIDI y un dispositivo MIDI o interfaz USB.

libreria midi para arduino
https://github.com/FortySevenEffects/arduino_midi_library/

Soft de monitoreo
http://www.midiox.com/ win
https://www.snoize.com/MIDIMonitor/
https://kmidimon.sourceforge.io/

Código final que no es el de los tutoriales ya que necesitaba que cada pulsador envíe un velocity de 127 para encender y un 63 para apagar, el pulsador 8 esta dedicado a tap tempo y es el único que utiliza el código del tutorial
2d82d4745682c9900dcb14a6d07bc-4744997.png Esquema
dc308da5ebb1331bb782b663cdea4-4744997.jpg Asi va mi proyecto

si hay dudas no duden en preguntar, hoy es mi primer dia en arduino por lo que mi conocimiento es nulo pero ya anda a la perfección, seguramente nos podamos ayudar con algunos hispasonicos.

el código



#include <MIDI.h>
#include <midi_Defs.h>
#include <midi_Message.h>
#include <midi_Namespace.h>
#include <midi_Settings.h>
MIDI_CREATE_DEFAULT_INSTANCE();

const int buttonOne = 2; // assign button pin to variable
const int buttonTwo = 3; // assign button pin to variable
const int buttonThree = 4; // assign button pin to variable
const int buttonFour = 5; // assign button pin to variable
const int buttonFive = 6; // assign button pin to variable
const int buttonSix =7; // assign button pin to variable
const int buttonSeven = 8; // assign button pin to variable
const int buttonEight= 9; // assign button pin to variable

int buttonState1 = 0; // se asignan 3 variables para cada boton
int lastButtonState1 = 0;
int toggleState1 = 0;

int buttonState2 = 0; // se asignan 3 variables para cada boton
int lastButtonState2 = 0;
int toggleState2 = 0;

int buttonState3 = 0; // se asignan 3 variables para cada boton
int lastButtonState3 = 0;
int toggleState3 = 0;

int buttonState4 = 0; // se asignan 3 variables para cada boton
int lastButtonState4 = 0;
int toggleState4 = 0;

int buttonState5 = 0; // se asignan 3 variables para cada boton
int lastButtonState5 = 0;
int toggleState5 = 0;

int buttonState6 = 0; // se asignan 3 variables para cada boton
int lastButtonState6 = 0;
int toggleState6 = 0;

int buttonState7 = 0; // se asignan 3 variables para cada boton
int lastButtonState7 = 0;
int toggleState7 = 0;

MIDI_CREATE_INSTANCE(HardwareSerial,Serial, midiOut); // create a MIDI object called midiOut

void setup() {
MIDI.begin(1);
pinMode(buttonOne, INPUT_PULLUP);// setup button as input Pullup
pinMode(buttonTwo,INPUT_PULLUP); // setup button as input Pullup
pinMode(buttonThree,INPUT_PULLUP); // setup button as input Pullup
pinMode(buttonFour,INPUT_PULLUP); // setup button as input Pullup
pinMode(buttonFive,INPUT_PULLUP); // setup button as input Pullup
pinMode(buttonSix,INPUT_PULLUP); // setup button as input Pullup
pinMode(buttonSeven,INPUT_PULLUP); // setup button as input Pullup
pinMode(buttonEight,INPUT); // setup button as input
Serial.begin(31250); // setup MIDI output
}

void loop() {
buttonState1 = digitalRead(buttonOne);
delay(10); // software de-bounce

if(buttonState1 != lastButtonState1 && buttonState1 == 1 && toggleState1 == 0) {
MIDI.sendControlChange(25, 127, 1);
delay(250);
toggleState1 = 1;
}
else if(buttonState1 != lastButtonState1 && buttonState1 == 1 && toggleState1 == 1) {
MIDI.sendControlChange(25, 0, 1);
toggleState1 = 0;
}
lastButtonState1 = buttonState1;


buttonState2 = digitalRead(buttonTwo);
delay(10); // software de-bounce

if(buttonState2 != lastButtonState2 && buttonState2 == 1 && toggleState2 == 0) {
MIDI.sendControlChange(50, 127, 1);
delay(250);
toggleState2 = 1;
}
else if(buttonState2 != lastButtonState2 && buttonState2 == 1 && toggleState2 == 1) {
MIDI.sendControlChange(50, 0, 1);
toggleState2 = 0;
}
lastButtonState2 = buttonState2;


buttonState3 = digitalRead(buttonThree);
delay(10); // software de-bounce

if(buttonState3 != lastButtonState3 && buttonState3 == 1 && toggleState3 == 0) {
MIDI.sendControlChange(28, 127, 1);
delay(250);
toggleState3 = 1;
}
else if(buttonState3 != lastButtonState3 && buttonState3 == 1 && toggleState3 == 1) {
MIDI.sendControlChange(28, 0, 1);
toggleState3 = 0;
}
lastButtonState3 = buttonState3;



buttonState4 = digitalRead(buttonFour);
delay(10); // software de-bounce

if(buttonState4 != lastButtonState4 && buttonState4 == 1 && toggleState4 == 0) {
MIDI.sendControlChange(36, 127, 1);
delay(250);
toggleState4 = 1;
}
else if(buttonState4 != lastButtonState4 && buttonState4 == 1 && toggleState4 == 1) {
MIDI.sendControlChange(36, 0, 1);
toggleState4 = 0;
}
lastButtonState4 = buttonState4;



buttonState5 = digitalRead(buttonFive);
delay(10); // software de-bounce

if(buttonState5 != lastButtonState5 && buttonState5 == 1 && toggleState5 == 0) {
MIDI.sendControlChange(107, 127, 1);
delay(250);
toggleState5 = 1;
}
else if(buttonState5 != lastButtonState5 && buttonState5 == 1 && toggleState5 == 1) {
MIDI.sendControlChange(107, 0, 1);
toggleState5 = 0;
}
lastButtonState5 = buttonState5;




buttonState6 = digitalRead(buttonSix);
delay(10); // software de-bounce

if(buttonState6 != lastButtonState6 && buttonState6 == 1 && toggleState6 == 0) {
MIDI.sendControlChange(63, 127, 1);
delay(250);
toggleState6 = 1;
}
else if(buttonState6 != lastButtonState6 && buttonState6 == 1 && toggleState6 == 1) {
MIDI.sendControlChange(63, 0, 1);
toggleState6 = 0;
}
lastButtonState6 = buttonState6;



buttonState7 = digitalRead(buttonSeven);
delay(10); // software de-bounce

if(buttonState7 != lastButtonState7 && buttonState7 == 1 && toggleState7 == 0) {
MIDI.sendControlChange(86, 127, 1);
delay(250);
toggleState7 = 1;
}
else if(buttonState7 != lastButtonState7 && buttonState7 == 1 && toggleState7 == 1) {
MIDI.sendControlChange(86, 0, 1);
toggleState7 = 0;
}
lastButtonState7 = buttonState7;
if(digitalRead(buttonEight) == HIGH) { // check button state
delay(10); // software de-bounce
if(digitalRead(buttonEight) == HIGH) { // check button state again
midiOut.sendControlChange(64,127,1); // send a MIDI CC -- 64 = note, 127 = velocity, 1 = channel
delay(250);
}

midiOut.sendControlChange(64,127,1); // send a MIDI CC -- 25 = note, 63 = velocity, 1 = channel
delay(250);
}



}
Subir
2
Carlos
#2 por Carlos hace 2 semanas
Interesante, estaré atento por si subes actualizaciones de tu proyecto. Estoy pensando en montarme uno. 🎶
Subir
Alexmx03
#3 por Alexmx03 hace 2 semanas
Vas a imprimir la carcasa en abs? Imagino que tendrás experiencia, el abs es un poco delicado a la hora de imprimir sobre todo piezas grandes, si no mantienes una temperatura constante en todo el proceso vas a tener problemas.
Subir
Carlos
#4 por Carlos hace 2 semanas
Pues..... no tenga nada de experiencia, pero me suelo meter en fregados de este estilo.... había pensado en comprar una caja de aluminio de las que ya venden hechas para este tipo de proyectos.
Subir
Lautarotanok
#5 por Lautarotanok hace 2 semanas
#2 hola tan pronto pueda subo actualizaciones, por ahora he añadido un jack y el código para conectar un pedal de expresión, el tema es que ahora tengo que buscar la manera de que además de enviar mensajes midi también los reciba para que actualice los estados.
Subir
Lautarotanok
#6 por Lautarotanok hace 2 semanas
#3 Intenté con petg que es el material más resistente que soporta mi impresora da vinci jr 1.0 pero la verdad no me gusta el resultado, creo que voy a optar por una carcasa de aluminio ya echa.
Subir
Lautarotanok
#7 por Lautarotanok hace 2 semanas
#4 definitivamente es la mejor opción por resistencia, robustez y apariencia, yo estoy en las mismas.
Subir
Hilos similares
Responder

Regístrate o para poder postear en este hilo