Forse ho trovato.
Prima di tutto quando hai un codice così lungo premi CTRL+T che lo indenta per bene,
poi togli quei 24mila kg di righe vuote che non servono a nulla:
#include <SPI.h>
#include <Ethernet.h>
const byte sensor = A0; // Pin analogico 0 di Arduino
int temp;
byte mac[] = { 0x70, 0xF1, 0xA1, 0x04, 0x79, 0x49 }; // Indirizzo MAC da assegnare ad Arduino
byte ip[] = { 192, 168, 1, 2 }; // Indirizzo IP da assegnare ad Arduino
byte server[] = { 144, 76, 107, 78 };
byte gateway[] = { 192, 168, 1, 1 }; // Indirizzo del Gateway della propria rete
byte subnet [] = { 255, 255, 255, 0 }; // Subnet mask della propria rete
EthernetClient client;
void setup()
{ // Inizializzazione per l'utilizzo della rete
Ethernet.begin( mac, ip, gateway, subnet );
Serial.begin (9600);
}
void loop()
{ temp = analogRead(sensor)*500/1024.0;
delay(15000);
// Converte il valore di 10 bit ADC rilevati sul pin A0 in volt
invia_dati () ;
}
void invia_dati()
{ Serial.print (" Connecting..." ) ;
// L'oggetto Serial serve solo a monitorale cosa accade
EthernetClient client;
// Inizia la connessione al server
if( client.connect (server,80) )
{ Serial.println( " Connected. " ) ;
Serial.println ( temp ) ;
// Le seguenti istruzion inviano il dato allo script PHP:
client.print ( "GET http://spazdiprova.altervista.org/temp.php?temp=" ) ;
client.print ( temp ) ;
client.println(" HTTP/1.1" ) ;
client.println ( "Host: http://spazdiprova.altervista.org" ) ;
client.println () ;
Serial.println ( "disconnecting..." ) ;
client.stop();
}
// if the server's disconnected, stop the client:
else
{ Serial.println ();
Serial.println ( "disconnecting." ) ;
client.stop();
while ( client.status() != 0 ) delay (5) ;
}
}
Ora, nel tuo sketch hai creato una funzione invia_dati(), e fin qui tutto bene.
Però dentro CREI DI NUOVO una variabile EthernetClient client
Quella esiste già, è all'inizio. Se la metti dentro la funzione, appena quella finisce, viene distrutta e perdi la connessione.
Togli quella riga.