problemi connessione arduino uno con ethernet shield

Buongiorno a tutti,
possiedo un arduino uno con attacata una arduino ethernet shield.
Compilo il seguente codice (vedi sotto) e tutto va a buon fine, mi da caricamento completato.
quando vado a fare un ping da pc mi da che non è raggiungibile e neache se accedo via web visto che è un server web.
L'arduino è collegato alla rete di casa tramite uno switch
Cosa potrebbe essere che non funziona??

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

byte mac[]={0x3C,0xA7,0xDC,0x23,0x8F,0xD7};
byte ip[] = { 192, 168, 1, 30 }; // indirizzo IP della shield
byte gateway[] = { 192, 168, 1, 1 }; // indirizzo ip del router
byte subnet[] = { 255, 255, 0, 0 }; //subnet mask
EthernetServer server(80);

int ledPin = 13; // LED pin
String readString;
boolean LEDON = false;

void setup(){
Ethernet.begin(mac, ip, gateway, subnet);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}

void loop(){
EthernetClient client = server.available();
if (client) {
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
readString.concat(c);

if (c == '\n' && currentLineIsBlank) {

Serial.print(readString);

if(readString.indexOf("Led=1") > 0) {

digitalWrite(ledPin, HIGH);
LEDON = true;
}else{

digitalWrite(ledPin, LOW);
LEDON = false;
}

client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.print("Megalab.it by MGTeck & Gabry 1609");
if (LEDON) {
client.println("");
}
else
{
client.println("");
}
client.print("

ACCENDI | SPEGNI

");
client.println("");
readString="";
client.stop();

}
}
}
}
}

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:

Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare.
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.

letto
ecco il codice con i tag

#include <String.h>  
   #include <SPI.h>  
   #include <Ethernet.h>  
     
 
   byte mac[]={0x3C,0xA7,0xDC,0x23,0x8F,0xD7};
   byte ip[] = { 192, 168, 1, 30 }; // indirizzo IP della shield  
   byte gateway[] = { 192, 168, 1, 1 }; // indirizzo ip del router  
   byte subnet[] = { 255, 255, 255, 0 }; //subnet mask  
   EthernetServer server(80);   
     
   int ledPin = 13; // LED pin  
   String readString;   
   boolean LEDON = false;   
     
   void setup(){  
     Ethernet.begin(mac, ip, gateway, subnet);  
     pinMode(ledPin, OUTPUT);  
     Serial.begin(9600);  
   }  
     
void loop(){  
   EthernetClient client = server.available();  
   if (client) {  
    boolean currentLineIsBlank = true;  
    while (client.connected()) {  
    if (client.available()) {  
    char c = client.read();  
    readString.concat(c);   
      
    if (c == '\n' && currentLineIsBlank) {  
      
    Serial.print(readString);  
      
    if(readString.indexOf("Led=1") > 0) {  
      
    digitalWrite(ledPin, HIGH);   
    LEDON = true;  
    }else{  
      
    digitalWrite(ledPin, LOW);   
    LEDON = false;  
    }  
      
    client.println("HTTP/1.1 200 OK");  
    client.println("Content-Type: text/html");  
    client.println();  
    client.print("<html><head><title>Megalab.it by MGTeck & Gabry 1609</title><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' ></head><body>");  
    if (LEDON) {  
    client.println("<img src=http://img849.imageshack.us/img849/1513/accesao.jpg />");  
    }  
    else  
    {  
    client.println("<img src=http://img10.imageshack.us/img10/4719/spenta.jpg />");  
    }  
    client.print("<h2><a href='/?Led=1'>ACCENDI</a> | <a href='/?Led=0'>SPEGNI</a></h2>");  
    client.println("</body></html>");  
    readString="";  
    client.stop();  
     
    }   
    }   
    }   
   }   
}

spero che qualcuno possa aiutarmi
ho provato anche ad assegnare l'indirizzo ip dinamicamnete ma non viene assegnato nessun IP dalle prove che ho succesivamente provato a fare

Sicuro della mask ? 255,255,0,0

Da me è 255.255.255.0 a volte trovo in giro 255.0.0.0 mi pare raro 255.255.0.0

infatti ho correntto sotto
la maschera è 255.255.255.0

Ma tu hai solo uno switch oppure il tutto è collegato ad router con cui vai in internet da pc ?

Se hai windows prova a dare comando "ipconfig" da dentro una sessione terminale per sapere i parametri del pc

ho sia uno swich che un router con il quale vado in internet
ip pc 192.168.1.3
ip router 192.168.1.1
maschera 255.255.255.0

con questo codice

    #include <String.h>  
    #include <SPI.h>  
    #include <Ethernet.h>  
      
    byte mac[] =  {0x00,0x0c, 0x6e, 0x3e, 0xff,0x60 };
   // byte mac[]={0x3C,0xA7,0xDC,0x23,0x8F,0xD7};
    byte ip[] = { 192, 168, 1, 210 }; // indirizzo IP della shield  
    byte gateway[] = { 192, 168, 1, 1 }; // indirizzo ip del router  
    byte subnet[] = { 255, 255, 255, 0 }; //subnet mask  
    EthernetServer server(80);   
      
    int ledPin = 13; // LED pin  
    String readString;   
    boolean LEDON = false;   
      
    void setup(){  
      Serial.println("Dentro il setup");
      Ethernet.begin(mac, ip, gateway, subnet);  
      pinMode(ledPin, OUTPUT);  
      Serial.begin(9600);
      Serial.println(Ethernet.localIP());
      Serial.println("Fine setup");  
    }  
      
void loop(){  
  delay(100);   
}

viene stampato il seguente indirizzo ip nel monitor seriale

0.0.64.0
Fine setup

quindi il problema è assegnare l'indirzzo alla scheda

Ciao,
guardando all'header della libreria questi son le funzioni possibili con cui puoi inizializzare Ethernet:

 int begin(uint8_t *mac_address);
  void begin(uint8_t *mac_address, IPAddress local_ip);
  void begin(uint8_t *mac_address, IPAddress local_ip, IPAddress dns_server);
  void begin(uint8_t *mac_address, IPAddress local_ip, IPAddress dns_server, IPAddress gateway);
  void begin(uint8_t *mac_address, IPAddress local_ip, IPAddress dns_server, IPAddress gateway, IPAddress subnet);

mentre tu fai:

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

Come puoi vedere i parametri che passi non soddisfano nessuna delle funzioni esistenti.
Dovresti passare anche il dns, prima del gateway - e molte volte dns e gateway combaciano; se così fosse, ti basterebbe:

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

altrimenti dichiarerai pure il dns, aggiornando di conseguenza l'inizializzazione:

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

Manca anche questo:

server.begin();

Nella Ethernet.begin() devi passare anche il dns
Puoi usare 8.8.8.8 oppure 4.4.4.4 che è il dns di google oppure se il router accetta 192.168.1.1 (ovvero il router stesso)

nid69ita:
Manca anche questo:

server.begin();

yep

Comunque puoi partire anche dall'esempio Ethernet -> WebServer e applicare lì tutte le tue modifiche.

Se usi un semplice webserver e sei sotto un router non serve assolutamente a nulla specificare i percorsi gateway/dns/subnet, sprechi ram allunghi i processi e basta
byte mac[]={0x3C,0xA7,0xDC,0x23,0x8F,0xD7};
byte ip[] = { 192, 168, 1, 210 }; // indirizzo IP della shield
byte gateway[] = { 192, 168, 1, 1 }; // indirizzo ip del router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask

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

Sono le macchine esterne (client) che cercano arduino, i percorsi per trovare arduino lo devono sapere gli altri.
Quando arduino farà da client e deve chiamare le macchine esterne allora si che dovrà conoscere i percorsi di rete per uscire.
Come il DNS ... a cosa serve ad arduino tale servizio per risolvere www.pippo.it nell' Ip corrispondente?
Il DNS non è un gateway è l'indirizzo di un server al quale spedisci il nome del sito in stringhe e ritorna un ip corrispondente dato che la rete lavora con ip e non con nomi.

ho provato ma niente da fare non funziona ancora

questo che ti risponde sul serial?
a me risponde correttamente.

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

byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
byte ip[] = {192, 168, 1, 30};

EthernetServer server(80);

void setup() {
  Serial.begin(9600);
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}


void loop() {
 
}

assicurati che sia ben inserito lo shield e poi verifica questo
http://forum.arduino.cc/index.php?topic=305917.15

la risposta del seriale è

server is at 0.255.0.0

Non puoi andare a collegarlo su una porta del router e pingarlo saltando per il momento lo switch?

fatto, non cambia niente

il problema potrebbe essere quel striscio che si intravede nella foto

possiedo un arduino uno con attacata una arduino ethernet shield.

Sai quanti modelli di arduino ci sono e quante shield ci sono?
Se hai inserito una SD, rimuovila