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
}
}