Enviar datos con get y servidor web

Hola tengo un codigo que arme con varios post e investigaciones en la red, la idea es que un arduino uno con ethernet shield, me mande a una base de datos los estados de 3 entradas digitales (abierto o cerrado, 1 o 0), a la vez he creado un servidor web dentro del mismo arduino a travez del puerto 85 con la intencion de poder activar o desactivar uno o mas relay, mi inquietud es la siguiente:

Arduino manda el estado de las entradas digitales cada 5 segundos, pero cuando me conecto al servidor web del arduino y le mando una peticion al relay, este tambien tarde 5 segundos en responder a veces mas o aveces menos, segun el ciclo en que se encuentre el arduino...

¿Que debo hacer para que el tiempo de respuesta al activar o desactivar un relay sea instantanteo o independiente a la espera de los 5 segundos?

Les anexo mi codigo... Gracias

/*
Web client

Circuit:

  • Ethernet shield attached to pins 10, 11, 12, 13

*/

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

// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server(192, 168, 1, 188);
IPAddress ip(192, 168, 1, 177);
IPAddress gateway(192, 168, 1, 253);
IPAddress subnet(255, 255, 255, 0);
IPAddress dnServer(192, 168, 1, 253);

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client2;

//inicializamos la varible
int controlador=52;

EthernetServer server2(85);
int rele = 9;
String estado2="OFF";
String readString;

void setup() {

server2.begin();
pinMode(rele,OUTPUT);

pinMode(2, INPUT);
// start the serial library:
Serial.begin(9600);
// start the Ethernet connection:
Ethernet.begin(mac, ip, dnServer, gateway, subnet);
server2.begin();

// give the Ethernet shield a second to initialize:
delay(1000);
Serial.println("connecting...");

// if you get a connection, report back via serial:
if (client2.connect(server, 83)) {
Serial.println("connected");
// Make a HTTP request:
client2.println();
}
else {
// kf you didn't get a connection to the server:
Serial.println("connection failed");
}
}

void loop()
{
// if there are incoming bytes available
// from the server, read them and print them:

int input0 = digitalRead(3);
int input1 = digitalRead(4);
int input2 = digitalRead(5);

client2.connect(server, 83);
client2.print("GET /prueba2/prueba.php?controlador=");
client2.print(controlador);
client2.print("&input0=");
client2.print(input0);
client2.print("&input1=");
client2.print(input1);
client2.print("&input2=");
client2.print(input2);
client2.println(" HTTP/1.0");
client2.println();
char d = client2.read();
Serial.print(d);
client2.stop();

delay(5000);

EthernetClient cliente = server2.available();
if (cliente) {
boolean currentLineIsBlank = true;
while (cliente.connected()) {
if (cliente.available()) {
char c = cliente.read();
if (readString.length() < 100) {
//Almacenar caracteres en un string
readString += c;
}
//Si ha terminado la petición del cliente
if (c == '\n') {
Serial.println(readString);
if(readString.indexOf("?encender") >0)
{
digitalWrite(9,HIGH);
estado2="ON";
}
if(readString.indexOf("?apagar") >0)
{
digitalWrite(9,LOW);
estado2="OFF";
}
//Enviamos la cabecera web
cliente.println("HTTP/1.1 200 OK");
cliente.println("Content-Type: text/html");
cliente.println();

//Mostrqamos la web de control
cliente.println("HTTP/1.1 200 OK"); //send new page
cliente.println("Content-Type: text/html");
cliente.println();
cliente.println("");
cliente.println("");

cliente.println("");
cliente.println("");
cliente.println("");
cliente.println("");
cliente.println("

");
cliente.println("
");
cliente.println("
");
cliente.println("

Controles Zona Dorada

");
cliente.println("
");
cliente.println("<a href="/?encender"">Encender LED");
cliente.println("<a href="/?apagar"">Apagar LED
");
cliente.println("
FORZADA: ");
cliente.println(estado2);
cliente.println("
");
cliente.println("
");
cliente.println("<a href="/?button2on"">Abrir Puerta");
cliente.println("<a href="/?button2off"">Cerrar Puerta
");
cliente.println("
");
cliente.println("");
cliente.println("");

break;
}

}
}
// Darle un respiro al navegador web para recibir los datos
delay(1);
//Limpiar String para proxima etición HTTP
readString="";
//Cerrar conexión
cliente.stop();
}
}

Ese delay(5000); ahí en medio va a tener la culpa. Tendrás que cambiar el control de tiempos a un temporizador y alguna bandera (flag)

elimina el delay y utiliza un

asi la pagina se actualiza cada 5 segudos sola

i te volvera a entrar en if (cliente) el solito

ahora el boton ya es instantaneo! :slight_smile:

Donde pondrías ese meta?? porque en la parte de arriba donde esta el delay no lo tengo como una pagina, lo tengo como un comando que solo envía valores... Gracias Zalo

jimmybarraza:
Donde pondrías ese meta?? porque en la parte de arriba donde esta el delay no lo tengo como una pagina, lo tengo como un comando que solo envía valores... Gracias Zalo

Las metas en el HEAD claro

           cliente.println("<HEAD>");
           cliente.println("<link rel='stylesheet' type='text/css' href='http://randomnerdtutorials.com/ethernetcss.css' />");
           cliente.println("<TITLE></TITLE>");
           cliente.println("<meta http-equiv=\"refresh\" content=\"5\">");
           cliente.println("</HEAD>");

Go-Zalo ya inserte en el meta el refresh que me comentas y elimine el delay tal como me lo comentaste, se resuelve que el el relay se acttive en cualquier momento, pero al eliminar el delay el dispositivo me esta enviando valores por lo menos cada segundo, y la verdad me gustaría que lo hiciera cada 5, por eso estaba el delay... No existe alguna otra posibilidad??

Al fin lo que necesito como les digo es:
Una parte del codigo me mande el estado de los digitalread cada 5 segundos y...
Exista un cliente web al que siempre pueda entrar y al momento de activar un botón se active o desactive un relay, pero que sea de manera independiente al delay de 5 segundos...

Gracias por sus aportes

Deberías revisar entonces el ejemplo BlinkWithoutDelay

Esto se emplearía para la primera parte la que tenías por encima del delay

PErfecto Me funciono muy bien, muchas gracias...