Se ne era discusso in passato qui. Nello specifico si usava una struct per trasmettere in un colpo solo tutta una serie di valori.
Poi ho trovato anche questa discussione simile, dopo mi sono fermato.
Se hai esigenze più "semplici" puoi usare direttamente i metodi inclusi con la classe Serial (derivati da Stream) ed usare il Serial.print() invece di write().
Ad esempio nel tuo caso ti basterebbe questo
Serial.parseInt() - Arduino Reference
......
if(Serial.available()) {
// in value viene memorizzato il primo intero valido ricevuto dalla seriale.
int value = Serial.parseInt();
if (value != 0) {
Serial.print("Ricevuto valore intero ");
Serial.println(value);
}
}
.....
Eventualmente potresti "irrobustire" un po' il protocollo aggiungendo una intestazione che ti consente di discriminare quale valore stai ricevendo.
Se sulla seriale del TX scrivi una cosa del genere:
Serial.print("Value1: ");
Serial.prinln(val1);
Serial.print("Value2: ");
Serial.prinln(val2);
Lato RX potresti fare cosi:
int value1, value2;
......
if(Serial.available()) {
// Scorre tutto lo stream seriale fino a trovare "Value1"
if(Serial.find("Value1") {
// in value1 viene memorizzato il primo intero valido ricevuto dalla seriale subito dopo la substring "Value1"
int value1 = Serial.parseInt();
if (value1 != 0) {
Serial.print("Ricevuto valore intero ");
Serial.println(value1);
}
}
if(Serial.find("Value2:") {
int value2 = Serial.parseInt();
// in value2 viene memorizzato il primo intero valido ricevuto dalla seriale subito dopo la substring "Value2"
if (value2 != 0) {
Serial.print("Ricevuto valore intero ");
Serial.println(value2);
}
}
}
.....
Io non amo molto questo metodo perché non è il massimo dell'efficienza, però funziona ed è abbastanza semplice da implementare.