GalaxyHD96:
Mi sono accorto che le lib arduino, mettono a disposizione la funzione malloc(...) e realloc(....) che servono rispettivamente a riservare la ram ad una variabile, ed a liberarla... per le stringhe ti consiglio di usarle... almeno così liberi spazio in ram... considera che quello che passi come stringa, verrà mantenuto in ram... quindi all'esaurimento della ram, il micro si resetta! in piu al posto di usare interi, usa uint8_t / uint16_t / uint32_t / uint64_t in base a quello che devi fare...
Un consiglio, non "giocate" con l'allocazione dinamica della memoria in un micro con 2 soli KB di RAM. Si corre seriamente il rischio di mandarlo in crash con poco. L'oggetto String, difatti, è uno dei principali artefici dei problemi di esaurimento della memoria. Creare a runtime stringhe corpose porta un'elevata frammentazione della memoria e non è detto che distruggere l'oggetto libera RAM.
Esempio: se hai una stringa di 10 caratteri, poi un'altra di 12, se distruggi la prima e ne crei una terza di 20 caratteri, questa stringa andrà a posizionarsi dopo la seconda perché i 10 caratteri iniziali non bastano a contenerla. E nella RAM non ci stanno solo gli oggetti dinamici ma TUTTI i dati, compreso lo stack, le variabili statiche ecc... Anche i messaggi di testo che si mettono nei Serial.print vengono prima copiati in RAM, per questo è stata aggiunta la funzione F() che permette di leggere le stringhe costanti direttamente dalla Flash.