Error de código - Modulo Ethernet | Metodo GET para capturar dato

Estimados,
Buenos dias a todos!
Les comento mi problema...
Quiero capturar informacion desde una pagina web que posee 3 INPUTS Type String para capturar 3 valores decimales. Tengo entendido que la pagina WEB devuelve ASCII por lo cual tengo que hacer la conversion y construir el numero que ingrese.

Mi problema es que no puedo capturar los 3 valores ingresados de forma independiente por el metodo GET, no hay forma...nose que estoy haciendo mal. No puedo capturar los valores.

1* Saben cual podria ser mi error que no puedo capturar los valores ingresados en los 3 INPUTS ?

2* Hay alguna forma de capturarlos directamente en decimal? (Para no estar haciendo la conversion de ASCII a decimal). Asi el usuario puede ingresar cualquier valor decimal que desee.

Utilizo:

  • Arduino MEGA
  • Modulo ethernet W5100

El error se que está en el Void loop() pero nose que estoy haciendo mal.

#include <SPI.h>
#include <Ethernet.h>
//Ponemos la dirección MAC e IP que queremos que use nuestro Arduino para conectarse al Router
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
//byte mac[] = { 0x80, 0xEE, 0x73, 0x3A, 0x12, 0x4E };
IPAddress ip(192,168,1,48);
String readString;
//Definimos que el puerto HTTP sera el 80
EthernetServer server2(80);
void setup()
{
//Iniciar la conexión de red y serie
Ethernet.begin(mac, ip);
server2.begin();
Serial.begin(9600);
Serial.print("Inicializando..");
}
void loop()
{
// Esperamos que venga algún cliente web al puerto 80
EthernetClient cliente = server2.available();
if (cliente) {
boolean currentLineIsBlank = true;
while (cliente.connected()) {
if (cliente.available()) {
char c = cliente.read();
//Leer peticion
if (readString.length() < 100) {
//Almacenar caracteres en un string
readString += c;
}
//Si ha terminado la petición del cliente
if (c == 'n') 
{
  int corr_posicion = readString.indexOf("corr");                                   
  if (corr_posicion >0){
  int posicion = corr_posicion + 5;
 // int posicionx = readString.indexOf("=");
  int posicion2 = readString.indexOf(".");
  int n = (((readString[posicion+1] -48) * 10) + ((readString[posicion+2] -48) * 1));
  float n2 = (((readString[posicion2+1] -48) * 0.1) + ((readString[posicion2+2] -48) * 0.01)); 
  float corr = n + n2;
  //String n = (((readString[posicion+1] -48) * 10) + ((readString[posicion+2] -48) * 1));
  //float value = n.toFloat();
  //Serial.print(value, 3);      // print with 3 decimal places
  Serial.print("Valor de Corriente (A) enviado es:");
  Serial.print(corr);
  Serial.print('\n');   
} 
  int tens_posicion = readString.indexOf("tens");                                   
  if (tens_posicion >0){
  int posicion3 = tens_posicion + 5;
  int posicion4 = readString.indexOf(".");
  int n3 = (((readString[posicion3+1] -48) * 10) + ((readString[posicion3+2] -48) * 1));
  float n4 = (((readString[posicion4+1] -48) * 0.1) + ((readString[posicion4+2] -48) * 0.01)); 
  float tens = n3 + n4;
  Serial.print("Valor de Tension (V) enviado es:");
  Serial.print(tens);
  Serial.print('\n');      
}
  int pote_posicion = readString.indexOf("pote");                                   
  if (pote_posicion >0){
  int posicion5 = pote_posicion + 5;
  int posicion6 = readString.indexOf(".");
  int n5 = (((readString[posicion5+1] -48) * 10) + ((readString[posicion5+2] -48) * 1));
  float n6 = (((readString[posicion6+1] -48) * 0.1) + ((readString[posicion6+2] -48) * 0.01)); 
  float pote = n5 + n6;
  Serial.print("Valor de Potencia (P) enviado es:");
  Serial.print(pote);
  Serial.print('\n');      
}
//Enviamos la cabecera web
cliente.println("HTTP/1.1 200 OK");
cliente.println("Content-Type: text/html");
cliente.println();
cliente.print("<html><head>");
cliente.print("<title>Ethernet Shield</title>");
cliente.println("</head>");
cliente.print("<body bgcolor='#333399'>");
//--Titulo De La Pagina--
cliente.println("
<hr />");
cliente.println("<h1><div align='center'><font color='#FFFFFF'>Proyecto Carga Electronica Programable</font color></div></h1>");
cliente.println("
");
cliente.println("<center> <h2>Ingrese valor Numerico del tipo 12.34</h2> ");
cliente.println("<font color='#FFFFFF'>");
//-------------------------------------------------------------------------------------------
cliente.println("
 <form action='/' method='get'>");
cliente.println("<li> <td 
Valor de corriente I (A):<input name='corr' type='text'>");
//cliente.println("</form>");
cliente.println("<hr />");
cliente.println("
 <form action='/' method='get'>");
cliente.println("<li> <td 
Valor de Tension V (V):<input name='tens' type='text'>");
//cliente.println("</form>");
cliente.println("<hr />");
cliente.println("
 <form action='/' method='get'>");
cliente.println("<li> <td 
Valor de Potencia P (W):<input name='pote' type='text'>");
//cliente.println("</form>");
cliente.println("<hr />");
cliente.println("
");
cliente.println("<input type='submit'>");
cliente.println("</form>");
cliente.println("</center>");
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();
}
}

Desde ya muchas gracias!
Saludos!!

Tienes unos errores de concepto de HTML:

  • En web no se usan valores numéricos, sino ASCII siempre.
  • Si quieres valores extructurados, mejor pasa información por json, aunque para eso es más efectivo el POST que el GET.
  • Si quieres prepararlos, necesitas javascript, así como prepararlos para usarlos en el lado HTML, aunque sea para meterlos en el form.
  • Pasa sacarlos del form y enviarlos, necesitas javascript también.
  • jquery soluciona la mayoría de estas necesidades.
  • No vemos el código html por lo que no podemos saber qué te envía.
  • No nos envíes el html, envíanos o muéstranos la cadena GET que usas para ver cómo se serializan los datos

Hola TonyDiana!
Muchas gracias por tomarte el tiempo en responder…

Te comento,
Mi idea fue crear un formulario (Serial.print (’’); y al acabar el formulario: Serial.print(’’); con un cuadro de texto (que es un ) y un boton de submit ( )
En este caso coloqué 3 INPUTS type text.

Cuando se aprete el boton de enviar se generara un peticion GET por url con un texto tipo GET /?prueba = valor
donde valor sera lo que hayas introducido.En el loop la idea seria guardar y procesar esa cadena para extraer la informacion ,por ejemplo en un String ,buscar la cadena ‘prueba=’ y saber que despues esta el valor.

El tema es que no estoy logrando conseguirlo…

En el loop coloque esto para capturar el String:

//Si ha terminado la petición del cliente
if (c == 'n') 
{
  int corr_posicion = readString.indexOf("corr");                                   
  if (corr_posicion >0){
  int posicion = corr_posicion + 5;
 // int posicionx = readString.indexOf("=");
  int posicion2 = readString.indexOf(".");
  int n = (((readString[posicion+1] -48) * 10) + ((readString[posicion+2] -48) * 1));
  float n2 = (((readString[posicion2+1] -48) * 0.1) + ((readString[posicion2+2] -48) * 0.01)); 
  float corr = n + n2;
  Serial.print("Valor de Corriente (A) enviado es:");
  Serial.print(corr);
  Serial.print('\n');   
}

Pero no puedo lograr la captura… Si o si debo hacerlo con javascript ?

jquery

Moderador:
En el título no debe usarse la palabra Ayuda ni tampoco mayúsuculas. Edita!!
Solo deja todo lo que no tenga que ver con esas palabras.

Lee las Normas del foro

Perfecto. Ahi lo corregi al titulo. gracias

Moderador:
Bueno, como dejaste algo en mayúsuclas y parece que mi español no fue claro, lo edité por ti para no continuar con el tema, ya que al menos pusiste tu empeño en hacerlo.

Luego te paso algun ejemplo de cómo hacerlo.
Pero la respuesta de TonyDiana es la que uso actualmente.

Pasa sacarlos del form y enviarlos, necesitas javascript también.
jquery soluciona la mayoría de estas necesidades.

Hola surbyte,
Gracias por la correccion, pensé que se habia corregido. Es mi 1er publicacion, para las proximas lo haré de acuerdo a todas las reglas ya establecidas!

En referencia al tema...
Si tendria algun ejemplo para pasarme seria de mucha ayuda, jamás utilice jquery o programas similares.

Quiero poder realizar esta aplicacion sin importar todo lo que necesite aprender.

Gracias.
Saludos

Este es el mejor lugar jquery en español
https://www.anerbarrena.com/jquery-get-5049/amp/