Ola, eu estou me batendo em como extrair uma informação de valor da string.... (perdão se estiver falando errado, estou aprendendo)

Ex:

http://192.168.1.177:8888/?hliga=22&LA=Trocar+Horario

como fazer o arduino pegar só o valor 22 ? que ira para uma variavel do RTC...

if(readString.indexOf("LA") >0){
// EXECUTA O COMANDO...

HoraLiga = readString.indexOf("hliga");
Serial.println(HoraLiga);

} // FIM COMANDO

a ideia é eu setar numa box de texto no HTML dentro do arduino o valor da variavel "HoraLiga"

Exibições: 2437

Anexos

Responder esta

Respostas a este tópico

Olá André

Se na URL sempre vierem os parâmetros hliga e LA, então você pode fazer o seguinte:

1) Obtenha a posição do "=" antes do valor (22)

2) Obtenha a posição do "&" depois do valor (22)

3) Use o método substring para pegar o valor desejado.

Fiz um teste aqui em casa e deu certo. Veja o sketch que usei para testar:

String readString;
String HoraLiga;
void setup() {
  readString = "http://192.168.1.177:8888/?hliga=22&LA=Trocar+Horario";
  Serial.begin(9600);
}

void loop() {

  if(readString.indexOf("hliga") > 0){


  int posIgual = readString.indexOf("=") + 1; // Pega a posição do = antes do valor
  int posE = readString.indexOf("&"); // Pega a posição do & depois do valor

  HoraLiga = readString.substring(posIgual,posE);
  Serial.println(HoraLiga);
  delay(3000);
  }

}

Falta só converter a variável horaliga para int se precisar. Pode fazer isso: horaliga = HoraLiga.toInt())

Abraço,

José Cintra

Caro Jose, seu codigo me ajudou muito, consegui extrair o valor, porem ele repete o valor no no Seial 10 x eu preciso que este valor se repita apena 1 vez segue abaixo parte do meu codigo

 if (client) {
      while (client.connected()){
        if (client.available()){
          char c = client.read();
          if (readString.length() < 30)// ler caractere por caractere vindo do HTTP
          {          
            readString += (c);// armazena os caracteres para string
          }
          if (c == '\n')
          {

          
   
           if(readString.indexOf("liga") > 0){


  int posIgual = readString.indexOf("=") + 1; // Pega a posição do = antes do valor
  int posE = readString.indexOf("f"); // Pega a posição do f depois do valor
  int horaliga;
  HoraLiga = readString.substring(posIgual,posE);
  horaliga = HoraLiga.toInt();
  Serial.println(HoraLiga);
 
 
             
              //imprimeBrowser(client);           
              readString="";//limpa string para a próxima leitura
                digitalWrite(rele[horaliga], !statusrele[horaliga]);
            statusrele[horaliga] = !statusrele[horaliga];
             delay(200);
              client.stop();     // parar cliente
             // Serial.println(HoraLiga);
           
        }
        
        }
        }
      }
    }
 
 
  }

void setup() {
/*
a primeira linha do que vc recebe no seu webserver é mais ou menos isso:

GET /?hliga=22&LA=Trocar+Horario HTTP/1.1

Supondo que voce tenha armazenado em uma variavel String
*/
  // put your setup code here, to run once:
   String msgClient = "GET /?hliga=22&LA=Trocar+Horario HTTP/1.1";
   int horaLiga;
   String strLA;
   int index;

   //pega primeira variavel armazena em horaLiga
   if ( (index=msgClient.indexOf("hliga=")) >= 0) {
      int iFinal;
      //busca '&'
      for (iFinal=index+6; msgClient.charAt(iFinal) != '&'; iFinal++)
         ;
      horaLiga = (msgClient.substring(index+6, iFinal)).toInt();
   }

   //pega segunda variavel armazena em strLA
   if ( (index=msgClient.indexOf("LA=")) >= 0) {
      int iFinal;
      //busca ' '
      for (iFinal=index+3; msgClient.charAt(iFinal) != ' '; iFinal++)
         ;
      strLA = msgClient.substring(index+3, iFinal);
   }
   Serial.begin(9600);
   Serial.print("horaLiga="); Serial.println(horaLiga);
   Serial.print("LA="); Serial.println(strLA);

}

void loop() {
  // put your main code here, to run repeatedly:

}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço