Arduino ethernet + Relay shield - Ping and WebServer

Salve a tutti, premetto che sono un principiante sulla programmazione di Arduino. Devo implementare un mini-telecontrollo per un wISP. In poche parole devo fare dei ping ad un IP e dopo 10 Timout devo aprire il circuito in modo da spengere gli apparati per 10 secondi e riaccenderli. Fino a qui tutto ok, posto il codice (ho usato la libreria ICMPPing.h) :

void loop() {
  if (DELAY_PING > DELAY_CEHCK_PING ) {
    ICMPPing ping(pingSocket);
    ping(4, pingAddr, buffer);
    if (String(buffer).indexOf(STR_FAIL) != -1) {
      PING_FAIL++;
      if (PING_FAIL > WAIT_TO_RESET ) {
        Serial.println( "Ping FALLITO ! Count Reset eccessivo SPENGO la porta ! ");
        digitalWrite(5, LOW);
        delay(DELAY_OFF);
        digitalWrite(5, HIGH);
        Serial.println( "Ping FALLITO ! Count Reset eccessivo ACCENDO la porta ! ");
        PING_FAIL=0;
      } else {
        Serial.println( "Ping FALLITO ! Count Reset: " + String(PING_FAIL) );
      }
    } else {
      Serial.println(buffer);
    }
    DELAY_PING = 0;
  } else {
    DELAY_PING++;
  }
  
  delay(1);
}

il problema sta nel fatto che devo fare anche un mini pannello web dove occorre visualizzare lo stato dei canali. Prima del delay ho inserito il codice per creare un WebServer (come da esempio nel compilatore). Il problema sta nel fatto che se richiamo due volte la pagina web i ping mi tornano sempre in timeout e Arduino mi fa partire procedura per spengere e riaccendere il canale ...

Come posso implementare un sistema che faccia di continuo i ping e se viene richiamata una pagina web restituisca lo stato dei canali ??

grazie mille Sascha

mi ero dimenticato di mettere il codice iniziale

#include <SPI.h>
#include <Ethernet.h>
#include <ICMPPing.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 
  0x90, 0xA2, 0xDA, 0x0D, 0x93, 0x70 };
IPAddress ip(192,168,1, 183);
IPAddress sub(255,255,255,0);
IPAddress gw(192,168,1, 5);

SOCKET pingSocket = 1;

int WAIT_TO_RESET = 10; //numero di tentativi falliti dopo il quale si effettua lo shutdown della porta !
int PING_FAIL = 0;
int DELAY_PING = 0; //variabile per il controllo del delay del loop principale
int DELAY_CEHCK_PING = 5000; // ogni 5 secondi effettua un ping !!
int DELAY_OFF = 7000; //quanto deve tenere spento il canale

char STR_FAIL[] = "Timed Out";

byte pingAddr[] = {192,168,1,14};
char buffer [256];

EthernetServer server(80);

void setup() {
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  //imposto i PIN out per la shield dei Relè
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  
  //imposto tutti i canali ACCESI
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);
  digitalWrite(8, HIGH);
  
  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip, gw, sub);
  server.begin();
  delay(100);
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}

Forse dovrei aver capito il problema ... ovvero i socket ....
Arduino quanti socket può aprire ?? la libreria ethernet parte da 0 come default giusto ??

Puoi avere solo 4 socket.
Inoltre sbagli l'inizializzazione della ethernet.
Con 4 paramenti devi passare

Ethernet.begin(mac, ip, dns, gateway);

Mentre per passare la netmask devi utilizzare l'inizializzazione con 5 paramenti.

Ethernet.begin(mac, ip, dns, gateway, subnet);

Nel tuo caso puoi mettere:

Ethernet.begin(mac, ip, gw, gw, sub);

--> Ethernet - Arduino Reference

Grazie mille Paolo !!
Ultima domanda, come posso fare per riservare un socket ai Ping e 3 al web server ??
Grazie ancora !!

Non ho mai lavorato con quella libreria.
Potresti pero chiedere a brunol949. Ha realizzato un progetto simile --> http://arduino.cc/forum/index.php/topic,93073.msg751133.html#msg751133