delay() no funciona dentro de una función

String toggle(const String& var) {
  Serial.println(var);
  if (var == "STATE") {
    ledState2=1;
    Serial.println(ledState2);
    
    delay(1000);
      
    ledState2=0;
    Serial.println(ledState2);
  }
  
  return String();
  return ledState2;
}

Hola gente =)
Tengo esta función que se activa por una llamada desde una web. Uso un ESP01 como servidor.
El delay no actúa.
Gracias por su tiempo.
Un saludo

Si no te funciona es por que no se cumple el condicional.

String

Prueba

if (var == String("STATE")) {

Hola @krnlpanic. Gracias por tu ayuda.

El condicional si funciona porque por el terminal obtengo:

23:51:24.272 -> STATE
23:51:27.677 -> 1
23:51:27.677 -> 0
23:51:29.799 -> STATE
23:51:29.799 -> 1
23:51:29.799 -> 0

Es decir, obtengo lo que quiero, pero sin delay.
También he probado tu opción obteniendo el mismo resultado.

Esta es la parte de código que atiende a la petición del botón de la web:

  server.on("/toggle", HTTP_GET, [](AsyncWebServerRequest * request) {
    request->send(SPIFFS, "/index.html", String(), false, toggle);
  });

Estoy empezando con programación en servidor y no me entero aún mucho, ¿puede ser que tenga que ver con que estoy trabajando con peticiones html?

Gracias de nuevo por vuestro tiempo.
Un saludo.

Pues si, creía que no cumpliría al no estar declarado como String.

He copiado tu código y he probado, no me compila si no elimino el ultimo return, que por cierto para que lo utilizas? ademas de borrar la ultima llave que no es necesaria y me hace el delay perfectamente.

Hola de nuevo.

He quitado la llave; ha sido un error al copiar/pegar/probar cosas.

Has probado mi código en un server? Has hecho la petición http y te hace el delay? :o

Si copias el código completo podre probarlo completo, solo he copiado la funcion y la llamo continuamente en el loop.

Genial!
Gracias por tu ayuda.
El código es TAL CUAL este, pero añadiendo el delay en una de las peticiones HTML.
LINK PROYECTO

En el link no veo ninguna función como la tuya, puedes copiar tu código?

Mi código es el del ejemplo que he pasado. Lo único que he añadido es esta función.

String toggle(const String& var) {
  Serial.println(var);
  if (var == "STATE") {
    ledState2=1;
    Serial.println(ledState2);
    
    delay(1000);
      
    ledState2=0;
    Serial.println(ledState2);
  }
  
  return String();
  return ledState2;
}

Esto no esta bien y te aconsejo que lo elimines

return String();

String es un comando que define una variable y ahí luce como un llamado a una función
Elimina eso por favor que no tiene sentido.

La próxima vez, no pongas solo la rutina que te genera problemas porque tal como vez en tu ejemplo (el que pones usando un link) una de las variables es configurada como String ledState pero no existe ledState2.
Nosotros tenemos que basarnos en lo que tu nos indicas.

Esta es la funcion alli indicada

String processor(const String& var){
Serial.println(var);
if(var == "STATE"){
if(digitalRead(ledPin)){
ledState = "ON";               // <== Acá asignan caracteres
}
else{
ledState = "OFF";              // <== caracteres
}
// Imprimimos el estado del led ( por el COM activo )
Serial.print(ledState);
return ledState;
}
}

pero existe una variable previamente definida como
String ledstate;

Ahora en tu ejemplo usas ledState2 no definida ni local ni globalmente al menos por ese ejemplo.

Corrije eso o postea todo el código incluida tu rutina para poder seguirlo.

@surbyte, tienes toda la razón. Además me acabo de dar cuenta de que había pegado mal el trozo del código.
Adjunto el código completo que estoy utilizando.
Siento las molestias también @krnlpanic.

 /*
1º Parte del proyecto del servidor web
Adaptado de  Ruiz Santos (RandomNerdTutorials.com)
*/
// Importamos las librerías
#include <ESP8266WiFi.h>
#include <ESPAsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <FS.h>
// Sustituye los datos de tu red WIFI ( el nombre y la contraseña )
const char* ssid = "**********";
const char* password = "********";

// Puesta de LED GPIO
const int ledPin = 2;
// Para guardar el estado del LED
String ledState;
int ledState2 = 0;


// Creamos el servidor AsyncWebServer en el puerto 80
AsyncWebServer server(80);




String toggle(const String& var) {
  Serial.println(var);
  if (var == "STATE") {
    ledState2=1;
    Serial.println(ledState2);
    
    delay(1000);
      
    ledState2=0;
    Serial.println(ledState2);
  }
  
  return ledState;
}


void setup(){
// Establecemos la velocidad de conexión por el puerto serie
Serial.begin(9200);
// Ponemos a  ledPin  como salida
pinMode(ledPin, OUTPUT);

// Iniciamos  SPIFFS
if(!SPIFFS.begin()){
Serial.println("ha ocurrido un error al montar SPIFFS");
return;
}

// conectamos al Wi-Fi
WiFi.begin(ssid, password);
// Mientras no se conecte, mantenemos un bucle con reintentos sucesivos
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
// Esperamos un segundo
Serial.println("Connecting to WiFi..");
}

Serial.println();
Serial.println(WiFi.SSID());
Serial.print("IP address:\t");
// Imprimimos la ip que le ha dado nuestro router
Serial.println(WiFi.localIP());

// Ruta para cargar el archivo index.html
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(SPIFFS, "/index.html", String(), false, processor);
});

// Ruta para cargar el archivo style.css
server.on("/style.css", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(SPIFFS, "/style.css", "text/css");
});

// Ruta para poner el GPIO alto
server.on("/toggle", HTTP_GET, [](AsyncWebServerRequest *request){
digitalWrite(ledPin, HIGH);
request->send(SPIFFS, "/index.html", String(), false, processor);
});



// Start server
server.begin();
}

void loop(){
  digitalWrite(ledPin,ledState2);

}

Como dije, no tengo ni idea con programación del lado del servidor. Ésto estaba en el ejemplo y no sabía qué hacía.

return String();

Ya lo he quitado.

Un saludo y gracias!

No consigo que me aparezca la opción de subir los archivos por lo que no puedo probarlo completo, seguiré investigando cuando tenga tiempo como hacerlo.

Vale genial, muchas gracias.

Es raro. La única conclusión que saco es que en las funciones donde hay peticiones HTML no funciona delay.
El delay lo necesito porque es un dispositivo para controlar una puerta y debo enviarle pulsos.

Muchas gracias!