comunicazione TTL tra 2 arduino

Salve a tutti, sto progettando un ROV.
Sono arrivato al punto di avere due unità, una di surface e una subsea. Il mio problema è che non riesco a capire come creare lo sketch per comunicare tramite porte seriali software.
La mia idea di prova, è con l'unita surface leggere il valore di due potenziometri, creare due variabili separte e in fine mandarli tramite porta seriale alla subsea che si dovrebbe occupare di ricevere tali valori ed elaborarli per poi muovere due servomotori, inviare un feedback al surface che a sua volta lo invierà al monitor seriale.

Surface

#include <SoftwareSerial.h>

SoftwareSerial PortSerial1=SoftwareSerial(7,8);

int const potPin = A0;  // primo potenziometro collegato a A0
int const potPin2 = A1;  // secondo potenziometro collegato a A1
int potVal1;	// variabile pot1
int potVal2;	// variabile pot2
int pan;        // variabile pan
int tilt;       // variabile tilt

void setup() {
  pinMode(7,INPUT);
  pinMode(8,OUTPUT);
  PortSerial1.begin(9600);
  Serial.begin(9600);
}

void loop() {
  potVal1 = analogRead(potPin);	  // leggi i valori su A0
  potVal2 = analogRead(potPin2);  // leggi i valori su A2 
  pan = map(potVal1, 0, 1023, 0, 179);
  tilt = map(potVal2, 0, 1023, 0, 179);
   PortSerial1.print(potVal1,potVal2);
 
  delay(15);
}

pan & tilt sono i valori che dovranno far muovere i due servi

Subsea

#include <SoftwareSerial.h>

#include <Servo.h>

Servo myServo1;  // primo servo
Servo myServo2; // secondo servo

SoftwareSerial PortSerial1=SoftwareSerial(7,8);

int pan=0;	// variabile pot1
int tilt=0;	// variabile pot2

void setup() 
{ 
  myServo1.attach(9);  // primo servo al pin 9 
  myServo2.attach(10); // secondo servo al pin 10
  pinMode(7,INPUT);
  pinMode(8,OUTPUT);
  PortSerial1.begin(9600);
}

void loop() {

  pan=PortSerial1.read();
  tilt=PortSerial1.read();
  myServo1.write(pan);	
  myServo2.write(tilt);	
  delay(15);
}

Il risultato di tutto questo è che i servi non si muovono quando giro i potenziometri e sembrano disturbati da qualcosa.
provando a isolare il pan esclundendo il tilti sia da Surface che da Subsea il servo risponde ma i disturbi rimangono.
Sono giorni che ci sbatto la testa e non riesco a trovare il problema. dove sbaglio?

Il primo sketch presenta un errore:
PortSerial1.print(potVal1,potVal2);
che invece dovrebbe essere:
PortSerial1.print(pan);
PortSerial1.print(tilt);

Inoltre, se perdi il sincronismo cioè perdi un dato nella ricezione, quello che pan diventa tilt e viceversa

Meglio se spedisci un frame cosi' composto
'P' + pan + 'T' + tilt + CR
ove CR è il carriage return ('\n') oppure un altro carattere a tua scelta

Grazie della risposta, l'errore è mio che ho postato lo sketch sbagliato, chiedo scusa.
Per non perdere la traccia di ogni passaggio e ogni cambiamento li salvo tutti
in pratica dovrei scrivere così?

PortSerial1.print('P' + pan + 'T' + tilt + '\A');

questo è il Surface giusto per quel subsea:

#include <SoftwareSerial.h>

SoftwareSerial PortSerial1=SoftwareSerial(7,8);

int const potPin = A0;  // primo potenziometro collegato a A0
int const potPin2 = A1;  // secondo potenziometro collegato a A1
int potVal1;	// variabile pot1
int potVal2;	// variabile pot2
int pan;        // variabile PAN
int tilt;       // variabile tilt

void setup() {
  pinMode(7,INPUT);
  pinMode(8,OUTPUT);
  PortSerial1.begin(9600);
  Serial.begin(9600);
}

void loop() {
  potVal1 = analogRead(potPin);	  // leggi i valori su A0 
  potVal2 = analogRead(potPin2);  // leggi i valori su A2 
  pan = map(potVal1, 0, 1023, 0, 179);
  tilt = map(potVal2, 0, 1023, 0, 179);
  PortSerial1.write(pan);
  PortSerial1.write(tilt);
//l'ultima parte si può omettere
  //Serial.print("Pan: ");	// feedback PAN	 
  //Serial.print(pan);            // valore PAN
  //Serial.print("Tilt: ");	// feedback TILT 
  //Serial.println(tilt);         // valore TILT
  
  delay(15);
}

ho cercato parecchio on-line su come far comunicare 2 schede arduino 1 insieme, ma non ho trovato nulla di esaustivo.
inoltre le spiegazioni sulle funzioni della comunicazione seriale sono molto limitate al PC o al processing, o forse sono io che non capisco( probabile )
L'idea è arrivare a far comunicazione i due arduino, tramite fibra ottica. ( la parte hardware è pronta per il test ) Se i risultati saranno apprezzabili e soddisfacenti, li pubblicherò per metterli a disposizione di tutti visto che non è molto trattato come argomento.

No, non ci siamo: ti mancano alcuni rudimenti del C di Arduino.
1 - #include <SoftwareSerial.h> - non è necessario includere la libreria poiché già inserita nelle librerie standard
2 - PortSerial1.print('P' + pan + 'T' + tilt + '\A'); - non puoi "sommare" direttamente un carattere con un intero; meglio separare i vari print
PortSerial1.print('P');
PortSerial1.write(pan); // con write spedisci un solo carattere ASCII (Es. 0x19 = 25), mentre con print spedisci più caratteri (Es. "25")
PortSerial1.print('T');
PortSerial1.write(tilt);
PortSerial1.print('A');

Ok, la domanda ora è, per ricevere e usare quei dati che invio?

per esempio:

void loop() {
  if (PortSerial1.available()>0) { 
    pan = PortSerial1.read();
    myServo.write(pan);
  }
}

è corretto?

No, perché devi sincronizzarti sul frame ricevuto.

    char valore = 0; 
...
void loop()  {
  if (PortSerial1.available() > 0)  { 
    while (PortSerial1.read() == 'P')   {   // inizio frame
      pan = PortSerial1.read();          // pan
      valore = PortSerial1.read();     // 'T'
      tilt = PortSerial1.read();           // tilt
    }
    myServo.write(pan);
...
}

Grazie mille, ora ho capito XD XD XD
lo stesso posso fare con gli array?

Non comprendo cosa vuoi dire, spiegati meglio.