Как правильно прочитать данные с serial port?
1 байт - ID параметра (0x01 - CPU, 0x02 - RAM и т.д.)
2 байт - Value параметра
3 байт - XOR между ID и Value
4 байт - признак окончания передачи 0xFA, например
Итого пересылаете 4 байта
На ардуине:int counter = 0;
if (Serial.available() > 0){
    rx_byte = Serial.read();
    if(rx_byte !=0xFA)
    {
        read_array[counter] = rx_byte
    }
    else
    {
     counter = 0;   
     if ((read_array[0] xor read_array[1])== read_array[3])
        {
        //данные приняты успешно, можно передавать в обработку
        }
        else
        {
        //данные искажены, не берем их в расчет
        } 
    }
}
Код условный, только для демонстрации идеи передачи пакетом с помехоустойчивостью чуть получше чем никакой.
что значит "все смешивается в кучу"? У вас \n это управляющий символ разделения строки, вы можете передавать в таком формате сколько угодно параметров. В конце пакета необходим символ окончания пакета, например \f. На стороне МК нужно предусмотреть код который будет разделять строку. Приведенный вами код все это делает, но он не учитывает возможную передачу нескольких параметров.