Ciao a tutti!
Sto provando a utilizzare Arduino per leggere dei messaggi MIDI per convertirli in testo su un display LCD.
In particolare devo leggere dei messaggi MIDI composti da 39 byte.
Questo il codice che ho scritto:
byte byte1;
byte byte2;
byte byte3;
byte byte4;
byte byte5;
byte byte6;
byte byte7;
byte byte8;
byte byte9;
byte byte10;
byte byte11;
byte byte12;
byte byte13;
byte byte14;
byte byte15;
byte byte16;
byte byte17;
byte byte18;
byte byte19;
byte byte20;
byte byte21;
byte byte22;
byte byte23;
byte byte24;
byte byte25;
byte byte26;
byte byte27;
byte byte28;
byte byte29;
byte byte30;
byte byte31;
byte byte32;
byte byte33;
byte byte34;
byte byte35;
byte byte36;
byte byte37;
byte byte38;
byte byte39;
void setup() {
Serial1.begin(31250);
Serial.begin(9600);
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
}
void checkMIDI() {
if (Serial1.available()) {
byte1 = Serial1.read();
byte2 = Serial1.read();
byte3 = Serial1.read();
byte4 = Serial1.read();
byte5 = Serial1.read();
byte6 = Serial1.read();
byte7 = Serial1.read();
byte8 = Serial1.read();
byte9 = Serial1.read();
byte10 = Serial1.read();
byte11 = Serial1.read();
byte12 = Serial1.read();
byte13 = Serial1.read();
byte14 = Serial1.read();
byte15 = Serial1.read();
byte16 = Serial1.read();
byte17 = Serial1.read();
byte18 = Serial1.read();
byte19 = Serial1.read();
byte20 = Serial1.read();
byte21 = Serial1.read();
byte22 = Serial1.read();
byte23 = Serial1.read();
byte24 = Serial1.read();
byte25 = Serial1.read();
byte26 = Serial1.read();
byte27 = Serial1.read();
byte28 = Serial1.read();
byte29 = Serial1.read();
byte30 = Serial1.read();
byte31 = Serial1.read();
byte32 = Serial1.read();
byte33 = Serial1.read();
byte34 = Serial1.read();
byte35 = Serial1.read();
byte36 = Serial1.read();
byte37 = Serial1.read();
byte38 = Serial1.read();
byte39 = Serial1.read();
digitalWrite(13, HIGH); //turn on led
Serial.print(byte1, HEX);
Serial.print("-");
Serial.print(byte2, HEX);
Serial.print("-");
Serial.print(byte3, HEX);
Serial.print("-");
Serial.print(byte4, HEX);
Serial.print("-");
Serial.print(byte5, HEX);
Serial.print("-");
Serial.print(byte6, HEX);
Serial.print("-");
Serial.print(byte7, HEX);
Serial.print("-");
Serial.print(byte8, HEX);
Serial.print("-");
Serial.print(byte9, HEX);
Serial.print("-");
Serial.print(byte10, HEX);
Serial.print("-");
Serial.print(byte11, HEX);
Serial.print("-");
Serial.print(byte12, HEX);
Serial.print("-");
Serial.print(byte13, HEX);
Serial.print("-");
Serial.print(byte14, HEX);
Serial.print("-");
Serial.print(byte15, HEX);
Serial.print("-");
Serial.print(byte16, HEX);
Serial.print("-");
Serial.print(byte17, HEX);
Serial.print("-");
Serial.print(byte18, HEX);
Serial.print("-");
Serial.print(byte19, HEX);
Serial.print("-");
Serial.print(byte20, HEX);
Serial.print("-");
Serial.print(byte21, HEX);
Serial.print("-");
Serial.print(byte22, HEX);
Serial.print("-");
Serial.print(byte23, HEX);
Serial.print("-");
Serial.print(byte24, HEX);
Serial.print("-");
Serial.print(byte25, HEX);
Serial.print("-");
Serial.print(byte26, HEX);
Serial.print("-");
Serial.print(byte27, HEX);
Serial.print("-");
Serial.print(byte28, HEX);
Serial.print("-");
Serial.print(byte29, HEX);
Serial.print("-");
Serial.print(byte30, HEX);
Serial.print("-");
Serial.print(byte31, HEX);
Serial.print("-");
Serial.print(byte32, HEX);
Serial.print("-");
Serial.print(byte33, HEX);
Serial.print("-");
Serial.print(byte34, HEX);
Serial.print("-");
Serial.print(byte35, HEX);
Serial.print("-");
Serial.print(byte36, HEX);
Serial.print("-");
Serial.print(byte37, HEX);
Serial.print("-");
Serial.print(byte38, HEX);
Serial.print("-");
Serial.println(byte39, HEX);
}
}
void loop() {
checkMIDI();
delay(100);
digitalWrite(13, LOW); //turn led off
}
Il problema che mi ritrovo è che se ricevo 3 byte questi vengono letti correttamente, se invece ne ricevo di più i byte che ricevo sono errati (solitamente pari a FF in HEX).
Possibile che ci sia qualcosa di errato nel codice o devo cercare l'errore da qualche altra parte?
Grazie!
P.S. Se qualcuno avesse anche qualche suggerimento per semplificare la scrittura del codice con qualche loop è ben accetto