Hola a todos.
Previamente a exponer mi problema he buscado por los foros a ver si encontraba la solución, y lo único más parecido a mi situación ha sido este hilo Problema concatenando Strings - Español - Arduino Forum, el cual es algo antiguo y tampoco aporta solución
Estoy trabajando con Arduino Uno R3 y tengo problemas al unir varios Strings mediante concat, o utilizando +=.
El código que utilizo es el siguiente:
void enviarpeticion()
{
Serial.println(F("enviarpeticion"));
// convierte el dato cifrado en cadena de caracteres y construye la petición
tiempopet = millis();
String request, sdatodif0, sdatodif1, sdatodif2, sdatodif3, sdatocif;
request = "GET /temperatura.php?temp=";
if (h==1)
{
// sdatodif0 = String(datocif[0]);
// sdatodif1 = String(datocif[1]);
// sdatodif2 = String(datocif[2]);
// sdatodif3 = String(datocif[3]);
for (int i=0; i<4; i++) {
request += String(datocif[i]);
}
// request = "GET /temperatura.php?temp=" + sdatodif0 + sdatodif1 + sdatodif2 + sdatodif3 + " HTTP/1.1";
} else {
if (h==10) {
ind=0;
for (int i=0; i<10; i++) {
for (int j=0; j<4; j++) {
//Serial.print("dato: ");
//Serial.print(i);
//Serial.print(",");
//Serial.print(j);
//Serial.print(": ");
//Serial.println(matrizdatoscif[i][j]);
sdatocif.concat(matrizdatoscif[i][j]);
//sdatocif += matrizdatoscif[i][j];
}
}
Serial.print("sdatocif: ");
Serial.println(sdatocif);
//request += sdatocif;
request.concat(sdatocif);
}
}
//request += " HTTP/1.1";
request.concat(" HTTP/1.1");
Serial.print("peticion: ");
Serial.println(request);
Serial.print("Content-Length: ");
Serial.println(request.length());
String host = "Host: " + String(site);
String client = "User-Agent: " + User_Agent;
wifly.print(request);
wifly.print("\r\n");
wifly.print(host);
wifly.print("\r\n");
wifly.print(client);
wifly.print("\r\n");
wifly.print("Content-Type: text/html; charset=utf-8");
wifly.print("\r\n");
wifly.print("Content-Length: ");
wifly.print(request.length());
wifly.print("\r\n");
wifly.print("Connection: close");
wifly.print("\r\n");
wifly.print("\r\n");
//Tiempo que tarda en construir la petición y enviarla al servidor
tiempopet = millis() - tiempopet;
n = n + 1;
Serial.println(request);
//tiempopet representa el tiempo que se tarda en construir la petición y enviarla hacia el servidor
//Habría que tener en cuenta el tiempo que se tarda desde que Arduino envía la petición hasta que le llega al servidor.
//Esto no ha sido posible calcularlo al no tener una única referencia de tiempos (sincronismo) en la parte del cliente (Arduino) y del servidor (Apache)
}
En el que matrizdatoscif está definida como:
int matrizdatoscif[10][4]; // matriz de 10 datos cifrados
En este caso el programa está pasando por: else {if (h==10).
Y el resultado que obtengo en el monitor serie es el siguiente:
enviarpeticion
sdatocif: -6562627616784-2936831184-30198-10882-24012-246811236-14430-6034-7042-13581456719204-28170-3856-2657-319285072-1189430606-194047900-7708-130063950-7042-13581456719204-28170-3856-2657-319285072-1189430606-19404
peticion: GET /temperatura.php?temp= HTTP/1.1
Content-Length: 35
GET /temperatura.php?temp= HTTP/1.1
donde se puede ver claramente el contenido de la variable sdatocif, y el contenido de la variable request (lo que le impreso después de petición:)
El resultado después de ejecutarlo mediante concat o mediante el operador += es el mismo: no concatena el valor de la variable sdatocif.
¿Alguien sería tan amable de darme una pista acerca de la posible solución a este error?
Saludos.