Go Down

Topic: fallo con ethernet y control via web (Read 298 times) previous topic - next topic

rgomqui

Feb 08, 2015, 01:49 am Last Edit: Feb 08, 2015, 01:55 am by rgomqui
Pues esto intentando montar el control de un invernadero via web, la programacion es una web sencilla con un head comun que incluye head, titulo y cabecera de la pagina, el pie junto al cuadro de informacion( temperatura, humedad,..) tambien es comun. Pero a traves de un menu horizontal programado por enlaces, me gustaria ir mostrando diferentes "body" segun la seccion. Consigo sacar de la cadena principal que recoje arduino de la peticion, el enlace en limpio que me interesa, pero no consigo hacer que ejecute el IF correspondiente. Dejo un trozo de codigo, que no da errores al compilar ni cargar pero no ejecuta el if.

void loop() {
  temperatura = dht.readTemperature();
  humedad = dht.readHumidity();
 EthernetClient cliente = server.available();
  if (cliente) {
    boolean currentLineIsBlank = true;
    while (cliente.connected()) {
      if (cliente.available()) {
        char c = cliente.read();
        if (readString.length() < 100) {
          readString += c;
        }
        if (c == '\n'){
        int posfinal = readString.indexOf("w"); 
        String modulo = readString.substring(5, posfinal);
       
     
   
           
          //Enviamos la cabecera web
          cliente.println("HTTP/1.1 200 OK");
          cliente.println("Content-Type: text/html");
          cliente.println();
 
            //Mostramos la web de control
            cliente.println("<html><head><title>Control de Invernadero</title></head><body><center> <h1>Control de Invernadero por Ethernet</h1> ");
            cliente.println("<a href='./?Iniciow'>Inicio</a> --- <a href='./?Luzw'>Iluminacion</a> --- <a href='./?Tempw'>Temperatura</a> ");
            cliente.println("<br />");
            cliente.println(modulo);  //solo para debug
            body(cliente, modulo);
            cuadro(cliente);
            cliente.println(" </body></center></html>");                         
          break;
        }
         
      }
    }
    // Darle un respiro al navegador web para recibir los datos
    delay(1);
    //Limpiar String para proxima petición HTTP
    readString="";
    //Cerrar conexión
    cliente.stop();
  }
}

void body ( EthernetClient cliente, String modulo){
  if (modulo == "?inicio"){
      cliente.println("Prueba de menu de inicio");
}
 else if (modulo == "?luz"){
      cliente.println("prueba de menu de iluminacion");
}
else if (modulo== "?temp"){
       cliente.println("prueba de menu de temperatura");
}

}

noter

¿Has probado a poner un Serial.print(modulo) dentro de la función body?
Tal vez no se esté enviando el string de la forma que supones.

rgomqui

esta es la peticion del servidor:  GET /?Luzw HTTP/1.1

y esto lo que devuelve el Serial.print puesto en el body del String modulo:
 ?Luz
favicon.ico HTTP/1.1

Alguien sabe como comparar ciertos rangos de una cadena, por ejemplo desde la posicion fija 5 que es donde empieza el trozo de cadena que me interesa hasta la posicion final que ya consigo sacarla antes con otra instruccion


Go Up