Vamos con el codigo.
Para empezar, tengo varias y multiples versiones, porque he estado probando diferentes configuraciones, asi que he escogido para colgar el que es un poco mas "generico" para que podias partir de ahi.
(De hecho, yo utilizo una con un solo modo porque he decidido simplificar. Pero tengo algo de codigo extra para poder utilizar un "cuarto snapshot".)
Se necesita una libreria llamada "Onebutton" que he modificado para aceptar pulsaciones de dos botones. Os la pego tambien aqui.
Al principio podeis definir el canal midi, asi como los pines utilizados para cada boton/led. Tambien veis unos valores BRIGHT y DIM que corresponden a el brillo en modo alto y bajo de cada LED. Como veis, tengo un LED que es muy tenue, y he tenido que ajustar los otros para equilibrar.
Tendreis que ajustar estos valores a vuestro hardware
Alguien escribió:
#define MIDICH 1
#define BUTTON_PIN_1 18 //A4
#define BUTTON_PIN_2 19 //A5
#define BUTTON_PIN_3 17 //A3
#define LED_PIN_1 6 //D6
#define LED_PIN_2 5 //D5
#define LED_PIN_3 9 //D9
#define LED1_BRIGHT 150
#define LED2_BRIGHT 255
#define LED3_BRIGHT 80
#define LED1_DIM 4
#define LED2_DIM 20
#define LED3_DIM 2
Os explico como funciona el codigo mas o menos:
Hay una variable
mode que puede tener 3 valores, STOMP, SNAPSHOT y PRESET. Son 3 modos de funcionamiento diferentes segun si quieres controlar presets, snapshots o stomps. En el modo STOMP el boton1 es FS4, el 3 FS5 y el 2 es tap tempo.
Yo en este caso he programado que para cambiar de modo hay que presionar los botones 1+3 a la vez. Es algo que no lo vas a hacer con el pie, asi que si quereis poder cambiar de modo sin agacharos tendreis que cambiarlo.
El ultimo
mode se graba en la EEPROM para que cuando encendais vuelva al mismo modo.
Las funciones interesantes donde podeis meter mano estan a partir de la linea 191, donde pone
"//Change this to select action for each button. Choose actions from list below ". Basicamente hay una funcion definida para cada accion del boton (click, o longclick), y en cada funcion se define para cada modo que es lo que hay que hacer.
Por ejemplo:
Alguien escribió:
case SNAPSHOT :
snapshot(1);
setOnlyLED(1);
Aqui, en modo snapshot llamamos a la funcion snapshot para cambiar a snapshot 1, y luego apagamos todos los LEDs excepto el 1.
En este:
Alguien escribió:
case PRESET :
setOnlyLED(2);
patchNum=patchNum-currentPresetBut+2;
currentPresetBut=2;
currentSnapshot=1;
MIDI.sendProgramChange(patchNum, MIDICH);
EEPROM.update( EEPATCH, patchNum );
estando en modo PRESET, seleccionamos el preset B del banco actual, y lo guardamos en la eeprom.
Al final de todo a partir de la linea 500 teneis algunas funciones utiles que podeis llamar para cambiar presets, banco, activar el afinador, cambiar snapshots, cambiar el modo del HX, etc...
Y a partir de ahi, pues a jugar...!!
Si alguien quieres una version mas sencilla para el de dos pulsadores, me lo decis y lo cuelgo tambien.
Saludos