pagina web con ajax

Estoy intentando hacer una pagina web con Ajax.
consegui un proyecto de ejemplo y lo estoy estudiando. pero hay una parte de código que no estoy entendiendo. Me pueden dar una mano?

que es lo que hace esta función?

char StrContains(char *str, char *sfind)
{
char found = 0;
char index = 0;
char len;

len = strlen(str);

if (strlen(sfind) > len) {
return 0;
}
while (index < len) {
if (str[index] == sfind[found]) {
found++;
if (strlen(sfind) == found) {
return 1;
}
}
else {
found = 0;
}
index++;
}

return 0;
}

Luego uso ese char StrContain en un if de esta manera

if (StrContains(HTTP_req, “LED1=1”)) {
LED_state[0] = 1; // save LED state
digitalWrite(13, HIGH);

No entiendo la estructura de la condición del if.no esta comparando ni nada.no logro entender que es lo que hacen estos dos códigos.

HTTP_req es un String
Y StrConains busca que LED1=1 este contenida dentro de HTTP_rq
Si es la encuentra da un TRUE, de lo contrario FALSE.
Si es TRUE ejecuta lo que tienes dentro.

Ya se que HTTP_req es un string, no es la duda que tengo por eso no lo pregunte.

También entiendo lo que hace en general el IF. Se que es lo que hace pero nose COMO lo hace. El hecho de que no compare nada con nada me desconcierta. O sea...planteo las dudas explicandome un poco mas

1.-Nose lo que es StrContain (un comando de c++, una variable, ¿que es?) por lo que se ve es un char pero no lo se con certeza

2.- Que le hace (char *str, char *sfind) a StrContains

3.-COMO funciona detalladamente la condición del IF. Se que busca que LED1=1 este contenida dentro de HTTP_rq porque es lo que veo que hace el programa pero necesito entender COMO lo hace para poder aplicarlo a mi propio proyecto. siempre use condiciones de if de esta manera if(x=y) if (x>Y) y asi. Nunca de esta manera IF (x (y,z))

StrContain es una funcion que devuelve 0 o 1

if (funcion())

es equivalente por definicion a

if (funcion ()==TRUE)

por otro lado 0 es equivalente a FALSE y todo lo que sea difrente de 0 es equivalente a TRUE

en tu caso puedes usar

if (StrContains(HTTP_req, "LED1=1")==1)

que significaría que el string HTTP_req contiene el texto “LED=1”

Gracias esto me dio un rumbo que seguir, pero sigo sin entender COMO hace para saber si el string contiene “LED=1” ¿StrContain es una función de c++ o declarada por el usuario??

lo que entiendo es esto: reemplazo la función por algo mas básico y quedaría asi:

IF ( X (HTTP, “LED=1”))

(X) es el resultado de la función StrContains ya sea 1 o 0

Si esto es correcto COMO se relacionaria con lo que esta en el paréntesis dentro del paréntesis? la coma las comillas dentro del paréntesis funcionarian como una función substring? Repito, entiendo QUE es lo que hace porque lo veo funcionar pero no entiendo COMO hace lo que hace en detalle paso por paso.

Me das un ejemplo donde utilizas == pero esta condición no los utiliza por eso mi confusión. Esta pagina en la sección de referencia todos los ejemplos de condición de IF son utilizando ==,=<,>,<…etc. No entiendo como es que funciona sin comparan nada con nada. quizás tenga que ver un manual de c++ para ver los diferentes formas de condiciones de IF.Busque pero no encontré mucho

Muy básica tu duda.
Te recomiendo que leas un libro de Arduino porque si te pones a trabajar con manejo Web y tienes dudas básicas de como funciona un if, estamos en problemas, me comprendes?

Arduino y sus librerías estan llenos de funciones, que devuelven resultados variados, pero muchas son simples 1 o 0 como ya te expliqué o como ratificó Go_zalo.
Strcontain viene de String contain o sea Qué contiene el String?
Contiene lo que pongo a continuación? Si o No. 1 o 0, True o False, son todo lo mismo.

Me das un ejemplo donde utilizas == pero esta condición no los utiliza por eso mi confusión. Esta pagina en la sección de referencia todos los ejemplos de condición de IF son utilizando ==,=<,>,<…etc. No entiendo como es que funciona sin comparan nada con nada. quizás tenga que ver un manual de c++ para ver los diferentes formas de condiciones de IF.Busque pero no encontré mucho

No me parece que sea posible hacer lo que pides.
En todo caso busca donde esta Strcontain y mira como es y tienes tu respuesta.

La expresion evaluada por if no tiene porque tener 2 o mas terminos ,fijate que puedes tener una variable booleana ,cuyo valor puede ser true o false ,1 o 0 y evalualarla directamente puesto que no tienes que compararla con nada,por si misma es verdadera o falsa ,si es verdadera ejecutas eo codigo entre llaves ,si no ,no.

boolean entrada = false;
if (entrada) {
  Serial.print("entrada es verdadero");
}
else {
  Serial.print("entrada es falso");
}

Pero es lo mismo que :

if (entrada == true)

Tambien tienes que diferenciar = ,que es simbolo de asignacion (por ejemplo: entrada = true; asigna true a la variable entrada) de == que es simbolo de igualdad ( por ejemplo: entrada == true; evalua si la variable entrada es true)
Entonces en la funcion strContains ,como devuelve 1 o 0 ,en realidad es como :
if (1) cuando devuelve 1
if (0) cuando devuelve 0
En el primer caso ejecuta el codigo ,en el segundo no

Relee las respuestas, porque creo que se te ha contestado. Por un lado te han dicho que no siempre es necesario un operador de comparación en los if. Te lo intento explicar de nuevo a ver si lo terminas de pillar.

El if ejecuta el código que abarca en sus llaves si el resultado de la fórmula que contiene es distinto de cero. Por tanto:

if (1) {este código se ejecutará siempre}
if (0) {este código no se ejecutará nunca}
if (1-1) {tampoco se ejecutará}
if (1-2) {este sí}

Los operadores de comparación hacen dicha operación y devuelven true o false (1 o 0), que es lo que finalmente le llega al if.

Cualquier función que devuelva true o false (o un entero) puede ser incluida en el if directamente; comparar el resultado devuelto con true o false es redundante, a la par que puede dar resultados inesperados. Por ejemplo, la función que citas en tu primer post, y que está ahí mismo definida:

char StrContains(char *str, char *sfind)

le enviamos los punteros a dos cadenas, y si una contiene a la otra retorna devolviendo 1, y si no retorna devolviendo 0 (observa los return de esa función).

Por lo tanto si ponemos Serial.print (StrcContains(cadena1, cadena2)); veremos que se imprime un 1 o un 0 dependiendo de lo que retorne la función en base a las cadenas que le enviamos.

Y si ponemos
if(StrcContains(cadena1, cadena2)) ejecutará el código si la función devuelve 1, o mejor dicho, no lo ejecutará si la función devuelve 0.

Si echas mucho de menos poner un operador de comparación, también puedes poner, como te han dicho,
f(StrcContains(cadena1, cadena2) == true), pero es una comparación redundante, y en otras circunstancias podría darte resultados inesperados.

Asi que el foro no sirve porque no respondemos lo que tu esperas escuchar.
Y ninguno de los consejos que te dimos 3 de las personas no son de tu agrado y por eso tu mal humor.

if (StrContains(HTTP_req, "LED1=1")) {
LED_state[0] = 1; // save LED state
digitalWrite(13, HIGH);

No entiendo la estructura de la condición del if.no esta comparando ni nada.no logro entender que es lo que hacen estos dos códigos.

Los 3 te explicamos que un if solo busca que lo que tiene dentro de los () de un true o false.
tu función da un true o false. da 0 si no encuentra algo y da una posicion si lo hace.