Go Down

Topic: Problema con stringa (Read 254 times) previous topic - next topic

ADemo86

Il problema è che invio la richiesta tramite URL: http://<ip>/?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();
  }
}

SukkoPera

Prova a spostare

Code: [Select]
String HTTP_req;

dentro a loop().
"Code is read much more often than it is written, so plan accordingly. Design for readability."

Guida rapida a ESP8266: https://goo.gl/kzh62E

gpb01

#2
Mar 18, 2016, 03:58 pm Last Edit: Mar 18, 2016, 03:58 pm by gpb01
@ADemo86:  in conformità al regolamento, punto 7, edita (in basso a destra del post, bottone More -> Modify) il tuo post e racchiudi il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra). Grazie.

Guglielmo
Search is Your friend ... or I am Your enemy !

Go Up