Problema con la funzione client.connect(server,80)

Salve,
ho una scheda Arduino Uno e sto provando a realizzare un programmino che simuli un antifurto tramite laser, fotoresistenza, buzzer, etc. Nel momento in cui il buzzer comincia a suonare il valore della variabile flag passa da 0 a 1; quando il sistema (tramite bottone) viene spento, arduino deve connettersi ad un server locale (avendo usato XAMPP si fa riferimento al mio pc), mediante pagina php salvata opportunamente in ‘htdocs’ esso va a scrivere i dati nel database creato con mysql (ho usato sempre XAMPP). Il problema sorge nel momento in cui provo a instaurare una connessione con il server (il cui indirizzo IP è ovviamente quello del mio pc): la funzione client.connect(server,80) restituisce 0 come valore di ritorno e la connessione, ovviamente, non avviene. Ho provato in più modi a risolvere ma tutto inutile! Allego codice in seguito e ringrazio anticipatamente per le risposte!

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

byte mac[] = {0x90, 0xA2, 0xDA, 0x0D, 0x3F, 0x5C};   //MAC ADDRESS: serve per inizializzare il controller e la connessione Ethernet

IPAddress server(192, 168, 1, 3);  //indirizzo server web (locale)
IPAddress ip(192, 168, 1, 200);  //indirizzo ip dell'Arduino che uso se fallisce il tentativo DHCP
                              //indirizzo ip che dipende dalla mia sottorete
EthernetClient client;      //utilizzo la classe per poter comunicare con un server attraverso una socket
String strURL = "";
float temp = 0;

// Definiamo delle costanti  
const int rosso = 9; 
const int verde = 8; 
const int pulsante = 7; 
const int laser = 5; 
int stato=0; // All`apertura il sistema è spento 
int val=0; // Memorizza il valore dello stato tra un ciclo e l'altro 
int luce;
int flag=0;

void setup() {      // All'interno della funzione 'setup' inserisco il codice di inizializzazione. Inizializza tutte le impostazioni e le istruzioni della
                    // scheda (gli INPUT e OUTPUT) prima che il ciclo principale del programma si avvii. 
                     // In base alla scelta I/O successivamente utilizzerò write/read
  Serial.begin(9600);
  pinMode(verde, OUTPUT);   // Imposta il pin verde (il numero 8 in questo caso) come Output. --> E' una operazione di inizializzazione
  pinMode(rosso, OUTPUT); 
  pinMode(pulsante, INPUT); 
  pinMode(laser, OUTPUT); 
  pinMode(A0,INPUT);
  

      Ethernet.begin(mac, ip);    //eseguo inizializzazione con indirizzo IP inserito su
      delay(6000);

}
 
void loop() {      // All'interno della funzione 'loop' inserisco il codice principale del programma. Contiene una serie di istruzioni che possono essere ripetute
                   // una dopo l'altra fino a quando non spegniamo la scheda Arduino.
 val = digitalRead(pulsante); // Legge lo stato di un input Pin, ritorna HIGH se il Pin riceve della tensione oppure LOW se non c’è tensione applicata. Salvo nella variabile 'val'
 delay(5);      // Mette in pausa il programma per un numero di millisecondi specificato.
 
 if (val == HIGH) {     //  Controllo se il pulsante è accesso 
    stato = 1 - stato;     // Conservo il valore della scelta fatta col pulsante. 
 } 
 
 if (stato == HIGH) {     // Se premo il pulsante accendo il sistema 
    digitalWrite(rosso, LOW);  // Spengo il pin rosso (il numero 9 in questo caso)
    digitalWrite(verde, HIGH);   // Accendo il pin verde
    digitalWrite(laser, 1);  // Accendo il laser
    luce = analogRead(A0); // Leggo il valore dal pin analogico passato alla funzione e lo salvo nella variabile 'luce'
      // La funz. legge la tensione applicata a un ingresso analogico e ritorna un numero tra 0 e 1023 che rappresenta le tensioni tra 0 e 5 V.
    if (luce<100) { 
        tone(3, 500);    // Genera un'onda quadra alla frequenza specificata. Sintax: tone(pin,frequenza). L'onda viene generata sul pin passato alla funzione
        flag=1;
    }
} 
 
else {     // Se premo il pulsante accendo il red rosso e spengo il sistema
 noTone(3);     // Disattivo la funzione 'tone' utilizzata prima. (=spengo il buzzer)
 digitalWrite(verde, LOW); 
 digitalWrite(rosso, HIGH); 
 digitalWrite(laser, 0); 
 UpdateTemp();     // chiamata alla funzione UpdateTemp

 while(client.available()){ // con il metodo available verifico che ci siano dati da leggere
    char c = client.read();   // leggo i dati mediante il metodo read. leggo un byte alla volta
    Serial.print(c);
 }

    if (!client.connected()){ // con il metodo connected controllo che il server non abbia chiuso la connessione
        Serial.println();
        Serial.println("Disconnesso.");
        client.stop();      // stop del client
     }
  delay (1000);
} 
}


void UpdateTemp(){
delay(6000);
client.connect(server, 80);
if (client.connect(server, 80)){
    Serial.println("Connesso");

    strURL = "GET/arduino/finale.php?flag="; //creo l'url utilizzando una stringa
    strURL+=flag;
    strURL+= "HTTP/1.1";

    //invio la richiesta al server
    client.println(strURL);
    client.println("Host: 192.168.1.3");
    client.println("Connection: close");
    client.println();

    client.stop();//chiudo la connessione
}
    else {
        Serial.println("Errore connessione");
    }
}

Prima di tutto ti segnalo che, 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 la discussione.
P.P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink: