Passaggio valori a funzione

Ho partorito questa cosa ma non funziona :blush:
Invio da vb !!CC!0xB0!0x01!0x7F!*
Mi visualizza solo due byte e se riprovo non visualizza più nulla.

Help please

#include <MIDI.h>

char string[25];
int i=0;
int string_len;
int inByte;
int last_inByte;
int counter=0;

String TipoComando;
String Comando;
String Data1;
String Data2;

void setup() {
  Serial.begin(9600); //INTIALISING THE MIDI SERIAL PORT
  Serial1.begin(9600); //INTIALISING THE CONTROLLER SERIAL PORT
}

// La stringa in arrivo deve avere un ! per ogni lettera e deve terminare con un *
// All'inizio va raddoppiato !! altrimenti perdo la prima lettera
// Esempio !!P!R!O!V!A*

void loop()  // LOOP FUNCTION
{
  inByte = Serial1.read();
  string_len=0;
  if (inByte == '!')  read_serial();  // If Start of line ("!") is found, call read_serial() function
}

void read_serial()  // FUNCTION FOR READING THE SERIAL MESSAGE
{
   Serial.println ("SOL FOUND and reading");  // THE SOL (Start of Line) found notice.
   Serial1.print("READ : !\n");  //Saying that it has read "!" on the serial port
   while (inByte!= '*') // As long as EOL not found, keep reading
   if (Serial1.available() > 0) // if new data is available
     { 
       inByte = Serial1.read(); // Read new byte
       Serial.print("READ : "); // Display the new byte
       string[string_len] = (int)inByte; // Save the data in a character array
       Serial.println(string[string_len]); // Print the characters that was recieved
       string_len++;
     }
     else if (Serial1.available() == 0) 
       {
           Serial.println("EOL not available, data string invalid"); // If EOL not in the string
           Serial1.print("$N"); //FAIL SIGNATURE
           break;
       }

 if (inByte == '*')
{
 Serial1.println ("$Y"); //SUCCESS SIGNATURE
      Comando=((String)string[3]+(String)string[4]+(String)string[5]+(String)string[6]);
      Data1=((String)string[8]+(String)string[9]+(String)string[10]+(String)string[11]);
      Data2=((String)string[13]+(String)string[14]+(String)string[15]+(String)string[16]);

//Serial.println(Comando);
//Serial.println(Data1);
//Serial.println(Data2);

String mystr1;
String mystr2;
String mystr3;

char valcmd[6];
char valdt1[6];
char valdt2[6];

String cmd=Comando;
mystr1=cmd.substring(0,4);
mystr1.toCharArray(valcmd,3);

String dt1=Data1;
mystr2=dt1.substring(0,4);
mystr2.toCharArray(valdt1,3);

String dt2=Data2;
mystr3=dt2.substring(0,4);
mystr3.toCharArray(valdt2,3);

Serial.println(valcmd);
Serial.println(valdt1);
Serial.println(valdt2);

      Serial.write(valcmd);
      Serial.write(valdt1);
      Serial.write(valdt2);
    }
}

Perche se commento tutti i Serial.print (non i Serial1.print !!) il programma non mi manda fuori i valori midi mentre se li decommento si.

Grazie, Alberto

#include <MIDI.h>

char string[25];
int i=0;
int string_len;
int inByte;

String TipoComando;
String Comando;
String Valore;
String Canale;

void setup() {
  MIDI.begin();    
  Serial1.begin(9600); //INTIALISING THE CONTROLLER SERIAL PORT
}

void loop()  // LOOP FUNCTION
{
  inByte = Serial1.read();
  string_len=0;
  if (inByte == '!')  read_serial();  // If Start of line ("!") is found, call read_serial() function
}

void read_serial()  // FUNCTION FOR READING THE SERIAL MESSAGE
{
//   Serial.println ("SOL FOUND and reading");  // THE SOL (Start of Line) found notice.
//   Serial.print("READ : !\n");  //Saying that it has read "!" on the serial port
   while (inByte!= '*') // As long as EOL not found, keep reading
   if (Serial1.available() > 4) // if new data is available
     { 
       inByte = Serial1.read(); // Read new byte
//       Serial.print("READ : "); // Display the new byte
       string[string_len] = (int)inByte; // Save the data in a character array
//       Serial.println(string[string_len]); // Print the characters that was recieved
       string_len++;
     }
     else if (Serial1.available() == 0) 
       {
//           Serial.println("EOL not available, data string invalid"); // If EOL not in the string
           Serial1.print("$N"); //FAIL SIGNATURE
           break;
       }

 if (inByte == '*')
{
 Serial1.println ("$Y"); //SUCCESS SIGNATURE
      TipoComando=((String)string[0]+(String)string[1]);
      Comando=((String)string[3]+(String)string[4]+(String)string[5]);
      Valore=((String)string[7]+(String)string[8]+(String)string[9]);
      Canale=((String)string[11]+(String)string[12]+(String)string[13]);

//      Serial.println(Comando);
//      Serial.println(Valore);
//      Serial.println(Canale);
      MIDI.sendControlChange(Comando.toInt(),Valore.toInt(),Canale.toInt());
   }
}