Valori inaspettati in ricezione.......

Mi trovo difronte ad un ennesimo problema a cui forse uno di voi saprà darmi lumi.

Ho creato un piccolo client tcp che si collega alla porta 1501 ad una macchina a cui devo inviare dei comandi in codice hex, e fino a qui nessun problema.....

Creo un array in cui inserisco la sequenza di dati in hex da inviare alla macchina

byte Richiesta[] = {0xfe, 0x00, 0xe8, 0x01, 0xe9, 0xff}; //Valori per richiesta stato macchina.

invio i dati alla macchina in questo modo:

client.write(Richiesta,6);

La macchina esegue correttamente tutti i comandi che gli invio, il mio problema sta nella ricezione dei dati dalla macchina, infatti io mi aspetto di ricevere i dati in questo modo:

FE0E814D6163726F5F466C61740C1FF

Mentre dalla seriale leggo:

FFFFFFFE0FFFFFFE814D6163726F5F466C61740FFFFFFC1FFFFFFFF

per leggere i dati ricevuti uso:

if (client.available()) {
char c = client.read();
Serial.print(c,HEX);

}

Per quale motivo mi trovo tutti quegli FF in piu nella ricezione?

Devo poi inserire i dati ricevuti in un array, in quanto solo alcuni dei valori devono essere modificati, ovvero i primi tre, e l'ultimo che e uguale alla somma di tutti i precedenti, per sapere quanti valori ho ricevuto ho usato questo metodo:

if (client.available()) {
char c = client.read();
Serial.print(c,HEX);
NtxtMsg += c;
Serial.println(NtxtMsg.length());
Serial.print(" ");
}

Dalle prove che ho fatto il numero che mi viene indicato e corretto, ma se qualcuno ha metodi migliori da suggerirmi.....

grazie!!!

Ciao,

Per quale motivo mi trovo tutti quegli FF in piu nella ricezione?

da quel che vedo mi sembra che i tre FF FF FF forse facciano parte della codifica delle stringhe di dati restituite dalla macchina.
Ossia inizio frame dati e poi fine frame.
Il valore somma serve alla macchina (e a te) per vedere se i dati sono stati trasmessi correttamente prima di procedere con le operazioni richieste.

Ciao,
Marco.

Intanto grazie della risposta!

Il problema e che se ricevo i dati con un altro programma i valori ricevuti sono giusti, ho anche scritto lo stesso prog con visual basic e non ricevo tutti quegli ff come in questo caso

FFFFFFFE0FFFFFFE814D6163726F5F466C61740FFFFFFC1FFFFFFFF
ma ricevo
FE0E814D6163726F5F466C61740C1FF
non vorrei sia un problema di tempistica o altro, anche perche il valoe ex di ff e diverso da ffff non so se mi sono spiegato.

Ma usi il terminale seriale dell'IDE?
Quello non è un vero terminale, dovresti procurartene uno, però non chiedermi nomi perché per Windows (vedo che programmi in VB) non so cosa possa esserci.

Ciao,

puoi utilizzare un serial monitor per vedere cosa succede e quali stringhe vengono scambiate e con quale modalita'.

Con che apparecchio ti stai interfacciando?

Ciao,
Marco.

Ora che le ferie sono finite (PECCATO!), mi ritrovo nuovamente ad affrontare i problemi con Arduino.
Sono finalmente riuscito a capire perchè i valori ricevuti non sono corretti, non dipende dal serial monitor, ma dal fatto che c e dichiarato come char.
Se imposto c come int i valori letti sono giusti, FF mi viene scritto come valore 255.
Ora devo risolvere pero altri problemi, la risposta ricevuta devo elaborarla, e ricalcolare il valore finale, pensavo di inserire i valori in un array, per poi sostituire quelli che mi servono, e ricalcolare il valore finale.
Il problema pero e che non posso piu usare lo NtxtMsg.length());, perche conta il numero di caratteri contenuti in ogni valore.

Continuo ad insistere e vedremo grazie a tutti, e se qualcuno a qualche idea da suggerirmi per inserire i valori ricevuti in un array e ricalcolarli e ben accettto, per il momento continuo a tentare.
Se risolvo posto il codice per i posteri.

Grazie Vic

Per risolvere il problema dei valori strani in ricezione e bastato cambiare la dichiarazione di c da char a unsigned char

 if (client.available()) {
  
   unsigned char c = client.read();
   
 
    Serial.print(c, HEX);
   b += c ;
   Serial.print(" ");
   
    Serial.print(b.length()); 
    Serial.print(" ");
  
    Serial.println();
 
  }