Arduino Mega + Ethernet Shield 2 difettosi ? O codice errato?

Ciao a tutti , sono al mio primo progetto con Arduino.
Volendo attivare molte uscite e avendo bisogno di spazio ho optato per l'arduino mega 2560 Rev 3 + Ethernet Shield 2 . (tutto originale)
A questo punto ho iniziato a documentarmi su internet su come fare il classico progettino accendi e spegni il led da remoto.
Tutto perfetto , appena adattato il codice alla mia rete tutto funzionava liscio. Se non che dopo circa 12/16 ore di lavoro il sito diventa irraggiungibile.
A questo punto ho fatto le prove piu disperate, giocare sui pin 4 e 10 e 53 , ma niente. Importare libreria Sd (anche se non la uso) ma niente.
Leggendo sui forum mi è venuto il dubbio di controllare la memoria , ma niente , la memoria c'è e non scende.
Dopo tutte queste prove ho pensato di creare un lampeggio ogni minuto , cosi magari da verificare se era un problema della ethernet shield o del mega , per fare ciò non ho usato le classiche istruzioni del tempo che avrei dovuto usare, ma per non rimettermi a studiare altre cose e fare piu veloce ho sfruttato una sleep da 1 ms per calcolare poi secondi minuti e ore ( so perfettamente che non è preciso perchè lavora sui cicli)
Fatto tutto funzionava come piu o meno come me lo aspettavo. cioè ogni 67 secondi avevo un lampeggio.
Ad un certo punto mi sono accorto che il tempo si dilatava , sono passato a 90 secondi per un lampeggio.
Ancora dopo sopra i 120 secondi e a quel punto il mio caro dispositivo diventava irraggiungibile da remoto.
Ho pensato di fargli fare un reset ogni 6 ore circa, sfruttando il watchdog. Cosa che funziona parzialmente nel senso che con il reset da watchdog certe volte i tempi del lampeggio non sono sempre da 67 secondi come per il reset manuale, ma piu alti intorno ai 90 secondi.
Cari amici, non so piu che pensare e fare perchè mi trovo alla mia prima esperienza e non so neppure se a questo punto la scheda è difettosa o semplicemente manca qualcosa nel codice.
Grazie a tutti per avermi letto.

#include <avr/wdt.h>
#include <MemoryFree.h>

#include <Ethernet2.h> //libreria ethernet
#include <SPI.h> //collabora con la libreria ethernet
#include <SD.h>
#include <String.h> //gestione stringhe

byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; //indirisso fisico
byte ip[] = {192, 168, 2, 177}; //indirizzo ip locale
byte subnet[] = {255, 255, 255, 0}; //indirizzo subnet
byte gateway[] = {192, 168, 2, 1}; //indirizzo gateway
EthernetServer server(80); //imposto porta protocollo HTTP


int led = 40; //dichiarazione led
int cont = 0; int secondi = 0; int minuti = 0; int reset = 0;
String ascoltatore; //dichiarazione stringa

void setup() {
  wdt_enable(WDTO_8S);
  Serial.begin(9600);
  pinMode(4,OUTPUT);   // per evitare blocchi e bug
  digitalWrite(4,HIGH);// per evitare blocchi e bug
  pinMode(10,OUTPUT); // per evitare blocchi e bug
  digitalWrite(10,HIGH); //
  pinMode(53,OUTPUT); // per evitare blocchi e bug
  digitalWrite(53,HIGH); //
  Ethernet.begin(mac, ip, gateway, subnet); //inizializzazione impostazioni
  pinMode(led, OUTPUT); //impostazione led come output
  ascoltatore=""; //inizializzazione stringa
  Serial.print("server is at ");
}
void loop() {
 
               // Reset sfruttando WATCHDOG
                  cont = cont + 1 ;
                  if (cont == 1000){     
                      secondi = secondi + 1 ;
                      cont = 0 ;
                      if (reset == 0){
                      wdt_reset();
                      }
                      
                      if (secondi == 60){
                      minuti = minuti +1 ;
                      secondi = 0 ;
                      Serial.println(minuti);
                      }
                      if (minuti == 360){
                      reset = 1 ;
                      }
                   }    


                  // LAMPEGGIO PER CONTROLLARE SE ARDUINO ANCORA LAVORA (QUANDO LA RETE NON FUNZIONA PIU)
                  if (secondi == 30 ) {   
                      digitalWrite(led, HIGH); //se c'è accendo il led
                      delay (1000); 
                      digitalWrite(led, LOW); //altrimenti spengo il led
                      secondi = secondi + 1;
                      }   
        
  EthernetClient client = server.available(); //attendo l'arrivo di un client
  
  if (client) { //se c'è il cliente deve..
    
    while(client.connected()) {
      if(client.available()) {
        char c = client.read(); //..leggere i caratteri che invia
        ascoltatore.concat(c); //concatena i caratteri del client
 
        if (c == '\n') { //se arrivo a fine riga
           if(ascoltatore.indexOf("led=1")>0) { //controllo che nell'url ci sia led=1
             digitalWrite(led, HIGH); //se c'è accendo il led
           }
           else {
            digitalWrite(led, LOW); //altrimenti spengo il led
           }
           
    client.println("HTTP/1.1 200 OK"); //dico al client che è tutt'ok - standard http
    client.println("Content-Type: text/html"); //indico il formato - standard http
    client.println(); //necessario per non buggare 
    client.println("<html>");
    client.println("<head><title>ControlloRemoto</title> <link rel='shortcut icon' type='image/x-icon' href='http://i44.servimg.com/u/f44/16/84/89/65/23570310.png' />");
    client.println("<style type=\"text/css\">");
    client.println("#orizzontale {");
    client.println("background-image: url(http://www.xxxxx.it/img/yyyyyyy.jpg);");
    client.println("width: 960px; height: 1050px; background-color: #333333; margin: 0 auto;color: #CCCCCC");
    client.println("}");     
    client.println("#centratesto {");
    client.println("margin: 0 auto; font-family: Impact, Haettenschweiler, 'Arial Narrow Bold', sans-serif; font-size: xx-large; width: 327px;");
    client.println("}");     
    client.println("#sfondo {");
    client.println("background-color:#000000;");
    client.println("}");     
    client.println("#Button1 {");
    client.println("z-index: 2; left: 90px; top: 237px; position: relative; height: 47px; width: 199px;background-color:transparent; border-style :none;");
    client.println("}");
    client.println("#Button2 {");
    client.println("z-index: 1;left: 145px; top: 242px; position: relative; height: 51px; width: 201px; background-color:transparent; border-style :none;");
    client.println("}");
    client.println("</style>");            
    client.println("</head>");
    client.println("<body id=\"sfondo\">");
    client.println("<div id=\"orizzontale\">");
    client.println("<input id=\"Button1\" type=\"button\" onmousedown=\"location.href='/?led=1'\" onclick=\"alert('Hai acceso il Led')\"/>");
    client.println("<input id=\"Button2\" type=\"button\" onmousedown=\"location.href='/?led=0'\" onclick=\"alert('Hai spento il Led')\"/>&nbsp;");
    client.println("</div>");
    client.println("</body>");
    client.println("</html>");
    delay(1);
    client.stop(); //stop richieste dal client
    Serial.print("freeMemory()=");
    Serial.println(freeMemory()); 
    ascoltatore="";
        }
      }
    }
  }
  delay(1);
 }

Nessuno può darmi qualche suggerimento?

Risolto

almeno dicci in che modo hai risolto

Pascal

Cambiando scheda. Era difettosa