Il problema è che invio la richiesta tramite URL: http:///?r=10&g=20&b=30&e=40... ma funziona solo la prima volta, poi restituisce sempre il primo valore, come se una volta impostata la variabile diventi ReadOnly...
Per processare le mie stringhe ricevute tramite lo shield ethernet uso:
#include <WString.h>
String HTTP_req; // Salvo le richieste HTTP globali
void loop()
{
// listen for incoming clients
EthernetClient client = server.available();
if (client) {
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (readString.length() < 100) {
//store characters to string
readString.concat(c);
}
HTTP_req += c;
Serial.write(c);
if (c == '\n' && currentLineIsBlank) {
client.println("HTTP/1.1 201 Created");
client.println("Content-Type: application/json");
//client.println("Content-Length: 300");
client.println("Connection: close");
client.println();
client.println("{");
int startIndex = HTTP_req.indexOf("r");
int endIndex = HTTP_req.indexOf("g");
String redStr = HTTP_req.substring(startIndex + 2, endIndex - 1);
char tempRed[4];
redStr.toCharArray(tempRed, sizeof(tempRed));
redVal = atoi(tempRed);
startIndex = HTTP_req.indexOf("g");
endIndex = HTTP_req.indexOf("b");
String greenStr = HTTP_req.substring(startIndex + 2, endIndex -1);
char tempGreen[4];
greenStr.toCharArray(tempGreen, sizeof(tempGreen));
greenVal = atoi(tempGreen);
startIndex = HTTP_req.indexOf("b");
endIndex = HTTP_req.indexOf("e");
String blueStr = HTTP_req.substring(startIndex + 2, endIndex -1);
char tempBlue[4];
blueStr.toCharArray(tempBlue, sizeof(tempBlue));
blueVal = atoi(tempBlue);
Serial.print("Stringa ricevuta:");
Serial.println(HTTP_req);
Serial.println(redStr);
Serial.println(greenStr);
Serial.println(blueStr);
Serial.println(redVal);
Serial.println(greenVal);
Serial.println(blueVal);
client.println("}");
break;
}
if (c == '\n') {
currentLineIsBlank = true;
/Niente codice qui va in loop/
}
else if (c != '\r') {
currentLineIsBlank = false;
}
}
}
delay(1);
client.stop();
}
}