SerialEvent2 non riceve i dati

Ciao Sto realizzando una mini rete tra più arduino.
Tra un MEGA che è il master e due UNO che sono degli slave.
arrivo al sodo solo se sposto la comunicazione sulla seriale 2 non mi funziona mentre sulla 1 e sulla 3 funziona
qualcuno ha un idea?

questa è il codice per ricevere le risposte

void SerialEvent2() {  
  //Prendo i millisecondi attuali
  long last_millis = millis();
  long mem_millis;
  //Inizializzo conteggio millisecondi di timeout
  int count_millis = 0;
  
  
  byte val;
  byte bytesread;
  byte CODE[20]; 
  byte tempbyte;   
  byte checksum;
  boolean Rxok;
  
  
   
  if(Serial2.available() > 0) {    
    if((val = Serial2.read()) == 2) {
      Serial.println("serialEvent1");
      checksum=0   ;
      bytesread = 0;
      while(bytesread < 16) {        
        if( Serial2.available() > 0) {                                 //controllo se i dati sono disponibili ad essere letti
          val = Serial2.read(); 
          //quindi assegno a 'val' il valore dell'i-esimo carattere
          if((val == 0x0D)||(val == 0x0A)||(val == 0x03)||(val == 0x02)) {     //se leggo un carattere 'header' o un carattere di stop 
             break;                                                             // fermo la lettura
          }
          if ((val >= '0') && (val <= '9')) {
            val -= '0';
          }                                                                    //traduco in esadecimale il carattere appena letto
          else if ((val >= 'A') && (val <= 'F')) {
            val = 10 + val - 'A';
          }
          if (bytesread & 1 == 1) {                                            //se ho letto un solo carattere fin'ora
            CODE[bytesread >> 1] = (val | (tempbyte << 4));                        //assegno alla seconda parte del byte in posizione bytesread-esima il valore esadecimale del carattere letto

            if (bytesread >> 1 !=7) {                                             //se ho letto l'ultimo byte della scheda calcolo il checksum
              checksum ^= CODE[bytesread >> 1];                                   //facendo la XOR sull'ultimo byte letto                     
            };
          } 
          else {
            tempbyte = val;                                                    //altrimenti assegno il valore letto alla variabile tempbyte 
          };

          bytesread++;                                                        //mi preparo a leggere il prossimo byte
        } 
        
        mem_millis = millis();        
        if(mem_millis != last_millis){         
          last_millis = mem_millis;         
          count_millis++;         
          if(count_millis > (MAX_MILLIS_TIMEOUT - 1)){
            errRX1++;                   
            break;                   
          }
         }
     }        
      if (bytesread == 16) {        
        (CODE[7]==checksum) ? Rxok = true : Rxok = false ;                
      }                

    }
  } 
  if (Rxok){       
    rxNODE11=CODE[0];
    rxCODE11=CODE[1];
    rxDATA11=CODE[2];
    rxDATA12=CODE[3];
    rxDATA13=CODE[4];
    rxDATA14=CODE[5];
    rxDATA15=CODE[6];  
    Rxok1 = true;  
  } 
}

mentre qui e la routine che invia le comandi ai slave

void sendMSG1(byte address,byte code,byte  data1,byte data2,byte data3,byte data4,byte data5){

 byte  temp;
 byte checksum;
 
   UCSR2A=UCSR2A |(1 << TXC2);

  digitalWrite(pinSerial1,HIGH);
  delay(1);
  checksum=0;    
  Serial2.write(0x02);
  
  temp = address >> 4 ;
  Serial2.print(temp   ,HEX);
  temp = address & 0x0F;
  Serial2.print(temp ,HEX);
  checksum ^= address;
  
  temp = code >> 4 ;
  Serial2.print(temp   ,HEX);
  temp = code & 0x0F;
  Serial2.print(temp ,HEX);
  checksum ^= code;
  
  temp = data1 >> 4 ;
  Serial2.print(temp   ,HEX);
  temp = data1 & 0x0F;
  Serial2.print(temp ,HEX);
  checksum ^= data1;
  
  temp = data2 >> 4 ;
  Serial2.print(temp   ,HEX);
  temp = data2 & 0x0F;
  Serial2.print(temp ,HEX);
  checksum ^= data2;
  
  temp = data3 >> 4 ;
  Serial2.print(temp   ,HEX);
  temp = data3 & 0x0F;
  Serial2.print(temp ,HEX);
  checksum ^= data3;
  
  temp = data4 >> 4 ;
  Serial2.print(temp   ,HEX);
  temp = data4 & 0x0F;
  Serial2.print(temp ,HEX);
  checksum ^= data4;
  
  temp = data5 >> 4 ;
  Serial2.print(temp   ,HEX);
  temp = data5 & 0x0F;
  Serial2.print(temp ,HEX);
  checksum ^= data5;
  
  temp = checksum >> 4 ;
  Serial2.print(temp   ,HEX);
  temp = checksum & 0x0F;
  Serial2.print(temp ,HEX);
  
   while (!(UCSR2A & (1 << TXC2)));
  delay(1);
  digitalWrite(pinSerial1,LOW);
 
}