Multiplexor y arduino uno

Hola soy nuevo en el Foro y en la creacion de un controlador por mi cuenta.

Estoy creando un controlador MIDI para CC# con Arduino Uno, y usando por primera vez un multiplexor (Cd74hc4067)

realice las conexiones correctamente,
asi:
C0-C16 (a cada salida de Potenciometros 10k y Sliders 10k)
GND - A tierra en arduino
VCC - a 5v en arduino
EN - A tierra en arduino
S0 - S3 - Pin Digital 2-5
SIG - Pin Análogo A0

Todo ordenado y soldado pulcramente. PERO…
Nada funciona.
Cambie el multiplexor, la placa Arduino, todo cableado, y los potenciometros.
Incluso probe por separado los potenciometros de los Sliders. y nada…
Si alguien puede aconsejarme al respecto o haya usado este tipo de multiplexores, que pueda dar algun lineamiento para poder terminar este mini proyecto.

Muchas Gracias!
Saludos!

Hola! Bienvenido al foro :slight_smile:

Para usar el multiplexor, desde el código deberías indicarle mediante los pines S0…S3 qué canal de los 16 que posee el integrado, quisieras leer.

No entiendo en esta parte, lo que decís es que conectaste los potenciómetros y los sliders directo a la arduino?

Si compartes el código puedo tener una idea más aproximada del problema para ayudarte.

Saludos!

MCP_14_POTS.rar (3.7 KB)

Hola,

envío el código
probé los potenciómetros y sliders por separado directo a la tarjeta (MEGA) y funciona todo bien, pero quiero usarlos con una UNO, y solo hay 6 pines análogos, y son 14 en este proyecto.

Cuando entra el Multiplexor al juego, nada funciona (he cambiado 4 veces el multiplexor y tengo la misma respuesta)
El error es los mensajes CC# ya sea en su numero como en su valor.

dejo los errores por pin:

Pot MPO1(M2, 0, 0, 102, 1); K1= NO envia señal!
Pot MPO2(M2, 1, 0, 103, 1); K2= 109(0-127) Y 110(0-111)
Pot MPO3(M2, 2, 0, 104, 1); K3= 113(0-127)
Pot MPO4(M2, 3, 0, 105, 1); K4= 105(0-127)
Pot MPO5(M2, 4, 0, 106, 1); K5= 102(0-115) Y 115(0-127)
Pot MPO6(M2, 5, 0, 107, 1); K6= 107(0-127)
Pot MPO7(M2, 6, 0, 108, 1); K7= 111(0-127)
Pot MPO8(M2, 7, 0, 109, 1); K8= 103(0-127)
Pot MPO9(M2, 8, 0, 110, 1); F1= NO envia señal!
Pot MPO10(M2, 9, 0, 111, 1); F2= 108(127-0)
Pot MPO11(M2, 10, 0, 112, 1); F3= 112(127-0)
Pot MPO12(M2, 11, 0, 113, 1); F4= 104(127-0)
Pot MPO13(M2, 12, 0, 114, 1); F5= 114(127-0) Y 102(119-115)
Pot MPO14(M2, 13, 0, 115, 1); F6= 106(127-0)

Hola!

Veo que estás usando una librería, en principio te recomendaría que veas los tutoriales completos de los que desarrollaron esa librería: https://www.notesandvolts.com/search?q=midi+controller+arduino+uno

Luego, revisando el código veo que le estás diciendo que usás 14 potes, pero luego solo definís 8 en esta línea:

Pot *MUXPOTS[] {&MPO1, &MPO2, &MPO3, &MPO4, &MPO5, &MPO6, &MPO7, &MPO8};              //, &MPO9, &MPO10, &MPO11, &MPO12, &MPO13, &MPO14};

Eso puede causar problemas, pq va a ir a buscar potes en la memoria y va a encontrar datos que no tienen nada que ver con lo que busca.

Este comportamiento tiene bastante pinta de que las conexiones de los pines S0…S3 no estén correctamente hechas. El hecho de que un pote esté enviando mensajes que definiste para otro pote, o dos a la vez, o ninguno, suena bastante a que no está direccionando bien.
Luego los faders parecieran tener los pines de 5V y GND intercambiados.

Revisa los tutoriales que te indiqué más arriba, seguramente te ayuden a entender dónde está el error.

Saludos!

Buenas! Vengo haciendo algo parecido con 16 pots, tal vez te sirve esto. Te paso una librería que me vino joya si estás teniendo problema con el código. Está muy bien documentada y funciona bárbaro.

Estoy usando un Arduino pro micro pero creo que el UNO es soportado. Y te adjunto el código que estoy usando.

// Include the library
#include <Control_Surface.h>

// Instantiate a MIDI Interface to use
USBMIDI_Interface midi;
//USBDebug for Serial monitor
//USBDebugMIDI_Interface midi;

// Instantiate an analog multiplexer
CD74HC4067 mux = {
A0, // Analog input pin
{6, 7, 8, 9} // Address pins S0, S1, S2, S3
};

// Create an array of potentiometers that send out
// MIDI Control Change messages when you turn the
// potentiometers connected to the eight input pins of
// the multiplexer
CCPotentiometer volumePotentiometers[] = {
{mux.pin(0), {MIDI_CC::Channel_Volume, CHANNEL_1}},
{mux.pin(1), {MIDI_CC::Channel_Volume, CHANNEL_2}},
{mux.pin(2), {MIDI_CC::Channel_Volume, CHANNEL_3}},
{mux.pin(3), {MIDI_CC::Channel_Volume, CHANNEL_4}},
{mux.pin(4), {MIDI_CC::Channel_Volume, CHANNEL_5}},
{mux.pin(5), {MIDI_CC::Channel_Volume, CHANNEL_6}},
{mux.pin(6), {MIDI_CC::Channel_Volume, CHANNEL_7}},
{mux.pin(7), {MIDI_CC::Channel_Volume, CHANNEL_8}},
{mux.pin(8), {MIDI_CC::Channel_Volume, CHANNEL_9}},
{mux.pin(9), {MIDI_CC::Channel_Volume, CHANNEL_10}},
{mux.pin(10), {MIDI_CC::Channel_Volume, CHANNEL_11}},
{mux.pin(11), {MIDI_CC::Channel_Volume, CHANNEL_12}},
{mux.pin(12), {MIDI_CC::Channel_Volume, CHANNEL_13}},
{mux.pin(13), {MIDI_CC::Channel_Volume, CHANNEL_14}},
{mux.pin(14), {MIDI_CC::Channel_Volume, CHANNEL_15}},
{mux.pin(15), {MIDI_CC::Channel_Volume, CHANNEL_16}},
};

// Initialize the Control Surface
void setup() {
Control_Surface.begin();
}

// Update the Control Surface
void loop() {
Control_Surface.loop();
}

3 Likes

Hola Franco,
Si cuando probé solo potenciómetros quedo el código así. eso lo probé con 8. Olvide cambiar eso al compartir el código, pero tengo clara la configuración básica del código.

Lo otro, cuando soldé los Sliders, y los monté en la caja, quedaron volteados, nada del otro mundo eso lo configuro en la pedalera posterior.

Pero el Multoplexor no funciona como debería funcionar.

Gracias

Hola, creo que hace un tiempo, probe ese codigo.
Ahora arme una protoboard para probar el codigo…
pero no se como configurarlo.
En Hairless, me aparece que los potenciometros estan haciendo Program Change, y yo necesito Control Change de 0 a 127 con CC# asignado a cada potenciometro.
En el codigo aparece esta parte:
{mux.pin(0), {MIDI_CC::Channel_Volume, CHANNEL_1}},
Donde imagino que pin(0) es el pin del Multiplexor (c0)
Cannel_volume… ni idea para que es esto. y Channel_1, sera el canal. en mi caso siempre es canal 1, no varia por CC# o potenciometro.

Gracias, de todas formas-