Simple MIDI programming on Leonardo

Greetings all.

I greatly appreciate everyone who reads this and responds.

I am building a midi controller for a close friend of mine who loves making music.

The controller has 8 buttons and 4 potentiometers/knobs.

The buttons and pots/knobs are already wired and working but I need help with the code for the Leonardo.

Please teach me how to edit the code to add the following functionality:

  1. I would like the knobs to be mapped to certain CC parameters by default. So for instance, once the MIDI controller is plugged in, one of the potentiometers will automatically be set to control modulation. Another will control volume. So on and so forth.

  2. How can I program some of the buttons to feature basic transport controls. (play, stop, and record)

  3. How can I program buttons to bank up and down. In other words, add a button that moves all the input buttons up or down one octave.

Here is the code that I have so far. I have attached it. Please send any feedback or questions. I will be so happy to receive your assistance. Thanks in advance.

Tre

mididevice.ino (8.51 KB)

tresoto:
Please teach me how to edit the code to add the following functionality:

Download Arduino IDE, open your code and start editing. You have the code, you have the hardware...???

Cheers,
Kari

That code is way too complicated.

I would recommend something like this. It uses the Control Surface library.

[color=#5e6d03]#include[/color] [color=#434f54]<[/color][b][color=#d35400]Control_Surface[/color][/b][color=#434f54].[/color][color=#000000]h[/color][color=#434f54]>[/color] [color=#434f54]// [/color][u][color=#434f54]https://github.com/tttapa/Control-Surface[/color][/u]
[color=#5e6d03]using[/color] [color=#5e6d03]namespace[/color] [color=#000000]MIDI_Notes[/color][color=#000000];[/color]

[color=#434f54]// Add a MIDI interface to use:[/color]
[b][color=#d35400]USBMIDI_Interface[/color][/b] [color=#00979c]midi[/color][color=#000000];[/color]

[color=#434f54]// Add potentiometer controls:[/color]
[b][color=#d35400]CCPotentiometer[/color][/b] [color=#000000]modulation[/color] [color=#434f54]=[/color] [color=#000000]{[/color][color=#000000]A0[/color][color=#434f54],[/color] [color=#000000]{[/color][b][color=#d35400]MIDI_CC[/color][/b][color=#434f54]:[/color][color=#434f54]:[/color][color=#00979c]Modulation_Wheel[/color][color=#434f54],[/color] [color=#00979c]CHANNEL_1[/color][color=#000000]}[/color][color=#000000]}[/color][color=#000000];[/color]  
[b][color=#d35400]CCPotentiometer[/color][/b] [color=#000000]volume[/color]     [color=#434f54]=[/color] [color=#000000]{[/color][color=#000000]A1[/color][color=#434f54],[/color] [color=#000000]{[/color][b][color=#d35400]MIDI_CC[/color][/b][color=#434f54]:[/color][color=#434f54]:[/color][color=#00979c]Channel_Volume[/color][color=#434f54],[/color]   [color=#00979c]CHANNEL_1[/color][color=#000000]}[/color][color=#000000]}[/color][color=#000000];[/color]
[b][color=#d35400]CCPotentiometer[/color][/b] [color=#000000]pan[/color]        [color=#434f54]=[/color] [color=#000000]{[/color][color=#000000]A2[/color][color=#434f54],[/color] [color=#000000]{[/color][b][color=#d35400]MIDI_CC[/color][/b][color=#434f54]:[/color][color=#434f54]:[/color][color=#00979c]Pan[/color][color=#434f54],[/color]              [color=#00979c]CHANNEL_1[/color][color=#000000]}[/color][color=#000000]}[/color][color=#000000];[/color]
[b][color=#d35400]PBPotentiometer[/color][/b] [color=#000000]pitch[/color]      [color=#434f54]=[/color] [color=#000000]{[/color][color=#000000]A3[/color][color=#434f54],[/color] [color=#00979c]CHANNEL_1[/color][color=#000000]}[/color][color=#000000];[/color]

[color=#434f54]// Add transposer with three states: [/color]
[color=#434f54]// one octave down (-1), not transposed (0), and one octave up (+1)  [/color]
[b][color=#d35400]Transposer[/color][/b][color=#434f54]<[/color][color=#434f54]-[/color][color=#000000]1[/color][color=#434f54],[/color] [color=#434f54]+[/color][color=#000000]1[/color][color=#434f54]>[/color] [color=#000000]octaveTransp[/color][color=#000000]([/color][color=#000000]12[/color][color=#000000])[/color][color=#000000];[/color] [color=#434f54]// 12 semitones = one octave[/color]

[color=#434f54]// Add buttons to control the transposer[/color]
[b][color=#d35400]IncrementDecrementSelector[/color][/b][color=#434f54]<[/color][color=#000000]octaveTransp[/color][color=#434f54].[/color][color=#000000]N[/color][color=#434f54]>[/color] [color=#000000]selector[/color] [color=#434f54]=[/color] [color=#000000]{[/color]
  [color=#000000]octaveTransp[/color][color=#434f54],[/color] [color=#000000]{[/color][color=#000000]10[/color][color=#434f54],[/color] [color=#000000]11[/color][color=#000000]}[/color][color=#434f54],[/color] [color=#000000]Wrap[/color][color=#434f54]:[/color][color=#434f54]:[/color][color=#000000]Clamp[/color][color=#434f54],[/color] [color=#434f54]// pin 10 transposes up, pin 11 down  [/color]
[color=#000000]}[/color][color=#000000];[/color]

[color=#434f54]// Add note buttons that can be transposed:[/color]
[b][color=#d35400]Bankable[/color][/b][color=#434f54]:[/color][color=#434f54]:[/color][b][color=#d35400]NoteButton[/color][/b] [color=#000000]buttons[/color][color=#000000][[/color][color=#000000]][/color] [color=#434f54]=[/color] [color=#000000]{[/color]
  [color=#000000]{[/color][color=#000000]octaveTransp[/color][color=#434f54],[/color] [color=#000000]2[/color][color=#434f54],[/color] [color=#000000]note[/color][color=#000000]([/color][color=#000000]C[/color][color=#434f54],[/color] [color=#000000]4[/color][color=#000000])[/color][color=#000000]}[/color][color=#434f54],[/color] [color=#434f54]// pin 2, middle C[/color]
  [color=#000000]{[/color][color=#000000]octaveTransp[/color][color=#434f54],[/color] [color=#000000]3[/color][color=#434f54],[/color] [color=#000000]note[/color][color=#000000]([/color][color=#000000]D[/color][color=#434f54],[/color] [color=#000000]4[/color][color=#000000])[/color][color=#000000]}[/color][color=#434f54],[/color] [color=#434f54]// pin 3, middle D[/color]
  [color=#000000]{[/color][color=#000000]octaveTransp[/color][color=#434f54],[/color] [color=#000000]4[/color][color=#434f54],[/color] [color=#000000]note[/color][color=#000000]([/color][color=#000000]E[/color][color=#434f54],[/color] [color=#000000]4[/color][color=#000000])[/color][color=#000000]}[/color][color=#434f54],[/color]
  [color=#000000]{[/color][color=#000000]octaveTransp[/color][color=#434f54],[/color] [color=#000000]5[/color][color=#434f54],[/color] [color=#000000]note[/color][color=#000000]([/color][color=#000000]F[/color][color=#434f54],[/color] [color=#000000]4[/color][color=#000000])[/color][color=#000000]}[/color][color=#434f54],[/color]
  [color=#000000]{[/color][color=#000000]octaveTransp[/color][color=#434f54],[/color] [color=#000000]6[/color][color=#434f54],[/color] [color=#000000]note[/color][color=#000000]([/color][color=#000000]G[/color][color=#434f54],[/color] [color=#000000]4[/color][color=#000000])[/color][color=#000000]}[/color][color=#434f54],[/color]
[color=#000000]}[/color][color=#000000];[/color]

[color=#434f54]// Add transport control buttons:[/color]
[b][color=#d35400]NoteButton[/color][/b] [color=#000000]transportButtons[/color][color=#000000][[/color][color=#000000]][/color] [color=#434f54]=[/color] [color=#000000]{[/color]
  [color=#000000]{[/color][color=#000000]7[/color][color=#434f54],[/color] [b][color=#d35400]MCU[/color][/b][color=#434f54]:[/color][color=#434f54]:[/color][color=#00979c]PLAY[/color][color=#000000]}[/color][color=#434f54],[/color]   [color=#434f54]// pin 7, Mackie Control Universal "play" command[/color]
  [color=#000000]{[/color][color=#000000]8[/color][color=#434f54],[/color] [b][color=#d35400]MCU[/color][/b][color=#434f54]:[/color][color=#434f54]:[/color][color=#00979c]STOP[/color][color=#000000]}[/color][color=#434f54],[/color]   [color=#434f54]// pin 8, Mackie Control Universal "stop" command[/color]
  [color=#000000]{[/color][color=#000000]9[/color][color=#434f54],[/color] [b][color=#d35400]MCU[/color][/b][color=#434f54]:[/color][color=#434f54]:[/color][color=#00979c]RECORD[/color][color=#000000]}[/color][color=#434f54],[/color] 
[color=#000000]}[/color][color=#000000];[/color]

[color=#00979c]void[/color] [color=#5e6d03]setup[/color][color=#000000]([/color][color=#000000])[/color] [color=#000000]{[/color]
  [b][color=#d35400]Control_Surface[/color][/b][color=#434f54].[/color][color=#d35400]begin[/color][color=#000000]([/color][color=#000000])[/color][color=#000000];[/color]
[color=#000000]}[/color]

[color=#00979c]void[/color] [color=#5e6d03]loop[/color][color=#000000]([/color][color=#000000])[/color] [color=#000000]{[/color]
  [b][color=#d35400]Control_Surface[/color][/b][color=#434f54].[/color][color=#5e6d03]loop[/color][color=#000000]([/color][color=#000000])[/color][color=#000000];[/color]
[color=#000000]}[/color]

It handles debouncing, potentiometer filtering, transposing, etc. internally so you don't have to worry about any of that.
Everything you add (MIDI interfaces, potentiometers, buttons, transposers, selectors) is automatically picked up by the library, and it will initialize and update everything for you.

Pieter