Pedalera MIDI DIY

ignotus
#85 por ignotus el 30/03/2021
Ayer estuve mirando a ver si sería capaz de adaptar el código del controlador de potenciómetros que tengo (mucho más simple que la pedalera) para que utilice la librería de control.surface y ver si así reducía el uso de memoria (la librería de ResponsiveAnalogRead que uso es muy bestia)... y me acabé echando atrás. Le faltan documentación y ejemplos para que cazurros como yo podamos entender cómo usar las funciones que trae cuando tienes que combinar varias - en este caso procesar un array de potenciómetros multiplexados y por entrada directa, y filtrarlos para eliminar ruido. Seguro que es una tontería, pero me dio tanta pereza ponerme a experimentar para "arreglar" algo que ya funciona, que paso.

Si consigues portar todo el código de la pedalera a control.surface será todo una hazaña!

elias escribió:
Pues sí..mi arduino mega es una elegoo r3. yo creía que era igual a la original, pero no, me alegro que sirva como ejemplo.


No te creas, yo usaba un Mega chino de 6€ y con eso funcionaba - yo creo que es una lotería. Claro que los chinos llevarán componentes periféricos de menor calidad que el original, pero los Atmegas (que son el procesador "central") vendrán todos de la misma fábrica, sea Arduino original o no. De todas formas, no creo que vuelva a utilizar placas Arduino más que para hacer pruebas. Ya he aprendido la lección de que los montajes definitivos con cables dupont no traen más que quebraderos de cabeza a la larga porque son conexiones muy endebles. Con un MCU Atmega (1284, 328 -el que lleva el UNO- o el que necesites), un adaptador FTDI para programarlo y unos pocos componentes pasivos, te haces un Arduino "custom" que ocupa lo mínimo y con todas las E/S bien estañadas.
Subir
2
OFERTAS Ver todas
  • -21%
    Peterson StroboClip HD
    38 €
    Ver oferta
  • Harley Benton ST-20HSS SBK Standard Series
    111 €
    Ver oferta
  • -17%
    PRS SE CE 24 BR
    622 €
    Ver oferta
elias
#86 por elias el 30/03/2021
La documentación en doxygen, para mi es muy complicada tambien, pero hay algunos ejemplos prácticos.
En cuanto a la memoría..en algunos aspectos puede que te parezca hasta peor..pero yo creo que mejora mucho sobre todo en cuanto a la lectura de potenciometros y manejar el ruido de señales midi fantasma.(y manejar el codigo y muchas más cosas nuevas que trae)
Los potenciometros funcionan un poco mejor y creo que si pudieses probarla dejarías de lado la midi.h.

Pero ese trabajo voy a intentar empezarlo yo jeje, tu ya has hecho todo.

No estoy seguro, pero creo que simplemente declarando unos potenciometros de la clase que quieras luego no te hara falta el responsive analog read ni el debounce tieme para los botones ni las pulldown para ver si te quitan un poco de ruido fantasma.

Por ejemplo,voy a declarar un multiplexor, unos pots bankables y unos botones que solo envian una señal midi (no dos,no hace falta debounce) al apretar el botón
Alguien escribió:
CD74HC4067 mux2 = {
8, //Pin SIG on multiplexer, connected to pin(8) on arduino.
{9, 10, 11, 12}, //Pins S0, S1, S2, S3 on multiplexer, connected to pins( 9, 10, 11 and 12 )on arduino.
};
CCButtonLatched pedalswitches[] = {
{ mux2.pin(0), { 77, CHANNEL_1 } }, //Button connected to C0 in multiplexer(mux2)and Ground. CC 77 MIDI signal on channel 1. First pedal effect on/off button (with led state)
{ mux2.pin(1), { 81, CHANNEL_1 } }, //Button connected to C1 in multiplexer(mux2)and Ground. CC 81 MIDI signal on channel 1. Second pedal effect on/off button (with led state)
{ mux2.pin(2), { 85, CHANNEL_1 } }, //Button connected to C2 in multiplexer(mux2)and Ground. CC 85 MIDI signal on channel 1. Third pedal effect on/off button (with led state)
{ mux2.pin(3), { 89, CHANNEL_1 } }, //Button connected to C3 in multiplexer(mux2)and Ground. CC 89 MIDI signal on channel 1. Fourth pedal effect on/off button (with led state)
{ mux2.pin(4), { 93, CHANNEL_1 } }, //Button connected to C4 in multiplexer(mux2)and Ground. CC 93 MIDI signal on channel 1. Fifth pedal effect on/off button (with led state)
{ mux2.pin(5), { 97, CHANNEL_1 } }, //Button connected to C5 in multiplexer(mux2)and Ground. CC 97 MIDI signal on channel 1. Sixth pedal effect on/off button (with led state)
{ mux2.pin(6), { 101, CHANNEL_1 } }, //Button connected to C6 in multiplexer(mux2)and Ground. CC 101 MIDI signal on channel 1. Seventh pedal effect on/off button (with led state)
{ mux2.pin(7), { 105, CHANNEL_1 } }, //Button connected to C7 in multiplexer(mux2)and Ground. CC 105 MIDI signal on channel 1. eighth pedal effect on/off button (with led state)
};


Y ahora los pots (presuponemos que hemos declarado otro multiplexor más)
Alguien escribió:


CCPotentiometer POTSpedalPOTSamp[] = {

{mux3.pin(4), 74}, //Potentiometer connected to C4 in multiplexer(mux3)and Ground. CC 74 MIDI signal on channel 1. Pots pedal (not bankable)
{mux3.pin(5), 75}, //Potentiometer connected to C5 in multiplexer(mux3)and Ground. CC 75 MIDI signal on channel 1. Pots pedal (not bankable)
{mux3.pin(6), 76}, //Potentiometer connected to C6 in multiplexer(mux3)and Ground. CC 76 MIDI signal on channel 1. Pots pedal (not bankable)
{mux3.pin(7), 78}, //Potentiometer connected to C7 in multiplexer(mux3)and Ground. CC 78 MIDI signal on channel 1. Pots pedal (not bankable)
{mux3.pin(12), 79}, //Potentiometer connected to C12 in multiplexer(mux3)and Ground. CC 79 MIDI signal on channel 1.Pots amp (not bankable)
{mux3.pin(13), 80}, //Potentiometer connected to C13 in multiplexer(mux3)and Ground. CC 80 MIDI signal on channel 1.Pots amp (not bankable)
{mux3.pin(14), 82}, //Potentiometer connected to C14 in multiplexer(mux3)and Ground. CC 82 MIDI signal on channel 1.Pots amp (not bankable)
{mux3.pin(15), 83}, //Potentiometer connected to C15 in multiplexer(mux3)and Ground. CC 83 MIDI signal on channel 1.Pots amp (not bankable)
};



Si queremos hacerlos bankables declaramos un banco
Alguien escribió:
Bank<8> bankamp(4); //Declare a bank named bankpedal.<8>bank positions.and(4)IncrementDecrement value


Luego declaramos los pots que van a ser bankables
Alguien escribió:
Bankable::CCPotentiometer POTSbankpedal[] = {

{bankpedal, mux3.pin(0), 37},
{bankpedal, mux3.pin(1), 38},
{bankpedal, mux3.pin(2), 39},
{bankpedal, mux3.pin(3), 40},
};


Y por supuesto el boton que va a cambiar de banco con su array de leds para mostrar el número de banco
Alguien escribió:
IncrementDecrementSelectorLEDs<8> bankSelectorbankpedal = {
bankpedal,
{5, 7}, // button pins connected to digital inputs 5 and 7 in arduino and ground
{30, 31, 32, 33, 34, 35, 36, 37}, // LED pins connected to digital inputs 30-37 in arduino and ground
};


En mi caso, creo que tu pedalera es el dios de las pedaleras..no es por hacerte la pelota,, pero es que es lo que buscaba y con lo que soñaba al empezar este proyecto.
Por lo tanto, me quedaré con tu versión y deshecharé control.surface. sin pensarlo ni un momento..pero creo que debo intentarlo..

Tu pedalera debe tener varias versiones para toda la familia, esto es algo que hay que compartir en estos tiempos, la mia utilizará solo el cable usb y no llevará bluetooth ni batería cargable, es una pena porque es admirable lo que has hecho y me gustaría probarlo pero voy a centrarme en mi proyecto e intentar hacer mi propia version de esa joya que has conseguido hacer tu.

Entiendo cuando dices lo de que tu codigo es nivel parvulitos, pero ya me gustaría a mi tener ese nivel jeje

En tu codigo, yo creo que tiene que ser facil pasar a control surface, yo de momento tengo las dos librerias funcionando
https://pastebin.com/pjyvF7ai

El primer obstaculo sería reemplazar el MIDI.sendprogramchanger por Control.Surface sendCCon
Aquí hay un ejemplo con note en vez de CC..esta noche mirare como hacerlo a ver si puedo avanzar
https://tttapa.github.io/Control-Surface-doc/Doxygen/d3/d08/Custom-MIDI-Sender_8ino-example.html
Subir
ignotus
#87 por ignotus el 30/03/2021
Sí, los ejemplos ya me los miré, y en principio todo claro, pero lo complicado (para mí al menos) empieza cuando quieres integrar otras cosas como:

- Pulsaciones largas de botones para activar otras funciones

- En el controlador de potenciómetros hice para que mientras se gira un pote, los demás se anulan. Esto es porque si están muy juntos a veces accionas el de al lado sin querer. Es un poco rollo explicar cómo lo tengo hecho, pero no veía cómo encajarlo.

- Programar la calibración del pedal cuando no tiene rango 0 - 1023

- etc.

Seguro que se pueden hacer estas cosas pero... el debounce y el filtrado de entradas analógicas y todo lo demás funciona genial ya - si te preocupa eso espera a probarlo primero porque creo que verás que va bien como está. Dicho esto, para nada te quiero desanimar a probar a hacer el cambio de librerías porque haciendo estas cosas se aprende cantidad. Me parece bien cualquier cosa que hagas, que para eso publiqué el código - para usar tal cual o como base para modificarlo/mejorarlo/aprender...

Una cosa - si te animas, te puedo pasar la última versión que tengo que es para usar con Neopixels (WS2812B) en lugar de LEDs, además de alguna función que le he añadido, como activar afinador y mute/unmute. Los Neopixels solo ocupan una entrada digital (da igual cuántos uses) y le dan un toque visual que es la caña. No he publicado el código porque está hecho para usar con un Atmega1284P y no sé si sería mucho rizar el rizo, pero cambiando las asignaciones de los pines se puede usar con un Arduino Mega perfectamente.

Un saludo y gracias por los comentarios!
Subir
elias
#88 por elias el 30/03/2021
Con los leds ws 2812b..solo he conseguido encender un led al color que yo quiera, cuando he querido hacer animaciones arduino me ha dicho pero tu tas loooco???

Al final opté por programar las animaciones en una wemos d1 mini pro y lanzarlas desde el arduino mega, sino era imposible para manejar midi..

Me encantaría que me pasaras ese codigo,,no he sido capaz de hacer nada interesante con estos leds de momento..

Respecto a lo que me dices, tienes razón, yo lo intentaré... pero seguro que ya está bien como está no le hace falta control.surface.

Tengo que entender mucho mejor tu codigo, lo reconozco
Subir
ignotus
#89 por ignotus el 30/03/2021
Ahí va compañero.

Se me habían olvidado algunas cosas más (ya sabía yo que había más razones por las que no lo publiqué): aquí los botones van sin resistencia pull-up (o sea que declarados como (INPUT, PULLUP)) y algunos de esos botones (los que hay en la tapa) van a través de un muxer 4051 - tendrías que eliminar su librería y dejar las asignaciones de los botones como en la versión anterior. También tendrías que copiar y pegar la pestaña de "debounce" de la anterior porque en esta está modificada para funcionar con esa mezcla de botones con/sin muxer. Con eso creo que sería todo.

Si te digo la verdad, pasado un tiempo ni yo mismo entiendo muy bien mi propio código :cabezazos: Cada vez que quiero modificar algo lo tengo que volver a estudiar.
Archivos adjuntos ( para descargar)
Pedalboard_1.12_neopixel_mux_5_banks.zip
Subir
ignotus
#90 por ignotus el 30/03/2021
Perdón: en las variables globales también tendrías que dejar todas las declaraciones de los switches como en el sketch anterior, que también están modificadas por lo del muxer.
Subir
elias
#91 por elias el 30/03/2021
Joe es que menua bestia parda!!
..mira yo ahora estoy intentando cambiar el 4051 por un 4067 y casi que mejor voy a pillar un mux 4051 que tengo por ahi en el almacen..

De momento te digo lo que estoy haciendo..

Viendo mis capacidades actuales sobre las dos librerias... e imaginandome como quedaría el codigo una vez traducido a la nueva librería...
He contactado con el dueño,señor y creador de las dos librerias, le he preguntado sobre la posibilidad de abrir un hilo sobre el tema e ir traduciendo el codigo a la nueva librearía..

Yo creo que quedará un poquito más sencillo. y me da la sensación que quedarás contento y con más posibilidades de mejora y encima igual yo entiendo un par de cosas más .

Y yo voy a tomarme las cosas con paciencia.. y voy a probar el codigo que me has pasado antes..y voy a intentar ponerme un poco al dia, menuda dulce bofetada ha sido recibir tu pedalera jeje
Subir
elias
#92 por elias el 31/03/2021
Imposible..lo he intentado..pero no sé que librerias me faltan..no me compila...me dice que los void no están declarados.

He instalado la librería mapfloat varias con mux 4051....he estado probando muchas cosas pero nada no consigo que me compile.
Podrías pasarme las librerias de mux?
Creo que no voy a poder probarlo.

edito: He estado muchas horas y ya me doy por vencido..no sé como haces para cambiar pin por sigPin en la libreria de multiplexor , supongo que te ha obligado la librería fastled, pero me voy a la cama deprimido, mañana no creo que este mucho con esto..si vuelvo será con mi codigo que por lo menos algo si que entiendo.
Me viene muy grande tu proyecto, tan grande que deprime
Subir
ignotus
#93 por ignotus el 31/03/2021
Hola,

Sí, tuve que cambiar la librería del muxer porque había conflicto con FastLed - te la adjunto modificada. Ya siento - es otro detalle que se me olvidó comentar y otra razón por la que no publiqué esta versión...

Podemos hacer esto: dime qué es lo que quieres modificar en el código (vamos, qué resultado quieres obtener), y yo te intento explicar qué parte hay que modificar y cómo funciona. Por ejemplo, añadir más bancos de presets, cambiar las notas MIDI, cosas así. Lo de cambiar a otras librerías lo veo demasiado complejo porque creo que la estructura de mi código es muy enrevesada; como digo, seguro que hay maneras de conseguir lo mismo sin tanta complejidad, pero habría que reescribirlo todo desde los cimientos - creo que poco se podría aprovechar aparte de los arrays de imágenes. En realidad está pensado para montar el circuito, con cada conexión en su sitio, y utilizar el código tal cual, ya que pese a su escasa "elegancia" y la dificultad de desentrañar cómo está hecho (incluso para su autor), funciona. Cambiar nombres de presets, notas MIDI o incluso añadir más bancos es relativamente fácil, pero cualquier cambio más profundo es complicado.
Archivos adjuntos ( para descargar)
Analog-Digital_Multiplexers.zip
Subir
elias
#94 por elias el 31/03/2021
Sí, perdona que ayer flipé con el tema..
El problema es que no consigo que compile y me encantaría ver que has conseguido hacer con fastled y los neopixel.

No sé que me pasa pero no compila nunca, me da fallo de que no tengo declaradas las funciones void, empieza por bootsequence o tuner o bankpresets,da igual, siempre da fallo de compilacion.
No sé si será fallo de la libreria fastled...
La libreria de analog digital multiplexers que me has pasado ya la he metido.

Aspiro a probar tu sketch tal y como está sin cambiar nada, con el multiplexer 4051 puesto, ya que no me atrevo a cambiar los arrays de botones ni las constantes globales para esos botones..de momento jejej nada me funciona.

Si vuelvo al sketch que si me compila perfectamente y que mola un huevazo ver la pantalla que te has currado, las animaciones de leds etc etc (en serio, aun tengo el esguince mental de ver lo que hiciste.. a ver si me recupero)..
Si vuelvo a ese sketch...de momento me entero de muy poco..voy a intentar a provechar el tiempo que tengo hoy y me voy a centrar en ese sketch y dejar los neopixels de lado...me da pena..pero hoy tengo que avanzar.

Gracias!!
Subir
ignotus
#95 por ignotus el 31/03/2021
Tienes que sustituir el archivo "images.h" por el que te adjunto en la carpeta de la librería de "marekburiak_ILI9341" - oootra cosa que he pasado por alto. Tiene añadida una pequeña imagen de un afinador (no creo que te de problemas de memoria) porque añadí notas MIDI para activar afinador (pulsación larga del botón de looper) y mute/unmute (pulsación larga de botón de stomp pedals). Creo -CREO- que con esto ya debería compilarse bien...
Archivos adjuntos ( para descargar)
images.h
Subir
1
elias
#96 por elias el 31/03/2021
compilao.
Gracias!!!!

Edito:permitidme un video de youtube porque es que esto es paverlo,solo hay una tira de ledstrip con 9 leds y es la primera prueba que hago..patrocina leches mercadona
https://youtu.be/EoB76IpAQk8


Edito2:DUDAS: Para la parte con potenciometros utilizas otro dispositivo?? me surge esa duda para empezar a hacer la parte que llevara unos 15 potenciometros..
No encuentro ninguna parte en tu codigo donde tengas declarados potenciometros para amplis o pedales..me imagino que tendriamos que añadirlos nosotros..
la duda me surge porque no se como declarar estos potenciometros (debería saberlo.. pero de momento..)si los declaro como que vayan cambiando CC en cada cambio debanco no se que CC hay libres en tu codigo (0-127), lo malo es que si son CC, como creo que deben ser, utilizaría todos del 0 al 127, no quedaría sitio para nada más . O es que igual se puede declarar los potenciometros asociados a una nota musical??...entonces resumo ¿hace falta otro arduino para los potenciometros? ¿como declaro estos potenciometros como CC o como notas musicales?

Quiero puntualizar lo fácil que es montarse esta pedalera, antes necesitabamos un puñado de leds y resistencias, ahora es flipantemente sencillo montarla:

-Una tira de leds ws2812b (yo de momento utilizo 6 pero lo suyo es poner 9)
-Diez botones
-Un arduino y un cable usb
-Un chip multiplexor 4051
-Un rectificador de voltaje lógico de 5 a 3,3v
-Una pantalla ili 9341
-Un jack hembra de 6,5 mm y tu pedal de expresion/volumen o lo que se te ocurra..
- cableado,estaño

Le flasheas hiduino a tu arduino o utilizas programas para la comunicacion usb MIDI (hairless o loopbe1..)le instalas las librerias a tu IDE de arduino, le subes el sketch de ignatus666 y a disfrutar..
Subir
1
Hilos similares
Nuevo post

Regístrate o para poder postear en este hilo