Comunicazione seriale arduino mega [RISOLTO]

Buongiorno a tutti.

Aggiorno il post sperando in un aiuto per un problema inspiegabile.
Il codice seguente dato dal fornitore del dispositivo basato su pic che "dovrebbe" inviare i dati al mio arduino mega (anzi lo ha sempre fatto ma ora non più), mi permette di leggere sulle porte seriali e stampare i valori riscontrati di ph e redox.
Naturalmente il codice è sia per l'uso con softserial che Serial1.

Di seguito uno screenshot di ciò che leggo a parità di dati inviati dal dispositivo sulla porta seriale simulata e su una delle seriali hardware di arduino mega.

Premetto che ho provato a testare le seriali hw di mega e funzionano perfettamente.
Come si può evincere dall'immagine, entrambe le seriali leggono perfettamente il dato iniziale 0x55 (cioè 85), ma successivamente nell'indice da 1 a 8 i valori sono decisamente errati.
Come è possibile che la seriale simulata legge correttamente i dati che arrivano mentre la seriale hardware legge dai errati?

Spero vivamente in un aiuto per dare una spiegazione logica al problema.

Grazie a tutti in anticipo.

#include <SoftwareSerial.h>

#define rxPin 10
#define txPin 11

SoftwareSerial softSerial =  SoftwareSerial(rxPin, txPin);

//--------------------------------
int CalcChannel(unsigned char ui8type, unsigned char ui8Msb, unsigned char ui8Lsb)  {
int ui8Temp;
if (ui8type==0){
ui8Temp=ui8Msb*256+ui8Lsb;
}
if (ui8type==1) {
ui8Temp=ui8Msb*256+ui8Lsb;
ui8Temp=ui8Temp-2048;
}
return (ui8Temp);
}
//--------------------------------
int ui8Buffer[8][2];
int ui16Idx=0;
int ui8CheckSum=0;
//--------------------------------
//
void setup()  {
 
 pinMode(rxPin, INPUT);
 pinMode(txPin, OUTPUT);
 softSerial.begin(9600);
 //Serial1.begin(9600); 
 Serial.begin(9600);
 Serial.println ("test lettura seriale hw");
   
     
}
void loop() {
          // send data only when you receive data:
          if (softSerial.available() > 0) //per arduino1
          //if (Serial1.available() > 0) //per arduino mega
          
          { 
            if (softSerial.read()==0x55) { // per arduino1
          //   if (Serial1.read()==0x55) {  //per arduino mega
              
              Serial.println(0x55);
                  ui8Buffer[0][0]=0x55;
                  ui8Buffer[0][1]=0;
                        do {
                           if (softSerial.available() > 0) { // per arduino1
                           //if (Serial1.available() > 0) { //per arduino mega
                            Serial.println (ui16Idx);                           
                            ui16Idx++;                           
                            ui8Buffer[ui16Idx][0] = softSerial.read();//per arduino1
                            //ui8Buffer[ui16Idx][0] = Serial1.read();//per arduino mega
                            
                            ui8Buffer[ui16Idx][1] = ui16Idx;
                            
                            Serial.println (ui8Buffer[ui16Idx][0]);
                            
                           }
                       }while (ui16Idx<=8);
                      
                      ui16Idx=0;                    
                      ui8CheckSum=0;

//Calcolo del check sum 
          
        for (ui16Idx=0;ui16Idx<7;ui16Idx++){
        
        ui8CheckSum = ui8CheckSum + ui8Buffer[ui16Idx][0];
        }
       
     Serial.println ("mio checksum");
     Serial.println (ui8CheckSum);
      ui16Idx=0;
        if (((unsigned char)ui8CheckSum)==ui8Buffer[7][0]){
          
          Serial.println("checksum calcolato:");
          Serial.println((unsigned char)ui8CheckSum);
          Serial.println("Pacchetto ricevuto:");

          Serial.println("Lettura del primo canale:");
          if (ui8Buffer[1][0]==0) Serial.println("ph:");
          if (ui8Buffer[1][0]==1) Serial.println("rx:");
          Serial.println(CalcChannel((unsigned char) ui8Buffer[1][0], (unsigned char) ui8Buffer[2][0], (unsigned char) ui8Buffer[3][0])); //calcola il valore
          // 
          Serial.println("Lettura del secondo canale:");
          if (ui8Buffer[4][0]==0) Serial.println("ph:");
          if (ui8Buffer[4][0]==1)Serial.println("rx:");
          Serial.println(CalcChannel((unsigned char) ui8Buffer[4][0], (unsigned char) ui8Buffer[5][0], (unsigned char) ui8Buffer[6][0])); //calcola il valore  
          //
                  
         }
         else {
          Serial.println("checksum error:");
         }
         ui16Idx=0;
}
}


}