programa con shield ethernet

Buen dia, estoy empezando un proyecto con arduino mega y el shield Ethernet.
La idea es mediante HTML enviar información y hacer mi programa en el arduino.
Aclaro que recién estoy empezando en esto de la programación pero me doy alguna idea.

Probe bastantes proyectos que circulan en la red con los cuales mando información a travez de una petición url para prender y apagar un led. son casi todos iguales.

Para expandir esto cree un tercer botón para que el led parpadee. lo que hice fue copiar y cambiar lo necesario para que sea un botón diferente. El problema es que solo ejecuta el parpadeo una sola vez. si alguien pudiera explicarme por que pasa esto y como puedo solucionarlo me serviría de mucho. muchas gracias

dejo el código que cree

#include <SPI.h>
#include <Ethernet.h>
byte mac[]={0xDE,0xAD,0xBE,0xEF,0xFE,0xED};
IPAddress ip(192, 168, 1, 77);
EthernetServer servidor(80);
String state="";//=String(3);

void setup() {
Ethernet.begin(mac, ip);
servidor.begin();
pinMode(13,OUTPUT);
}

void loop() {
//EthernetClient Crea un cliente que se puede conectar a
//una dirección específica de Internet IP
EthernetClient cliente= servidor.available();
if(cliente) {
boolean lineaenblanco=true;
String readstring="";
while(cliente.connected()) {
if(cliente.available()) {
char c=cliente.read();
readstring.concat(c);

int LED = readstring.indexOf("LED=");
if(readstring.substring(LED)=="LED=T") {
digitalWrite(13,HIGH);
state="ON"; }
if (readstring.substring(LED)=="LED=F") {
digitalWrite(13,LOW);
state="OFF";}
if (readstring.substring(LED)=="LED=P") {
digitalWrite(13,LOW);
delay(1000);
digitalWrite(13,HIGH);
delay(1000);
state="PARPADEA";}

if(c=='\n' && lineaenblanco) //Si la petición HTTP ha finalizado
{

cliente.println("HTTP/1.1 200 OK");
cliente.println("Content-Type: text/html");
cliente.println(); //Página Web en HTML
cliente.println("");
cliente.println("");
cliente.println("LAMPARA ON/OFF/PARPADEA");
cliente.println("");
cliente.println("");
cliente.println("");
cliente.println("

LAMPARA ON/OFF

");
cliente.print("

");
cliente.print("Estado de la lampara: ");
cliente.print(state);
cliente.print("
");
cliente.print("LED: ");
cliente.println(LED);
cliente.print("
");
cliente.print("readstring: ");
cliente.println(readstring);
cliente.print("
");
cliente.println("<input type=submit value=ON style=width:200px;height:75px onClick=location.href='./?LED=T'>");
cliente.println("<input type=submit value=OFF style=width:200px;height:75px onClick=location.href='./?LED=F'>");
cliente.println("<input type=submit value=PARPADEO style=width:200px;height:75px onClick=location.href='./?LED=P'>");
cliente.println("");
cliente.println("");
cliente.println("");
cliente.stop();
//Cierro conexión con el cliente
readstring="";
}
}
}
}
}

El problema que tenés es que hay que refrezcar la página y verás que parpadea con cada refrezco.
Tal vez no sea correcta mi apreciación.

Hola.
Lo hace sólo una vez, porque así se lo dices; que lo haga sólo cuando reciba un "parpadea". Debes crear una variable booleana y usar millis (mira el ejemplo blinkWithoutDelay que viene en ejemplos del IDE) para que en cada loop compruebe si el estado parpadeando es verdadero (así lo estableceremos cuando pulsemos el botón) y en ese caso, mirar si ha pasado un segundo desde el último encendido o apagado de led.

bool parpadeando=false;
unsigned long desde;
setup()
....
loop(){
...
if (readstring.substring(LED)=="LED=P") {
parpadeando=true;
}
/.... esto iría fuera del if client al final del loop. Se ejecuta si el estado es parpadeando, comprobando si ha transcurrido el tiempo para alternar el estado de led.
if (parpadeando && millis()-desde>1000) { //si estado parpadeando, y ha transcurrido más de un segundo desde último cambio de estado
desde=millis();
digitalWrite(13, !digitalRead(13));
}
}

noter:
Hola.
Lo hace sólo una vez, porque así se lo dices; que lo haga sólo cuando reciba un "parpadea". Debes crear una variable booleana y usar millis (mira el ejemplo blinkWithoutDelay que viene en ejemplos del IDE) para que en cada loop compruebe si el estado parpadeando es verdadero (así lo estableceremos cuando pulsemos el botón) y en ese caso, mirar si ha pasado un segundo desde el último encendido o apagado de led.

Hola hice tu jemeplo el problema es que al darle de nuevo por ejemplo al botón off no me da respuesta.

Aparte de eso. Entiendo que el programa original solo lo ejecuta una sola vez porque el programa esta denrto del if cliente.available por lo cual el programa se ejecuta solo cuando refresco la pagina.
mi idea es ingresar datos y que el arduino se quede con esos datos siempre ejemplo: ingresar al server colocar en un dato que una luz se encienda a las 14.30 cerrar el navegador y que el arduino revise esos datos hasta que una comparación sea verdad y me prenda la luz. entiendo que para que esto pase esos datos (variable) que mando a travez de HTML tengo que "sacarlos" fuera del bucle if cliente.available. estoy en lo cierto? esto no se muy bien como hacerlo

aunq si hay otra manera de hacer esto que quiero hacer escucho sugerencias

resumiendo la idea general es ingresar los datos mediante HTML una sola vez y que el arduino ya los guarde y no tener que depender de que la pagina se refresque ya que para lo único que quiero entrar al HTML es para ingresar nuevos datos cuando lo requiera.

Evidentemente, en los if de los otros botones tendrás que establecer de nuevo parpadeando=false. La parte html lo que hará es modificar las variables que condicionan la forma de comportarse del arduino en cada sitio; es decir, cuando recibas algo por html, debes modificar variables que alteren el comportamiento de tu loop, no que ejecute unas determinadas acciones al recibir esos datos, porque te lo hará sólo esa vez.

noter:
Evidentemente, en los if de los otros botones tendrás que establecer de nuevo parpadeando=false. La parte html lo que hará es modificar las variables que condicionan la forma de comportarse del arduino en cada sitio; es decir, cuando recibas algo por html, debes modificar variables que alteren el comportamiento de tu loop, no que ejecute unas determinadas acciones al recibir esos datos, porque te lo hará sólo esa vez.

Eh ahí el problema.Es la parte que no se como hacer ¿como modifico variables mediante HTML que alteren el comportamiento de mi loop y no que ejecute determinadas acciones al recibir esos datos?

Pues en el anterior código tienes un ejemplo.

if (readstring.substring(LED)=="LED=P") {
parpadeando=true;
}

Esa variable permanecerá así hasta que la cambies, por ejemplo con otro comando por html. De la misma forma podrías, por ejemplo, enviar un dato de tiempo y establecer una variable de velocidad de parpadeo.