Asking for help on dyi MCU MIDI CC controler

I had worked a week on using Control_Surface.h to DYI a (Mackie Control Universal) MCU MIDI CC controller: 3 buttons for play,record and stop. also have 3 slider potentiometers, for semding midi cc control change message(CC1,CC3,CC11).

the buttons are ok now . but the slider potentiometers just can not work.
anyone here please help me out of that, I'll be appreciate.
thsnks


#include <Control_Surface.h>


USBMIDI_Interface usbmidi;
 

CCPotentiometer potentiometers[] {
  {A5, {MCU::V_POT_1}},
  {A6, {MCU::V_POT_2}},
  {A7, {MCU::V_POT_3}},
};

NoteButton switches[] {
  {2, MCU::RECORD},
  {3, MCU::PLAY},
  {4, MCU::STOP},
};

NoteLED led[] {
  {5, MCU::RECORD},
  {8, MCU::PLAY},
  {6, MCU::STOP},
};

 
void setup() {
  Control_Surface.begin();
  pinMode(LED_BUILTIN, OUTPUT);
}
 
void loop() { // Refresh all inputs
  Control_Surface.loop();
  digitalWrite(LED_BUILTIN, digitalRead(11));
}

Did you try a simple analogRead() sketch to prove that your slide pots were wired correctly? The software can't do anything without the hardware working.

void setup()
{
  Serial.begin(115200);
  delay(200);
}

void loop()
{
  Serial.print(analogRead(A5));
  Serial.print(", ");
  Serial.print(analogRead(A6));
  Serial.print(", ");
  Serial.print(analogRead(A7));
  Serial.println(", ");
  delay(1000);
}

The V-pots in the MCU protocol use incremental encoders, not absolute potentiometers.

However, it should still work correctly like this.
Please post a clear picture of your wiring.

You can check the MIDI messages in the Serial monitor by replacing this line:

USBMIDI_Interface usbmidi;

by

USBDebugMIDI_Interface usbmidi;

I've used the control board as a usb midi device in the daw, and the buttons and slider potentiometers all work good. So I think wire'd is ok.

could help to give me some codes of like how to use MCU ptotocol to control MIDI CC in the DAW.
thank you very much!

The following picture is my wiring diagram, because I failed to successfully upgrade the firmware of Uno Mini so I chose to use Teensy4 . and also have some data which is from using “Mackie-Control-universal-reverse-Engineering.ino” on Reaper. these data should be similar to the using USBMIDI_Interface USBMIDI, right? and I can't tell which instruction is used to control the MIDI CC controller.

Please help me to figure it out?! Thank you very much!

#include <Control_Surface.h>
/*
Mackie-Control-Universal-Reverse-Engineering
Sketch that reads the MIDI input from the USB MIDI Interface and prints it to the Serial monitor, including the Mackie Control Universal note names.

This is useful to discover what kinds of messages your DAW is sending.

Boards:
AVR, AVR USB, Nano Every, Due, Nano 33 IoT, Nano 33 BLE, Teensy 3.x, ESP32
*/
int ledpin = 15;
// A MIDI over USB interface
USBMIDI_Interface midi;
 
bool channelMessageCallback(ChannelMessage cm) {
  MIDIMessageType type = cm.getMessageType();
  if (type == MIDIMessageType::NOTE_ON || type == MIDIMessageType::NOTE_OFF) {
    Serial << hex << cm.header << ' ' << cm.data1 << ' ' << cm.data2 << dec
           << "\t(" << MCU::getMCUNameFromNoteNumber(cm.data1) << ")"
           << F(" on cable ") << cm.cable.getOneBased() << endl;
  } else {
    Serial << hex << cm.header << ' ' << cm.data1 << ' ' << cm.data2 << dec
           << F(" on cable ") << cm.cable.getOneBased() << endl;
  }
  return false; // Return true to indicate that handling is done,
                // and Control_Surface shouldn't handle it anymore.
                // If you want Control_Surface to handle it as well,
                // return false.
}
 
bool sysExMessageCallback(SysExMessage se) {
  Serial << F("System Exclusive message: [") << se.length << "] " //
         << AH::HexDump(se.data, se.length)                       //
         << F(" on cable ") << se.cable.getOneBased() << endl;
  return false; // Return true to indicate that handling is done,
                // and Control_Surface shouldn't handle it anymore.
                // If you want Control_Surface to handle it as well,
                // return false.
}
 
bool sysCommonMessageCallback(SysCommonMessage sc) {
  Serial << F("System Common message: ") << hex << sc.getMessageType();
  if (sc.getNumberOfDataBytes() >= 1)
    Serial << sc.getData1();
  if (sc.getNumberOfDataBytes() >= 2)
    Serial << sc.getData2();
  Serial << dec << F(" on cable ") << sc.cable.getOneBased() << endl;
  return false; // Return true to indicate that handling is done,
                // and Control_Surface shouldn't handle it anymore.
                // If you want Control_Surface to handle it as well,
                // return false.
}
 
bool realTimeMessageCallback(RealTimeMessage rt) {
  Serial << F("Real-Time: ") << hex << rt.message << dec << F(" on cable ")
         << rt.cable.getOneBased() << endl;
  return false; // Return true to indicate that handling is done,
                // and Control_Surface shouldn't handle it anymore.
                // If you want Control_Surface to handle it as well,
                // return false.
}
 
void setup() {
  // Make sure that the Serial interface is fast enough, so it doesn't stall the
  // MIDI application
  pinMode(ledpin,OUTPUT);
  
  Serial.begin(1000000);
  Control_Surface.begin();
  Control_Surface.setMIDIInputCallbacks(channelMessageCallback,   //
                                        sysExMessageCallback,     //
                                        sysCommonMessageCallback, //
                                        realTimeMessageCallback); //

  digitalWrite(ledpin, HIGH);
}
 
void loop() {
  Control_Surface.loop();
}
90 32 00	(FLIP) on cable 1
90 33 00	(GLOBAL_VIEW) on cable 1
90 64 00	(ZOOM) on cable 1
90 65 00	(SCRUB) on cable 1
b0 4b 30 on cable 1
b0 4a 31 on cable 1
System Exclusive message: [120] F0 00 00 66 14 12 00 52 45 41 50 45 52 21 20 49 6E 69 74 69 61 6C 69 7A 69 6E 67 2E 2E 2E 20 50 6C 65 61 73 65 20 77 61 69 74 2E 2E 2E 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 F7 on cable 1
System Exclusive message: [9] F0 00 00 66 14 20 00 03 F7 on cable 1
System Exclusive message: [9] F0 00 00 66 14 20 01 03 F7 on cable 1
System Exclusive message: [9] F0 00 00 66 14 20 02 03 F7 on cable 1
System Exclusive message: [9] F0 00 00 66 14 20 03 03 F7 on cable 1
System Exclusive message: [9] F0 00 00 66 14 20 04 03 F7 on cable 1
System Exclusive message: [9] F0 00 00 66 14 20 05 03 F7 on cable 1
System Exclusive message: [9] F0 00 00 66 14 20 06 03 F7 on cable 1
System Exclusive message: [9] F0 00 00 66 14 20 07 03 F7 on cable 1

System Exclusive message: [15] F0 00 00 66 14 12 31 20 20 20 20 20 20 20 F7 on cable 1
System Exclusive message: [9] F0 00 00 66 14 20 07 03 F7 on cable 1
d0 7f 00 on cable 1
e8 52 5b on cable 1
90 4a 00	(AUTOMATION_READ_OFF) on cable 1
90 4b 00	(AUTOMATION_WRITE) on cable 1
90 4c 00	(AUTOMATION_TRIM) on cable 1
90 4d 00	(AUTOMATION_TOUCH) on cable 1
90 4e 00	(AUTOMATION_LATCH) on cable 1
e0 52 5b on cable 1
b0 30 06 on cable 1
90 10 00	(MUTE_1) on cable 1
90 08 00	(SOLO_1) on cable 1
System Exclusive message: [15] F0 00 00 66 14 12 00 4B 6F 6E 74 61 6B 20 F7 on cable 1
90 00 7f	(REC_RDY_1) on cable 1
90 18 7f	(SELECT_1) on cable 1
90 4a 00	(AUTOMATION_READ_OFF) on cable 1
90 4b 00	(AUTOMATION_WRITE) on cable 1
90 4c 7f	(AUTOMATION_TRIM) on cable 1
90 4d 00	(AUTOMATION_TOUCH) on cable 1
90 4e 00	(AUTOMATION_LATCH) on cable 1
90 73 00	(RUDE_SOLO) on cable 1
90 5a 00	(SOLO) on cable 1
90 71 00	(SMPTE) on cable 1
90 72 7f	(BEATS) on cable 1

90 5f 00	(RECORD) on cable 1
90 5e 00	(PLAY) on cable 1
90 5d 7f	(STOP) on cable 1
90 5f 00	(RECORD) on cable 1
90 5e 00	(PLAY) on cable 1
90 5d 7f	(STOP) on cable 1

System Exclusive message: [8] F0 00 00 66 14 08 00 F7 on cable 1

The connections seem alright.

I'm not sure what you mean?

The control change messages for the V-pots only get sent from the controller to the DAW, so you won't see them in the output from the sketch you posted, which only prints incoming messages.

If you want to see the outgoing messages, you'll have to add a USBDebugMIDI_Interface or USBDebugMIDI_Output.

Here is the data from using "USBDebugMIDI_Interface midi", so what to do next?

|Note On          Channel: 1|Data 1: 0x5e|Data 2: 0x7f|
|Note Off         Channel: 1|Data 1: 0x5e|Data 2: 0x7f|
|Note On          Channel: 1|Data 1: 0x5f|Data 2: 0x7f|
|Note Off         Channel: 1|Data 1: 0x5f|Data 2: 0x7f|
|Note On          Channel: 1|Data 1: 0x5d|Data 2: 0x7f|
|Note Off         Channel: 1|Data 1: 0x5d|Data 2: 0x7f|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x01|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x02|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x03|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x04|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x05|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x06|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x07|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x08|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x09|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x0a|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x0b|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x0c|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x0d|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x0e|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x0f|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x10|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x11|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x12|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x13|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x14|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x15|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x16|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x17|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x18|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x19|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x1a|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x1b|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x1c|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x1d|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x1e|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x1f|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x20|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x21|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x22|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x23|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x24|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x25|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x26|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x27|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x28|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x29|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x2a|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x2b|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x2c|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x2d|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x2e|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x2f|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x30|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x31|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x32|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x33|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x34|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x35|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x36|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x37|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x38|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x39|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x3a|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x3b|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x3c|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x3d|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x3e|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x3f|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x40|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x41|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x42|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x43|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x44|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x45|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x46|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x47|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x48|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x49|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x4a|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x4b|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x4c|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x4d|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x4e|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x4f|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x50|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x51|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x52|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x53|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x54|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x55|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x56|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x57|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x58|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x59|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x5a|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x5b|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x5c|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x5d|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x5e|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x5f|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x60|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x61|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x62|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x63|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x64|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x65|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x66|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x67|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x68|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x69|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x6a|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x6b|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x6c|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x6d|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x6e|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x6f|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x70|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x71|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x72|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x73|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x74|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x75|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x76|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x77|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x78|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x79|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x7a|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x7b|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x7c|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x7d|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x7e|
|Control Change   Channel: 1|Data 1: 0x68|Data 2: 0x7f|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x01|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x02|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x03|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x04|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x05|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x06|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x07|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x08|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x09|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x0a|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x0b|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x0c|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x0d|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x0e|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x0f|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x10|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x11|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x12|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x13|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x14|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x15|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x16|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x17|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x18|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x19|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x1a|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x1b|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x1c|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x1d|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x1e|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x1f|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x20|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x21|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x22|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x23|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x24|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x25|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x26|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x27|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x28|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x29|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x2a|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x2b|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x2c|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x2d|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x2e|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x2f|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x30|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x31|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x32|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x33|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x34|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x35|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x36|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x37|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x38|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x39|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x3a|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x3b|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x3c|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x3d|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x3e|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x3f|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x40|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x41|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x42|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x43|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x44|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x45|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x46|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x47|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x48|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x49|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x4a|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x4b|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x4c|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x4d|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x4e|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x4f|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x50|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x51|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x52|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x53|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x54|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x55|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x56|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x57|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x58|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x59|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x5a|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x5b|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x5c|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x5d|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x5e|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x5f|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x60|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x61|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x62|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x63|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x64|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x65|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x66|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x67|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x68|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x69|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x6a|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x6b|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x6c|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x6d|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x6e|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x6f|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x70|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x71|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x72|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x73|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x74|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x75|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x76|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x77|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x78|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x79|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x7a|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x7b|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x7c|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x7d|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x7e|
|Control Change   Channel: 1|Data 1: 0x6a|Data 2: 0x7f|

Looks like the wiring is correct and you get the right MIDI messages.
If your DAW doesn't understand them, then you'll have to either configure it differently, or send different messages from the Arduino.
As mentioned earlier, if you're using the MCU protocol, you cannot use potentiometers, you need incremental encoders. (Only the motorized volume faders are potentiometers on a Mackie Control Universal.)

how about Mackie HUI? Do you have any experience on this?

Same story there, the V-pots are incremental encoders:

Ok, I will try the HUI protocol, thank you for helping all the time.

Just to make sure we're on the same page: it doesn't support ordinary potentiometers either.

I think the only solution here is to create your own custom control surface definition in your DAW.

That would be too complex and it is out of my knowledge. I would use midi to do it for simple, if can not use mackie control protocol

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.