Stampa di un array.

Salve a tutti, ho un piccolo problema.
Ho un array contenente i valori estratti da una seriale rs232, ogni elemento dell'array è una lettera o un numero del messaggio inviato tramite rs232.
Vorrei spedire il messaggio ricevuto tramite pagina php. Avrei bisogno di riunire i dati contenuti nell'array in una stringa, per avere un solo elemento da inviare e non 1000.
Aspetto vostre notizie, grazie!

qualcosa tipo questo?

String tutto ="";
for (int i=0;i<lunghezzaArray;i++){
   tutto = tutto + array[i];
}

I numeri devi rappresentarli sottoforma di stringa ? In quel caso ci vuola una sprintf o una itoa prima della concatenazione.

Mah. usare il tipo stringa che "cresce" in un loop è la strada più veloce per esaurire la memoria dii arduino runtime :slight_smile:

Ma una bella strcat?

#define MAX_STR_LEN 512
...
char tutto[MAX_STR_LEN];
char buf[5];
...
for (int i=0;i<lunghezzaArray;i++){
   strcat(tutto,itoa(buf,array[i],10));
   }

più o meno (non l'ho testata) e assumando che array[] sia un array di int.

brunialti, per quanto preferisca la tua soluzione a quella con la String, direi che il modo migliore per esaurire la ram è allocare buffer grandi quanto 1/4 la ram stessa :stuck_out_tongue:

Eh dai, non fare così... :~ la dimensione la decidi tu, ovviamente, in base al calcolo della lunghezza dell'array... o della lunghezza della stringa di stampa... e poi almeno la esaurisco alla compilazione e non al runtime ...
Ricordati che ogni volta che usi operatore + con string, bisogna fare un realloc implicito. con il pericolo (o la certezza se sei pessimista) che se la stringa non riesce ad espandersi in una area contigua, alloca un novo spazio lasciando i famosi "buchi" nella memoria heap. come un formaggio svizzero

va bene. proviamo una altra via. visto che leggi da una seriale, immagino che i caratteri siano o numeri interi di tipo byte (uint_8) o char.
A questo punto usi una bella union sul tuo buffer che cosè potrai "vedere ed usare" sia come byte che come char a seconda della necessità e inoltre non allochi due buffer (uno per array e uno per stringa). Basta mettere un bel "tappo" alla stringa (uno 0 alla fine dei caratteri letti da rs232).

union rs_buf{
  byte b[512];  // o lungo quanto ti pare alla faccia di tuxduino :-)
  char c[512];
  };

rs_buf array;

ma guarda che mi tocca fare per farvi contenti ....

:smiley: