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) :
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 ??
#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 ??