Problema con Ethernet Shield

Buenos días a todos.

Mi problema es el siguiente, tengo un Arduino MEGA 2560 y una Ethernet Shield conectados por USB y Ethernet respectivamente. Lo que quiero hacer es algo que ya hice en su momento subir los datos de un acelerómetro a internet. Utilizo un código que ya me funcionó en su día pero no se porque ahora no me funciona... El código es el siguiente:

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

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

IPAddress ip(192,168,0,69);  //192.168.0.69

EthernetServer server(80);

IPAddress gateway(192, 168, 0, 25);

IPAddress subnet(255, 255, 255, 0); 

AcceleroMMA7361 accelero;

int x;
int y;
int z;
// Guardamos en que entrada de Arduino esta conectado el pin CS del modulo.
const int chipSelect = 4;

void setup()
{
  Serial.begin(9600);

  accelero.begin(13, 12, 11, 10, A0, A1, A2);
  accelero.setARefVoltage(3.3);                   //sets the AREF voltage to 3.3V
  accelero.setSensitivity(LOW);                   //sets the sensitivity to +/-6G
  accelero.calibrate();
  setTime(7,14,00,13,07,2018);  
 
  Ethernet.begin(mac, ip);
  server.begin();
  
  // El pin CS por defecto de la placa arduino debe ser configurado como salida
  // aunque no se use (10 en la mayoria de las placas, 53 en Arduino Mega).
  pinMode(53, OUTPUT);
   
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}
 
void loop()
{
  x = accelero.getXAccel();
  y = accelero.getYAccel();
  z = accelero.getZAccel();
  time_t t = now();//Declaramos la variable time_t t
    
  EthernetClient client = server.available(); 
  if (client)
  {
    Serial.println("new client");
    bool currentLineIsBlank = true;
    String cadena = "";
    while (client.connected()) 
    {
      if (client.available()) 
      {
        char c = client.read();
        Serial.write(c);
        
        // Al recibir linea en blanco, servir página a cliente
        if (c == '\n' && currentLineIsBlank)
        {
          client.println(F("HTTP/1.1 200 OK\nContent-Type: text/html"));
          client.println();

          //meta-refresh page every 2 seconds
          client.println("<HTML>");
          client.print("<HEAD>");
          client.print("<meta http-equiv=\"refresh\" content=\"1\">");
          client.print("<TITLE />URTASUN</title>");
          client.print("</head>");
          client.println("<BODY>");
          client.println("
");
 
          client.println(F("<html>\n<head>\n<title>URTASUN</title>\n</head>\n<body>"));
          client.println(F("<div style='text-align:center;'>"));
 
          client.println(F("<h2>Valor Acelerometro</h2>"));
          
            client.print("\nEje X: ");
            client.println(F("
"));
            client.print(x);
            client.print("\tG*10^-2  ");
            client.println(F("
"));
            client.println(F("
"));
            client.print(" \tEje Y: ");
            client.println(F("
"));
            client.print(y);
            client.print("\tG*10^-2  ");
            client.println(F("
"));
            client.println(F("
"));
            client.print(" \tEje Z: ");
            client.println(F("
"));
            client.print(z);
            client.print("\tG*10^-2  ");
          client.println("

");

          break;
          
          client.println("</BODY>");
          client.println("</HTML>");
        }
        if (c == '\n') 
        {
          currentLineIsBlank = true;
        }
        else if (c != '\r') 
        {
          currentLineIsBlank = false;
        }
      }
    }
 
    delay(1000);
    client.stop();
  }
  else {
      Serial.println("eror");
  }
}

El código me compila bien y cuando lo cargo en la placa y compruebo el Monitor Serie me sale todo el tiempo "error" por lo que el problema me viene de que no hay ningún cliente escuchando (creo). Si pongo la dirección IP del Arduino en Internet no me sale nada...

Me he ayudado de las siguientes páginas:

http://www.educachip.com/arduino-ethernet-shield/

Ya he comprobado en el terminal que la dirección IP asignada está en mi red y no está ocupada. No entiendo porque no funciona un código que ya me funcionó en su día, espero que no sea un problema de los componentes...

Espero haber expuesto bien el problema y seguido las normas del foro, gracias.

Porque no pones la captura del monitor SErie previa al error

Cuando responde estas lineas

  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());

De todos modos no se inicializa el Objeto

 EthernetClient client = server.available();

y por eso obtienes un error.

Pero tal vez la respuesta este antes o esa parte se ejecute bien.

Buenas surbyte,

la captura previa al error es

Calibrating MMA7361011..................................................
DONEserver is at 192.168.0.69

Ese es el problema que tengo que no se me inicializa el Objeto pero no se a que se puede deber... En teoría cuando pongo la dirección IP asignada a mi arduino debería entrar no?

Yo lo hago diferente a como lo hace tu y me funciona... prueba a ver:

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //Establecemos la mac de la Ethernet shield
//Cambiamos a servidor de nombres dns.
char serverName[] = "loquesea.com"; // servidor donde está la web alojada.
int serverPort = 80; //Puerto que usará el servidor.

byte ip[] = {192,168,0,89}; // Ip de arduino dentro de la red.
EthernetClient client; //inicializamos el cliente .


void setup() {
delay(10000);
Serial.begin(9600); //inicializamos la comunicación serial a 9600 bps
Ethernet.begin(mac,ip); //inicializamos la tarjeta de red.


delay(4000);

}

void loop() {
  //lanzamos la funcion de soilwatch que lee la humedad del suelo.
  leerHumedad();
  leerTemperaturaSuelo();

  // lanzamos la consulta sql que inserta en la base de datos.
  sendGET(temperaturaInterior,humedadInterior,temperaturaSuelo,0.0,valorHumedad);
}


void sendGET(float ti,float hi,float tis,float hs,float hsw) //client function to send/receive GET request data.
{
  
  if (client.connect(serverName, 80) == 1) {  //starts client connection, checks for connection
    Serial.println("connected");
    client.print("GET /datos/indexinterior.php?tmp=");
   .
   .
   .
  } 
  else {
    Serial.println("connection failed"); //error message if no client connect
    Serial.println();
  }


  client.stop(); //stop client

}