Relays + Ethernet Shield

I made a code that has to be able to turn on or off three relays over the Internet. The problem is that I am only able to turn on or off two relays, as I put the third in my code does not work any of the 3, even does not change the state of the button on the website. What is the solution?
Also I want to turn on and off the relays on the value of a sensor and display and update this value on the website and also the new state of the relays. I have a light sensor in the code that when the brightness is less than 50 turns on the first relay.
Thanks in advance.

#include <SPI.h>  //Importamos librería comunicación SPI
#include <Ethernet.h>  //Importamos librería Ethernet
 
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };//Ponemos la dirección MAC de la Ethernet Shield que está con una etiqueta debajo la placa
IPAddress ip(192,168,1,177); //Asingamos la IP al Arduino
EthernetServer server(80); //Creamos un servidor Web con el puerto 80 que es el puerto HTTP por defecto

float luminosidad;
int SensorLuminosidad=3;
const int ValorLuminosidad = 50;
int led=4; //Pin del led
int led2=2;
int led3=8;
String estado="OFF";
String estado2="OFF";
String estado3="OFF";

//Estado del Led inicialmente "OFF"
 
void setup()
{
  Serial.begin(9600);
 
  // Inicializamos la comunicación Ethernet y el servidor
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
 
  pinMode(led,OUTPUT);
  pinMode(led2,OUTPUT);
  pinMode(led3,OUTPUT);
 
}
 
void loop()
{
  luminosidad = analogRead(SensorLuminosidad);
  luminosidad= (luminosidad)/10;
 // Serial.print("La Luminosidad actual es (0-100%) "); // Nos escribe por el puerto serie la temperatura existente
  //Serial.println(luminosidad);
  EthernetClient client = server.available(); //Creamos un cliente Web
  //Cuando detecte un cliente a través de una petición HTTP
  if (client) {
    Serial.println("new client");
    boolean currentLineIsBlank = true; //Una petición HTTP acaba con una línea en blanco
    String cadena=""; //Creamos una cadena de caracteres vacía
    String cadena2="";
   
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();//Leemos la petición HTTP carácter por carácter
        Serial.write(c);//Visualizamos la petición HTTP por el Monitor Serial
        cadena.concat(c);//Unimos el String 'cadena' con la petición HTTP (c). De esta manera convertimos la petición HTTP a un String
        //cadena2.concat(c);
      
         //Ya que hemos convertido la petición HTTP a una cadena de caracteres, ahora podremos buscar partes del texto.
         int posicion=cadena.indexOf("RELE="); //Guardamos la posición de la instancia "LED=" a la variable 'posicion'
 
          if(cadena.substring(posicion)=="RELE=ON")//Si a la posición 'posicion' hay "LED=ON"
          {
            digitalWrite(led,HIGH);
            estado="ON";
          }
          if(cadena.substring(posicion)=="RELE=OFF")//Si a la posición 'posicion' hay "LED=OFF"
          {
            digitalWrite(led,LOW);
            estado="OFF";
          }
          int posicion2=cadena.indexOf("RELE2="); //Guardamos la posición de la instancia "LED=" a la variable 'posicion'
 
          if(cadena.substring(posicion2)=="RELE2=ON")//Si a la posición 'posicion' hay "LED=ON"
          {
            digitalWrite(led2,HIGH);
            estado2="ON";
          }
          if(cadena.substring(posicion2)=="RELE2=OFF")//Si a la posición 'posicion' hay "LED=OFF"
          {
            digitalWrite(led2,LOW);
            estado2="OFF";
          }
          
          int posicion3=cadena.indexOf("RELE3="); //Guardamos la posición de la instancia "LED=" a la variable 'posicion'
 
          if(cadena.substring(posicion3)=="RELE3=ON")//Si a la posición 'posicion' hay "LED=ON"
          {
            digitalWrite(led3,HIGH);
            estado3="ON";
          }
          if(cadena.substring(posicion3)=="RELE3=OFF")//Si a la posición 'posicion' hay "LED=OFF"
          {
            digitalWrite(led3,LOW);
            estado3="OFF";
          }
           
        //Cuando reciba una línea en blanco, quiere decir que la petición HTTP ha acabado y el servidor Web está listo para enviar una respuesta
        if (c == '\n' && currentLineIsBlank) {
 
            // Enviamos al cliente una respuesta HTTP
            client.println("HTTP/1.1 200 OK");
            client.println("Content-Type: text/html");
            client.println();
 
            //Página web en formato HTML
            client.println("<html>");
            client.println("<head>");
            client.println("</head>");
            client.println("<body>");
            client.println("<h1 align='center'>HELLO</h1><h3 align='center'>ENCENDIDO APAGADO RELE</h3>");
            //Creamos los botones. Para enviar parametres a través de HTML se utiliza el metodo URL encode. Los parámetros se envian a través del símbolo '?'
            client.println("<div style='text-align:center;'>");
            client.println("<button onClick=location.href='./?RELE=ON\' style='margin:auto;background-color: #84B1FF;color: snow;padding: 10px;border: 1px solid #3F7CFF;width:65px;'>");
            client.println("ON");
            client.println("</button>");
            client.println("<button onClick=location.href='./?RELE=OFF\' style='margin:auto;background-color: #84B1FF;color: snow;padding: 10px;border: 1px solid #3F7CFF;width:65px;'>");
            client.println("OFF");
            client.println("</button>");
            client.println("

");
            client.println("<b>RELE = ");
            client.print(estado);
            //
             client.println("<div style='text-align:center;'>");
            client.println("<button onClick=location.href='./?RELE2=ON\' style='margin:auto;background-color: #eb772a;color: snow;padding: 10px;border: 1px solid #3F7CFF;width:65px;'>");
            client.println("ON");
            client.println("</button>");
            client.println("<button onClick=location.href='./?RELE2=OFF\' style='margin:auto;background-color: #eb772a;color: snow;padding: 10px;border: 1px solid #3F7CFF;width:65px;'>");
            client.println("OFF");
            client.println("</button>");
            client.println("

");
            client.println("<b>RELE2 = ");
            client.print(estado2);
            //
            
             client.println("<div style='text-align:center;'>");
            client.println("<button onClick=location.href='./?RELE3=ON\' style='margin:auto;background-color: #84B1FF;color: snow;padding: 10px;border: 1px solid #3F7CFF;width:65px;'>");
            client.println("ON");
            client.println("</button>");
            client.println("<button onClick=location.href='./?RELE3=OFF\' style='margin:auto;background-color: #84B1FF;color: snow;padding: 10px;border: 1px solid #3F7CFF;width:65px;'>");
            client.println("OFF");
            client.println("</button>");
            client.println("

");
            client.println("<b>RELE3 = ");
            client.print(estado3);
            //
            client.println("</b>
");
            client.println("</b></body>");
            client.println("</html>");
            break;
        }
        if (c == '\n') {
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    //Dar tiempo al navegador para recibir los datos
    delay(1);
    client.stop();// Cierra la conexión
  }
}

It looks and sounds like you are running out of SRAM. Is this Arduino device an Uno?

Even if it isn't, you should use the F() function to keep your static strings in program memory. That should help. I'll give you one example from your setup code, but you need to go through your code and change all strings like these:

 Serial.print(F("server is at "));

The problem is that I am only able to turn on or off two relays

Why the heck are the relay pins called led, led12, and led3? Call them relayPin1, relayPin2, and relayPin3.

Yes, it's Arduino UNO. mmm... I don't understand what you're telling me... Could you post me anymore? I post my code with some changes I've done. I've added sensors..and I want for example that when humidity is lower than x%, led1 turns on and this change can be shown in the wabe page. How it would be?

#include <math.h>
#include <Wire.h>
#include <Servo.h>
#include <SPI.h>
#define DS1307_I2C_ADDRESS 0x68
#include "RTClib.h" // Incluye la librería RTClib
RTC_DS1307 RTC; // Crea el objeto RTC
#include <SPI.h>  //Importamos librería comunicación SPI
#include <Ethernet.h>  //Importamos librería Ethernet
 
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };//Ponemos la dirección MAC de la Ethernet Shield que está con una etiqueta debajo la placa
IPAddress ip(192,168,1,177); //Asingamos la IP al Arduino
EthernetServer server(80); //Creamos un servidor Web con el puerto 80 que es el puerto HTTP por defecto

//Pin digitales asociados al Relé
int ReleVent = 4; //Pin digital donde conectamos el relé asociado al ventilador
int ReleCal = 5;//Pin digital donde conectamos el relé asociado al calentador
int ReleLuz = 8; //Pin digital donde asociamos el relé asociado a la luz
int ReleAgua = 2; //Pin digital donde conectamos el relé asociado al agua

/Luminosidad
float luminosidad;
int SensorLuminosidad=3;
const int ValorLuminosidad = 50;

//Temperatura
float temperatura;
int a;
int B=3975;                  //B value of the thermistor
float resistencia;
const int ValorCalor = 28; //Valor temperatura superior límite para activar ventiladores
const int ValorFrio = 5; //Valor temperatura inferior límites para activar calefactor

//Humedad
int SensorHumedad=1;
float humedad;
const int ValorHumedad = 40; //Valor temperatura superior límite para activar ventiladores
float luminosidad;
int SensorLuminosidad=3;

String estado="OFF"; //Estado del Led inicialmente "OFF"
String estado2="OFF";
String estado3="OFF";
 
//RELOJ
//Convierte numeros decimales a BCD (binario decimal codificado)
byte decToBcd(byte val)
{
 return ( (val/10*16) + (val%10) ); 
}
byte bcdToDec(byte val)
{
  return ( (val/10*16) + (val%16) );
}

float Time, minTime, maxTime;
const int minHourValue=9;
const int maxHourValue=22;
const int minMinuteValue=30;
const int maxMinuteValue=30;
void setDateDs1307(byte *second,
        byte *minute,
        byte *hour,
        byte *dayOfWeek,
        byte *dayOfMonth,
        byte *month,
        byte *year)
        {
//Resetea el registro puntero
          Wire.beginTransmission(DS1307_I2C_ADDRESS);
          Wire.write((byte)0);
          Wire.endTransmission();
          Wire.requestFrom(DS1307_I2C_ADDRESS, 7);
          //Necesitan enmascarar porque ciertos bits son de control
          *second = bcdToDec(Wire.read() & 0x7f);
          *minute = bcdToDec(Wire.read());
          *hour = bcdToDec(Wire.read() & 0x3f);
          *dayOfWeek = bcdToDec(Wire.read());
          *dayOfMonth = bcdToDec(Wire.read());
          *month = bcdToDec(Wire.read());
          *year = bcdToDec(Wire.read());
        }


void setup()
{
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  Serial.begin(9600);
  Wire.begin();
  RTC.begin(); // Establece la velocidad de datos del RTC
  //byte second, minute, hour, dayOfWeek,dayOfMonth, month, year;
  pinMode(ReleAgua,OUTPUT); //Salida
  pinMode(ReleVent,OUTPUT); //Salida
  pinMode(ReleCal,OUTPUT);  //Salida
  pinMode(ReleLuz,OUTPUT);
 
  // Inicializamos la comunicación Ethernet y el servidor
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
 
 
 
}
 
void loop()
{
  DateTime now = RTC.now(); // Obtiene la fecha y hora del RTC
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
delay(1500); // La información se actualiza cada 1 seg.


  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  

   switch (dayOfWeek)
     {
      case 1:
      Serial.println(" Lunes");     break;
      case 2:
      Serial.println(" Martes");     break;
      case 3:
      Serial.println(" Miercoles");     break;
      case 4:
      Serial.println(" Jueves");     break;
      case 5:
      Serial.println(" Viernes");     break;
      case 6:
      Serial.println(" Sabado");     break;
      case 7:
      Serial.println(" Domingo");     break;
     }
  luminosidad = analogRead(SensorLuminosidad);
  luminosidad= (luminosidad)/10;
  a=analogRead(0);
  humedad=analogRead(SensorHumedad);
  humedad = (humedad)/10;
  resistencia=(float)(1023-a)*10000/a; //get the resistance of the sensor;
  temperatura=1/(log(resistencia/10000)/B+1/298.15)-273.15;//convert to temperature via datasheet ;
  Serial.print("La Luminosidad actual es (0-100%) "); // Nos escribe por el puerto serie la temperatura existente
  Serial.println(luminosidad);
  Serial.print("La Temperatura actual es "); // Nos escribe por el puerto serie la temperatura existente
  Serial.println(temperatura);
  Serial.print("La Humedad actual es (0-100%) "); // Nos escribe por el puerto serie la temperatura existente
  Serial.println(humedad);
  
  EthernetClient client = server.available(); //Creamos un cliente Web
  //Cuando detecte un cliente a través de una petición HTTP
  if (client) {
    Serial.println("new client");
    boolean currentLineIsBlank = true; //Una petición HTTP acaba con una línea en blanco
    String cadena=""; //Creamos una cadena de caracteres vacía
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();//Leemos la petición HTTP carácter por carácter
        Serial.write(c);//Visualizamos la petición HTTP por el Monitor Serial
        cadena.concat(c);//Unimos el String 'cadena' con la petición HTTP (c). De esta manera convertimos la petición HTTP a un String
       client.print(luminosidad);
         //Ya que hemos convertido la petición HTTP a una cadena de caracteres, ahora podremos buscar partes del texto.
         int posicion=cadena.indexOf("VENTILADOR="); //Guardamos la posición de la instancia "LED=" a la variable 'posicion'
 
          if(cadena.substring(posicion)=="VENTILADOR=ON")//Si a la posición 'posicion' hay "LED=ON"
          {
            digitalWrite(ReleVent,HIGH);
            estado="ON";
          }
          if(cadena.substring(posicion)=="VENTILADOR=OFF")//Si a la posición 'posicion' hay "LED=OFF"
          {
            digitalWrite(ReleVent,LOW);
            estado="OFF";
          }
 int posicion2=cadena.indexOf("LUZ="); //Guardamos la posición de la instancia "LED=" a la variable 'posicion'
 
          if(cadena.substring(posicion2)=="LUZ=ON")//Si a la posición 'posicion' hay "LED=ON"
          {
            digitalWrite(ReleLuz,HIGH);
            estado2="ON";
          }
          if(cadena.substring(posicion2)=="LUZ=OFF")//Si a la posición 'posicion' hay "LED=OFF"
          {
            digitalWrite(ReleLuz,LOW);
            estado2="OFF";
          }
 int posicion3=cadena.indexOf("RIEGO="); //Guardamos la posición de la instancia "LED=" a la variable 'posicion'
 
          if(cadena.substring(posicion3)=="RIEGO=ON")//Si a la posición 'posicion' hay "LED=ON"
          {
            digitalWrite(ReleAgua,HIGH);
            estado3="ON";
          }
          if(cadena.substring(posicion)=="RIEGO=OFF")//Si a la posición 'posicion' hay "LED=OFF"
          {
            digitalWrite(ReleAgua,LOW);
            estado3="OFF";
          }
 
        //Cuando reciba una línea en blanco, quiere decir que la petición HTTP ha acabado y el servidor Web está listo para enviar una respuesta
        if (c == '\n' && currentLineIsBlank) {
 // Enviamos al cliente una respuesta HTTP
            client.println("HTTP/1.1 200 OK");
            client.println("Content-Type: text/html");
            client.println();
 
            //Página web en formato HTML
            client.println("<html>");
            client.println("<head>");
            client.println("</head>");
            client.println("<body>");
            client.println("<h1 align='center'>ADRIAN SANZ</h1><h3 align='center'>ENCENDIDO APAGADO RELE</h3>");
            //Creamos los botones. Para enviar parametres a través de HTML se utiliza el metodo URL encode. Los parámetros se envian a través del símbolo '?'
            client.println("<div style='text-align:center;'>");
            //boton Luz
            
            client.println("<button onClick=location.href='./?LUZ=ON\' style='margin:auto;background-color: #eb772a;color: snow;padding: 10px;border: 1px solid #3F7CFF;width:65px;'>");
            client.println("ON");
            client.println("</button>");
            client.println("<button onClick=location.href='./?LUZ=OFF\' style='margin:auto;background-color: #eb772a;color: snow;padding: 10px;border: 1px solid #3F7CFF;width:65px;'>");
            client.println("OFF");
            client.println("</button>");
            client.println("

");
            client.println("<b>LUZ = ");
            client.print(estado2);
            
            //Boton Ventilador
             client.println("<button onClick=location.href='./?VENTILADOR=ON\' style='margin:auto;background-color: #84B1FF;color: snow;padding: 10px;border: 1px solid #3F7CFF;width:65px;'>");
            client.println("ON");
            client.println("</button>");
            client.println("<button onClick=location.href='./?VENTILADOR=OFF\' style='margin:auto;background-color: #84B1FF;color: snow;padding: 10px;border: 1px solid #3F7CFF;width:65px;'>");
            client.println("OFF");
            client.println("</button>");
            client.println("

");
            client.println("<b>VENTILADOR = ");
            client.print(estado);
            
            //Boton Agua
             client.println("<button onClick=location.href='./?RIEGO=ON\' style='margin:auto;background-color: #29db85;color: snow;padding: 10px;border: 1px solid #3F7CFF;width:65px;'>");
            client.println("ON");
            client.println("</button>");
            client.println("<button onClick=location.href='./?RIEGO=OFF\' style='margin:auto;background-color: #29db85;color: snow;padding: 10px;border: 1px solid #3F7CFF;width:65px;'>");
            client.println("OFF");
            client.println("</button>");
            client.println("

");
            client.println("<b>RIEGO = ");
            client.print(estado3);
            
            client.println("</b>
");
            client.println("</b></body>");
            client.println("</html>");
            break;
        }
        if (c == '\n') {
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    //Dar tiempo al navegador para recibir los datos
    delay(1);
    client.stop();// Cierra la conexión
  }
}
 // Enviamos al cliente una respuesta HTTP
            client.println(F("HTTP/1.1 200 OK"));
            client.println(F("Content-Type: text/html"));
            client.println();
 
            //Página web en formato HTML
            client.println(F("<html>"));
            client.println(F("<head>"));
            client.println(F("</head>"));
            client.println(F("<body>"));
            // and the rest the same...

The below shows bundling a large section of static html text into a single client.prrint command using the F() macro.

            client.print(F("<HTML><HEAD><TITLE>Zoomkat's frame refresh test</TITLE></HEAD>"
            "Zoomkat's Arduino frame meta refresh test 8/17/13"
            "

Arduino analog input data frame:
"
            "&nbsp;&nbsp;<a href='/datastart' target='DataBox' title=''yy''>META-REFRESH</a>"
            "&nbsp;&nbsp;&nbsp;&nbsp;<a href='/data' target='DataBox' title=''xx''>SINGLE-STOP</a>"
            "&nbsp;&nbsp;&nbsp;&nbsp;<a href='/datafast' target='DataBox' title=''zz''>FAST-DATA</a>
"
            "<iframe src='/data' width='350' height='250' name='DataBox'>"
            "</iframe>
</HTML>"));