hi please excuse my spelling and grammar i am dyslexic. I am an absolute Beginner. i have built a controller with two joysticks 10 x pots and 20 arcade buttons.
I have an Arduino mega and would like to program it to send midi data out the midi din.
From what i understand there is many ways to do this but it seams that whenever i look the support for this kind of project is around getting the mega to work over USB. I obviously need to do some research i am just looking for links to relevant information so that i can progress faster. i am trying to learn Arduino through Udamy but it just seams like there is so much you can do that i could end up learning a lot of things not relevant to my chosen subject area so yeah if anybody can help me help myself i would be very grateful thank you.
please excuse my spelling and grammar i am dyslexic.
Me too, but I did write this book
Half the book is about MIDI, but all the basic information is on line.
Like this
http://www.thebox.myzen.co.uk/Hardware/MIDI_Shield.html or you can search for MIDI shields.
Using a Mega is easy because there are four serial ports, so you can print debug messages out of the normal serial port, and use any of the others for your MIDI, so where you see a Serial.write just replace it with Serial1.write, and use the Serial1 pins instead of pins 0&1.
The Control Surface library I maintain should make it really easy.
Relevant examples for your use case are:
Most of the examples use a USBMIDI_Interface
, but you can easily replace it with a serial MIDI interface, see MIDI Interfaces.
For example:
[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]// Include the Control Surface library[/color]
[color=#434f54]// Instantiate a Serial MIDI interface on serial port "Serial1",[/color]
[color=#434f54]// with the default MIDI baud rate.[/color]
[b][color=#d35400]HardwareSerialMIDI_Interface[/color][/b] [color=#000000]midi[/color] [color=#434f54]=[/color] [b][color=#d35400]Serial1[/color][/b][color=#000000];[/color]
[color=#434f54]// Instantiate an array of CCPotentiometer objects.[/color]
[b][color=#d35400]CCPotentiometer[/color][/b] [color=#000000]potentiometers[/color][color=#000000][[/color][color=#000000]][/color] [color=#434f54]=[/color] [color=#000000]{[/color]
[color=#000000]{[/color][color=#000000]A0[/color][color=#434f54],[/color] [color=#434f54]// Analog pin connected to potentiometer 1[/color]
[color=#000000]0x10[/color][color=#000000]}[/color][color=#434f54],[/color] [color=#434f54]// Controller number of the first potentiometer[/color]
[color=#000000]{[/color][color=#000000]A1[/color][color=#434f54],[/color] [color=#434f54]// Analog pin connected to potentiometer 2[/color]
[color=#000000]0x11[/color][color=#000000]}[/color][color=#434f54],[/color] [color=#434f54]// Controller number of the second potentiometer[/color]
[color=#000000]{[/color][color=#000000]A2[/color][color=#434f54],[/color] [color=#000000]0x12[/color][color=#000000]}[/color][color=#434f54],[/color] [color=#434f54]// Etc.[/color]
[color=#000000]{[/color][color=#000000]A3[/color][color=#434f54],[/color] [color=#000000]0x13[/color][color=#000000]}[/color][color=#434f54],[/color]
[color=#000000]{[/color][color=#000000]A4[/color][color=#434f54],[/color] [color=#000000]0x14[/color][color=#000000]}[/color][color=#434f54],[/color]
[color=#000000]{[/color][color=#000000]A5[/color][color=#434f54],[/color] [color=#000000]0x15[/color][color=#000000]}[/color][color=#434f54],[/color]
[color=#000000]}[/color][color=#000000];[/color]
[color=#434f54]// Allows you to use the note names in your sketch [/color]
[color=#434f54]// (e.g. note(C, 4), see below).[/color]
[color=#5e6d03]using[/color] [color=#5e6d03]namespace[/color] [color=#000000]MIDI_Notes[/color][color=#000000];[/color]
[color=#434f54]// Instantiate an array of NoteButton objects.[/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]2[/color][color=#434f54],[/color] [color=#434f54]// Push button between pin 2 and ground[/color]
[color=#d35400]note[/color][color=#000000]([/color][color=#00979c]C[/color][color=#434f54],[/color] [color=#000000]4[/color][color=#000000])[/color][color=#000000]}[/color][color=#434f54],[/color] [color=#434f54]// Note C4 on MIDI channel 1[/color]
[color=#000000]{[/color][color=#000000]3[/color][color=#434f54],[/color] [color=#434f54]// Push button between pin 3 and ground[/color]
[color=#d35400]note[/color][color=#000000]([/color][color=#00979c]Db[/color][color=#434f54],[/color] [color=#000000]4[/color][color=#000000])[/color][color=#000000]}[/color][color=#434f54],[/color] [color=#434f54]// Note D♭4 on MIDI channel 1[/color]
[color=#000000]{[/color][color=#000000]4[/color][color=#434f54],[/color] [color=#d35400]note[/color][color=#000000]([/color][color=#00979c]D[/color][color=#434f54],[/color] [color=#000000]4[/color][color=#000000])[/color][color=#000000]}[/color][color=#434f54],[/color] [color=#434f54]// Etc.[/color]
[color=#000000]{[/color][color=#000000]5[/color][color=#434f54],[/color] [color=#d35400]note[/color][color=#000000]([/color][color=#00979c]Eb[/color][color=#434f54],[/color] [color=#000000]4[/color][color=#000000])[/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]
[color=#434f54]// Initialize Control Surface, initializes everything[/color]
[color=#434f54]// (pin modes, MIDI interfaces ...)[/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]
[color=#434f54]// Update the Control Surface, reads all inputs and sends[/color]
[color=#434f54]// MIDI messages accordingly.[/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]
For the joysticks, you can use the CCPotentiometer, just like any other normal potentiometer. You may want to add a dead zone in the center, see this issue and the CCPotentiometer-Map.ino example.
Pieter