Hello, i am new too in this great world.
I like for share my code, maybe help for your project.
This code is used on my midi keyboard and works fine. Maybe need change baudrate for your project and change pins for Arduino Mega.
For keyboard matrix, also need solder one diode for note, if not, can detect multiple keys when one key is pressed
I hope I can help you or that I can serve as an example
Cheers
//Use diodes is very important.
int notepin[7]={12,6,7,8,9,10,11};
int octavepin[8]={A2,A1,A0,13,2,3,4,5};
int note[56]={
36,37,38,39,40,41,42,
0 ,43,44,45,46,47,48,
0 ,49,50,51,52,53,54,
0 ,55,56,57,58,59,60,
0 ,61,62,63,64,65,66,
0 ,67,68,69,70,71,72,
0 ,73,74,75,76,77,78,
0 ,79,80,81,82,83,84};
int key[56]={};
int keyb[56]={};
int c=0;
int d=0;
void setup() {
// Set pins for input and output
for (int i=0;i<(sizeof(notepin)/sizeof(notepin[0])); i++){
pinMode(notepin[i], INPUT);
}
for (int i=0;i<(sizeof(octavepin)/sizeof(octavepin[0]));i++){
pinMode(octavepin[i],OUTPUT);
digitalWrite(octavepin[i],LOW);
}
//Change baudrate if necesary
Serial.begin(38400);
}
void loop() {
readmatrix();
}
void comparator(){
//Compare matrix keyboard value for each key, if key==1 send noteON. if not send noteOFF
if (keyb[c] != key[c]){
if (key[c]==1){
sendmidi(0x90,note[c],127);
}
else{
sendmidi(0x80,note[c],0);
}
keyb[c]=key[c];
}
}
void sendmidi(int cmd,int note,int vel){
Serial.write(cmd);
Serial.write(note);
Serial.write(vel);
}
void readmatrix(){
c=0;
for (int a=0;a<(sizeof(octavepin)/sizeof(octavepin[0]));a++){
digitalWrite(octavepin[a],HIGH);
for (int b=0;b<(sizeof(notepin)/sizeof(notepin[0]));b++){
if (digitalRead(notepin[b]) == HIGH){
key[c]=1;
}
else{
key[c]=0;
}
comparator();
c++;
}
digitalWrite(octavepin[a],LOW);
}
}