Parpadeo de lámpara, encendido online

Hola a todos, he conseguido, gracias a la ayuda de otros proyectos, ya que no domino mucho el tema, encender una lámpara con la ayuda de una Un Shield Ethernet (W5100), y un botón de encendido y apagado que accedo con la dirección IP. Pero ahora me gustaría que parpadeara, he leído que metiéndole un “delay” pero no me responde. Alguna idea? Gracias.

#include <SPI.h>
#include <Ethernet.h>
 
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 0, 100);
EthernetServer server(80);
 
const int pinLed1 = 9;

void setup()
{
  Serial.begin(9600);
 
  Ethernet.begin(mac, ip);
  server.begin();
 
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
 
  pinMode(pinLed1, OUTPUT);


}
 
void loop()
{
  EthernetClient client = server.available(); 
  if (client)
  {
    Serial.println("new client");
    bool currentLineIsBlank = true;
    String cadena = "";
    while (client.connected()) 
    {
      if (client.available()) 
      {
        char c = client.read();
        Serial.write(c);
 
        if (cadena.length()<50)
        {
          cadena.concat(c);
 
           // Buscar campo data
          int posicion = cadena.indexOf("data");
          String command = cadena.substring(posicion);
 
          if (command == "data1=0")
          {
            digitalWrite(pinLed1, HIGH);
            delay(500)
          }
          else if (command == "data1=1")
          {
            digitalWrite(pinLed1, LOW);
            delay(500)
          }

          
        }
 
        // Al recibir linea en blanco, servir página a cliente
        if (c == '\n' && currentLineIsBlank)
        {
          client.println(F("HTTP/1.1 200 OK\nContent-Type: text/html"));
          client.println();
 
          client.println(F("<html>\n<head>\n<title>Lampara</title>\n</head>\n<body>"));
          client.println(F("<div style='text-align:center;'>"));
          client.println(F("<h1>Encender</h1>"));
          client.println(F("<h1>Lampara</h1>"));
          
          client.print(F("Lampara = "));
          client.println(digitalRead(pinLed1) == LOW ? "Encendido" : "Apagado");
          client.println(F("
"));
          client.println(F("<button onClick=location.href='./?data1=0'>Apagado</button>"));
          client.println(F("<button onClick=location.href='./?data1=1'>Encendido</button>"));
          client.println(F("
"));


 
          client.println(F("</div>\n</body></html>"));
          break;
        }
        if (c == '\n') 
        {
          currentLineIsBlank = true;
        }
        else if (c != '\r') 
        {
          currentLineIsBlank = false;
        }
      }
    }
 
    delay(1);
    client.stop();
  }
}

Si pones un delay puedes bloquear peticiones entrantes a la pagina web,seria mejor usar millis().Mira el ejemplo del IDE Archivo->Ejemplos->Digital->BlinkWithoutDelay

Muchas gracias, le he echado un vistazo, pero no sé introducirlo en mi código, me da error, me podrías decir cómo sería? Gracias

He hecho unos cambios. Intento controlar 2 lámparas. Poder encender y apagar 2 lámparas. Una que parpadee cuando esté encendida, y la otra encendida todo el rato. La lámpara 2, funciona correctamente, al darle a encender (encendida fija) y a apagar. La lámpara 1, quiero que parpadee, pero no sé como utilizar la función “millis”, porque está todo el rato encendida parpadeando, no consigo pararla. Alguien sabría decirme que está mal? Quiero que parpadee, pero poder encenderla y apagarla como la “Lámpara 2” Gracias

#include <SPI.h>
#include <Ethernet.h>
 
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 0, 100);
EthernetServer server(80);
 
int ledPin = 9;
int pinLed2 = 7;

// Variables will change:
    int ledState = LOW;             // ledState used to set the LED
    long previousMillis = 0;        // will store last time LED was updated
     
// the follow variables is a long because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
    long interval = 1500;           // interval at which to blink (milliseconds)


 
void setup()
{
  Serial.begin(9600);
 
  Ethernet.begin(mac, ip);
  server.begin();
 
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
 
  pinMode(ledPin, OUTPUT); 
  pinMode(pinLed2, OUTPUT);

  digitalWrite(ledPin, LOW);
  digitalWrite(pinLed2, LOW);

}
 
void loop()

{
        // here is where you'd put code that needs to be running all the time.
     
      // check to see if it's time to blink the LED; that is, if the 
      // difference between the current time and last time you blinked 
      // the LED is bigger than the interval at which you want to 
      // blink the LED.
      unsigned long currentMillis = millis();
     
      if(currentMillis - previousMillis > interval) {
        // save the last time you blinked the LED 
        previousMillis = currentMillis;   
     
        // if the LED is off turn it on and vice-versa:
        if (ledState == LOW)
          ledState = HIGH;
        else
          ledState = LOW;
     
        // set the LED with the ledState of the variable:
        digitalWrite(ledPin, ledState);
      }
  EthernetClient client = server.available(); 
  if (client)
  {
    Serial.println("new client");
    
    
    bool currentLineIsBlank = true;
    String cadena = "";
    while (client.connected()) 
    {
      if (client.available()) 
      {
        char c = client.read();
        Serial.write(c);
 
        if (cadena.length()<50)
        {
          cadena.concat(c);
 
           // Buscar campo data
           
          int posicion = cadena.indexOf("data");
          String command = cadena.substring(posicion);
          
          if (command == "data2=0")
          {
            digitalWrite(pinLed2, HIGH);
          }
          else if (command == "data2=1")
          {
            digitalWrite(pinLed2, LOW);
            }
         
          
        }
 
        // Al recibir linea en blanco, servir página a cliente
        if (c == '\n' && currentLineIsBlank)
        {
          client.println(F("HTTP/1.1 200 OK\nContent-Type: text/html"));
          client.println();
 
          client.println(F("<html>\n<head>\n<title>Lamparas</title>\n</head>\n<body>"));
          client.println(F("<div style='text-align:center;'>"));
          client.println(F("<h1>Lamparas</h1>"));
          client.println(F("<h1>Lampara</h1>"));
          
          client.print(F("Lampara 1 = "));
          client.println(digitalRead(ledPin) == LOW ? "Encendido" : "Apagado");
          client.println(F("
"));
          client.println(F("<button onClick=location.href='./?data1=0'>Apagado</button>"));
          client.println(F("<button onClick=location.href='./?data1=1'>Encendido</button>"));
          client.println(F("
"));

          client.print(F("Lampara 2 = "));
          client.println(digitalRead(pinLed2) == LOW ? "Encendido" : "Apagado");
          client.println(F("
"));
          client.println(F("<button onClick=location.href='./?data2=0'>Apagado</button>"));
          client.println(F("<button onClick=location.href='./?data2=1'>Encendido</button>"));
          client.println(F("
"));

          

 
          client.println(F("</div>\n</body></html>"));
          break;
        }
        if (c == '\n') 
        {
          currentLineIsBlank = true;
        }
        else if (c != '\r') 
        {
          currentLineIsBlank = false;
        }
      }
    }
 
    delay(1);
    client.stop();
  }
}

Pues tendras que hacer lo que haces con la lampara 2:

if (command == "data2=0")
          {
            digitalWrite(pinLed2, HIGH);
          }
          else if (command == "data2=1")
          {
            digitalWrite(pinLed2, LOW);
            }

pero para la lampara 1.
Lo unico que el resultado lo puedes asignar a una variable booleana(verdadero o falso) y segun su valor ejecutas o no el bloque de codigo que recoge el valor de millis() y lo compara con interval.