Scusa, nel loop vedo questo:
void loop() {
if (Serial1.available()) {
while (Serial1.available())
{
d = Serial1.read();
Serial.write(d);
if ( d != '\n' ) {
if ( d != '\r' ) {
dato[conta] = d;
conta++;
} else {
for (int i = 0; i < 100; i++)
dato[i] = 0;
}
}
}
}
... eccetera
Quindi tu usi la variabile "conta" come indice dell'array dato[] per memorizzare i dati, esatto? La variabile la inizializzi a zero, poi nel loop la incrementi ad ogni carattere, ed anche questo va bene.
Stando a quanto vedo, tu in questa sezione del loop() se il carattere ricevuto è diverso da LF, vai a vedere se è diverso anche da CR ed in questo caso accumuli nell'array ed incrementi "conta", altrimenti resetti il buffer. Quindi di fatto i tuoi dati DEVONO finire con \r o almeno \n esatto?
Primo, sei quindi sicuro che dall'altra parte ti mandano le informazioni terminandole con \r \n o almeno \n? Se non ricevi il terminatore, tu accumuli i vari byte fino a far scoppiare il tuo buffer dato[] dopo 255 byte ricevuti visto che non ti sei chiesto dov'è che la variabile "conta" la riporti a zero (ossia mai, almeno stando al listato che hai postato....).
Secondo, se anche ti mandassero i dati correttamente ossia con il terminatore previsto, tu alla ricezione del terminatore invece di USARE il dato fin qui ricevuto hai messo quel for() che riporta a zero tutti i dati, quindi non leggerai mai nulla! Questo, sempre stando a quanto dici, non capita mai (altrimenti avresti detto che non leggi nessun dato) per cui temo che tu NON riceva mai \n.
Terzo, è un suggerimento per farti capire come si fanno queste cose: per fare quello che ti serve dovresti usare DUE array, uno per accumulare i byte ricevuti (in genere viene chiamato "buffer") diciamo un "char buf[255];", ed uno, anche il tuo "dato[255]" dove troverai l'ultimo dato completo ricevuto.
Quando ricevi \n devi copiare tutti i byte da buf[] a dato[] (escluso il \n) e se lo usi come una stringa mettere in coda il terminatore di stringa (\0) quindi azzerare buf[] e riposizionare a zero il "conta" (è qui che va fatto).
Prova a modificare in questo modo il programma e facci sapere.