Arduino mega si blocca dopo un tempo random

Buongiorno,
Possiedo arduino mega, connesso un ethernet shield (W5100), due sensori DHT22, un display 20x4 i2c, 3 pulsanti e un amperometro non invasivo per creare un termostato, con funzione di client web che invia i dati rilevati a un server WEB. Dopo alcuni giorni, o a volte alcune ore si blocca e riesco a ripristinare solo con un reset. A cosa potrebbe essere dovuto? ho sostituito sia arduino che ethernet shield ma la situazione rimane uguale.
Grazie

Prima di tutto, nella sezione in lingua Inglese si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post ...

... poi, essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

P.S.: Il tuo post è già stato spostato nell'opportuna sezione del forum "Italiano”dove puoi proseguire.

Presumo da un errore dello Sketch.
Dopo che ti sei presentato facci vedere lo sketch.
Ciao Uwe

Scommettiamo che ci sono le "String" sparse in giro? :wink:

Mi scuso per la mancata presentazioni, l’ho inserita qualche ora fa.Le stringhe ho sospettato siano un problema, ma non sono riuscito a usare char*, se possibile avere un esempio sul mio sketch così posso sostituire le stringhe. Questo problema si presenta da diversi mesi, è un progetto ben realizzato ma questo “problema” sta affossando questo, e molti altri progetti domotici che vorrei realizzare. Confido in voi per un aiuto. Preciso che a volte si blocca dopo qualche ora, a volte anche dopo 2/3 giorni. Allego lo sketch come file, perchè supera i 9000 caratteri.
Spero postare correttamente il blocco di codice. Allego una foto del termostato realizzato, e posizionato a parete. Grazie

Progetto.ino (20.4 KB)

proprio una o due le String...con tanto di cast.... :smiley:

due possibili suggerimenti (magari ce ne sono di meglio ma al volo mi vengono questi):

  1. essendo il display un 20x4, se non fai scorrimento del testo, ti crei 4 array di char[21] (c'è il terminatore) corrispondenti alle 4 righe; le riempi con quello che ti serve e le stampi a display.

  2. cerchi qui nel forum la libreria suggerita da Sukkopera per le stringhe...che ti mette a disposizione i metodi delle Stringhe normali ma con meno problemi in quanto allochi inizialmente lo spazio necessario massimo.

>elia_prjh: ricorda sempre che NON sei su un PC dove c’è un sistema operativo ed un “garbage collector”, sei su una piccola MCU con solo 2KBytes di SRAM, dove devi fare tutto tu e dove usare la classe “String”, a causa dell’allocazione e riallocazione dinamica della memoria, porta quasi sempre … a grossi problemi e sicuri mal di testa !!! :smiling_imp:

Impara ad usare le stringhe classiche del ‘C’ … ovvero semplici array di char terminati dal carattere null (0x00) e le funzioni che trovi nella libreria standard (… che, oltretutto, è automaticamente inclusa dal IDE) AVR libc ed, in particolare, quanto è in <string.h> :wink:

Guglielmo

ORSO2001:
proprio una o due le String…con tanto di cast… :smiley:

Visto che ho indovinato (senza neanche avere la sfera di cristallo), ho vinto quacchecosa? :smiley:

Ringrazio per le risposte, ma come posso sostituire questa parte di codice? Non riesco a concatenare due char.

String data = String(year()) + "-" + String(month()) + "-" + String(day());
   String ora = String(hour()) + ":";
   if(minute() < 10)
    ora += '0' + String(minute()) + ":00";
   else {
    ora += String(minute()) + ":" + String(second());
   }

oppure convertire un int in array di char.

Grazie

... dalle tue domande vedo che hai ignorato il mio post #6 dato che, se vaessi studiato i link che ti ho dato, NON avresti questi dubbi e sapresti fare ciò che chiedi ...

Guglielmo

indizio:
ad esempio usando itoa() per int to string
e snprintf() (invece di strcat) per creare la data

Dalla tua presentazione: "Sono sviluppatore informatico" non dice molto. Conosci il C e C++ ? Boh
Se si, snprintf "stampa" come la printf() non su video ma dentro a un array di char (stringa classica del C)

Conosco il C, a livello scolastico ma mai approfondito.
Ho letto tutta la documentazione nel post 6 citato; comunque rimuovendo TUTTE le stringhe dal codice, il problema persiste! proverò a rimuovere una function per volta fin quando troverò la quadra. Grazie

Ti consiglio di fare una ricerca qui sul forum (lente in alto a destra) per le seguenti parole chiave "pablos ethernet" ...
... pablos, utente di questa sezione del forum, è stato quello che credo abbia fatto più prove sulla ethernet e, se ti leggi TUTTI i suoi post, troverai un'infinità di suggerimenti e trucchi per evitare i problemi ... :wink:

Guglielmo