hola,
he cogido el codigo de un servidor web que enciende y apaga un led y quiero usarlo para encender luces con reles, el problema es que el encendido del led se hace ANTES de crear la web y necesito activar los reles DESPUES de crear la web, puesto que el funcionamiento de los reles tarda unos 4 minutos encendiendo y apagando luces y si lo hago antes de cargar la web esta tardaria 4 minutos en lanzarse y no serviria, he probado a ponerlo en varios sitios pero no me hace caso, me podeis indicar como se hace, resumo lo que quiero, Muchas gracias.
-leer la url
-crear la web con un iframe incluido
-una vez creada la web totalmente
-comprobar si la url contiene LED=ON
-si es así ejecutar un void que tarda 4 minutos encendiendo y apagando luces
codigo:
#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,18,10); //Asingamos la IP al Arduino
IPAddress gateway(192,168,18,1);
IPAddress subnet(255, 255, 255, 0);
EthernetServer server(80); //Creamos un servidor Web con el puerto 80 que es el puerto HTTP por defecto
int led=13; //Pin de conexion del led
String estado="APAGADO"; //Estado inicial del Led "APAGADO"
// salidas para los reles
const int R1=4;
const int R2=6;
const int R3=8;
const int R4=10;
const int V1=3;
const int V2=5;
const int V3=7;
const int V4=9;
void setup()
{
Serial.begin(9600);
// Inicializamos la comunicación Ethernet y el servidor
Ethernet.begin(mac, ip);
server.begin();
Serial.print("servidor en ");
Serial.println(Ethernet.localIP());
pinMode(led,OUTPUT); //Declara el pin del led como salida
// definimos el tipo de salida de cada pin para los reles
pinMode(R1,OUTPUT);
pinMode(R2,OUTPUT);
pinMode(R3,OUTPUT);
pinMode(R4,OUTPUT);
pinMode(V1,OUTPUT);
pinMode(V2,OUTPUT);
pinMode(V3,OUTPUT);
pinMode(V4,OUTPUT);
}
void loop()
{
EthernetClient client = server.available(); //Creamos un cliente Web
//Cuando detecte un cliente a través de una petición HTTP
if (client) {
Serial.println("cliente nuevo");
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
//Ya que hemos convertido la petición HTTP a una cadena de caracteres, ahora podremos buscar partes del texto.
int posicion=cadena.indexOf("LED="); //Guardamos la posición de "LED=" en la variable 'posicion'
if(cadena.substring(posicion)=="LED=ON") //Si hay "LED=ON"
{
digitalWrite(led,HIGH);
estado="ENCENDIDAS";
comprobar_luces(); // esto es una funcion que comprueba las luces encendiendolas todas
bailedeluces(); // esto es una secuencia de luces que dura 4 minutos, aqui se ejecuta pero hasta que termina no carga la pagina y entonces no me sirve
}
if(cadena.substring(posicion)=="LED=OFF") //Si a la posición 'posicion' hay "LED=OFF"
{
digitalWrite(led,LOW);
estado="APAGADAS";
}
//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("<title>Baile de luces</title>");
client.println("<meta name='viewport' content='width=device-width, initial-scale=1'>");
client.println("</head>");
client.println("<body>");
client.println("<p>");
client.println(estado);
client.println("</p>");
client.println("<iframe");
client.println(" title='Activar Luces'");
client.println(" width='95%'");
client.println(" height='200'");
client.println(" src='http://www.web.net/imagenBailando.gif'>");
client.println("</iframe>");
client.println(" </p></body>");
client.println("</html>");
break;
}
if (c == '\n') { //Si el caracter leido es una linea vacia activa la variable lineaEnBlanco
currentLineIsBlank = true;
}
else if (c != '\r') { //Si no es linea vacia, comprueba que sea <> RC, es decir contiene caracteres, entonces lineaEnBlanco=Falso
currentLineIsBlank = false;
}
}
}
//Dar tiempo al navegador para recibir los datos
delay(1);
client.stop();// Cierra la conexión
}
// si lo pongo aqui no se ejecuta
if (estado=="ENCENDIDAS") {
bailedeluces();
}
}
void comprobar_luces() {
//comprobar luces
digitalWrite(V1,HIGH);
delay(500);
digitalWrite(V2,HIGH);
delay(500);
digitalWrite(V3,HIGH);
delay(500);
digitalWrite(V4,HIGH);
delay(1000);
digitalWrite(V1,LOW);
digitalWrite(V2,LOW);
digitalWrite(V3,LOW);
digitalWrite(V4,LOW);
delay(1000);
//rojos
digitalWrite(R1,HIGH);
delay(500);
digitalWrite(R2,HIGH);
delay(500);
digitalWrite(R3,HIGH);
delay(500);
digitalWrite(R4,HIGH);
delay(1000);
digitalWrite(V1,LOW);
digitalWrite(V2,LOW);
digitalWrite(V3,LOW);
digitalWrite(V4,LOW);
ninguno(1000);
}
void bailedeluces() {
//4 minutos encediendo y apagando
digitalWrite(V1,HIGH);
delay(100);
digitalWrite(V1,LOW);
//..... el codigo sigue con docenas de lineas que no aportan nada
}
void todas(int t1) {
digitalWrite(V1,HIGH);
digitalWrite(V2,HIGH);
digitalWrite(V3,HIGH);
digitalWrite(V4,HIGH);
digitalWrite(R1,HIGH);
digitalWrite(R2,HIGH);
digitalWrite(R3,HIGH);
digitalWrite(R4,HIGH);
delay(t1);
}
void ninguno(int t1) {
digitalWrite(V1,LOW);
digitalWrite(V2,LOW);
digitalWrite(V3,LOW);
digitalWrite(V4,LOW);
digitalWrite(R1,LOW);
digitalWrite(R2,LOW);
digitalWrite(R3,LOW);
digitalWrite(R4,LOW);
delay(t1);
}