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();
}