Galera, eu entendo de web, mas não entendo muito do Arduino ainda.

Já fiz uma versão de um aplicativo aqui, que envia dados via bluetooth do anrdoid para o arduino, tudo blz..


interface: www.rogeriofilho.com/lfpc


mas agora, para mais usuarios poderem ter acesso, estou fazendo com interface web.. para nao recarregar a pagina estou fazendo com AJAX..como a requisição é para outro servidor, eu preciso usar JSONP para funcionar o AJAX... mas o que acontece é que o link que o arduino recebe é tipo assim:

GET /?001&_=1355946144421 HTTP/1.1
GET /?002&_=1355946144421 HTTP/1.1
GET /?003&_=1355946144421 HTTP/1.1
GET /?004&_=1355946144421 HTTP/1.1

tudo que eu recebo eu faço.

char c = client.read();

Serial.println(c);

onde a primeira linha é essa ali acima..

onde eu tenho que pegar 3 numeros apos o ? e antes do &

Alguem me da uma ajuda!! :)

Exibições: 1269

Responder esta

Respostas a este tópico

Vc quer extrair o sexto, setimo e oitavo caracter da string ?

Se servir assim, por posição do caracter vide:

http://labdegaragem.com/forum/topics/como-receber-uma-string-pela-s...

Caso queira a posição do '?' Vc vai precisar do:

http://arduino.cc/en/Tutorial/StringIndexOf

Acho mais polido...

Muito legal sua pagina !!!!

Queria fazer uma assim... 

A página eu fiz com jQueryMobile.. vai ser uma APP nativa para Android, feita com HTML5.

Na verdade. tem que ser do jeito que ele pegue os 3 numeros contando que seja sempre dps do "?"

Pois quando a requisição vem de uma outra pagina ela vem com o endereço da pagina antes.

Vou da uma olhada nesse StringIndexOf, agradeço...

Acho que algo assim te atende:

char p=String1.indexOf('?');

String2=String1[p+1]+String1[p+2]+String1[p+3];

Tenho tentado fazer dessa forma e nao consegui sucesso aidnda:

char c = client.read();

Serial.print(c);

String vars;
vars.concat(c);

char p;
p = vars.indexOf('?');

char String2;
String2 = vars[p+1]+vars[p+1]+vars[p+1];

Código completo: http://pastebin.com/vJFne5z1

opa, primeiro, nao tem a ver com a pergunta, mas pra funcionar o ajax entre servidores, seu header tem que ser mais ou menos assim:

/***/

  client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Server: Rafinho Arduino");
          client.println("Access-Control-Allow-Origin: *");//aqui o pulo do gato pra aceitar http_request por script
          client.println();

/****/

agora sobre a pergunta, facinho, preste atençao na parte em negrito:


/********/
thernetClient client = server.available();
  if (client) {
    // o request termina em linha em branco
    boolean currentLineIsBlank = true;
    String linha = "";
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        // atingindo o fim da linha (recebendo o caracter "newline")
        // e o final da linha sendo branco, o http request terminou
        // entao podemos preparar a resposta
        
       linha.concat(c);
       //linha=linha+c;
        if (c == '\n' && currentLineIsBlank) {
          // nosso cabeçalho de resposta compativel com http_request estilo ajax REMOTO
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Server: Rafinho Arduino");
          client.println("Access-Control-Allow-Origin: *");//aqui o pulo do gato pra aceitar http_request por script
          client.println();

int iniciofrente = linha.indexOf("?");
           if(iniciofrente>-1){//verifica se o comando veio
             iniciofrente     = iniciofrente+1; //pega o caractere seguinte
             int fimfrente    = iniciofrente+3; //esse comando espero 3 caracteres
             String frente    = linha.substring(iniciofrente,fimfrente);//recupero o valor do comando
            
  
               client.print(" frente: " + frente); //so imprime devolta o valor do comando, aqui vc faz o que quiser ;)
             
           }

/*... continua seu codigo ...*/

/****/

Valeu cara, so precisei alterar essa parte, e pronto, obrigado mesmo!!

iniciofrente = iniciofrente+2; //pega o caractere seguinte
int fimfrente = iniciofrente+3; //esse comando espero 3 caracteres

 

A parte do ajax ja estava funcionando, pois eu usei jsonp para enviar os dados, ai dar certo.

 

uso essa função em javascript para enviar..

http://pastebin.com/bpPdVHuW

obrigado!

void loop ()

{

char S=c;// recebe 'GET /?001&_=135... HTTP/1.1'

char r;

char n;

int i;

int f;

for (i =6;i>=length("GET /?")+3;++i)

{

r=s.charAt(i);

n=s.concat(n, r)

}//for

}//loop

Boas tudo bem? O meu projecto também tem um arduino, também ando aprender a mexer nele!! :)

Sobre esse assunto, ve este site:

http://www.jayconsystems.com/forum/viewtopic.php?f=10&t=90

na parte onde compara o readstring.equals ("GET"), colocas readstring.equals("GET /?001&_=1355946144421 HTTP/1.1"); 

e podes fazer um switch case, ou um IF.

Por exemplo:

if (readstring.equals("GET /?001&_=1355946144421 HTTP/1.1")) {

ai dentro da chavetas metes a funçao que queres fazer, o arduino recebe isto

}

else if {readstring equals ("GET /?002&_=1355946144421 HTTP/1.1")) {

função

}

etc para todas.... 

 

Neste caso não é possível, pois a numeração final, sempre muda automatico, quero retornar apenas, os 3 primeiros numeros após o /?

GET /?001&_=1355946144421

já resolvi e ficou assim: 

int iniciofrente = linha.indexOf("?");

if(iniciofrente>-1){ //verifica se o comando veio
iniciofrente = iniciofrente+6; //pega o caractere seguinte
int fimfrente = iniciofrente+3; //esse comando espero 3 caracteres
String acao = linha.substring(iniciofrente,fimfrente);//recupero o valor do comando

Serial.println("Valor a tratar: ");
Serial.print(acao);

Tenho o mesmo problema preciso pegar parte do meu cliente.read() e nao estou conseguindo alguem consegue me ajudar abaixo segue meu codigo:

Tenho abaixo parte de um código do arduino é uma comunicação via browser. O char c que pega a informação do browser ele vem da seguinte forma por exemplo eu digito 192.168.1.119/S_vdown   ele retorna a seguinte informação na tela do client.print = "GET /S_vdown HTTP/1.1" esse é o valor do char "c". Então o que eu estou tentando fazer e nao consigo é criar uma variavel que peque somente o "S_vdown" eu preciso de uma variável semente com esta parte do texto. Se alguém puder me dar uma luz eu agradeço.

void setup(){
Ethernet.begin(mac, ip); // Inicia o Ethernet
Serial.begin(9600); // Inicia a comunicação Serial
}

void loop(){
EthernetClient client = server.available();// Criar uma conexão de cliente
if (client) {
while (client.connected()){
if (client.available()){
char c = client.read();
client.print(c);

if (readString.length() < 30)// ler caractere por caractere vindo do HTTP


readString += (c);// armazena os caracteres para string

}
if (c == '\n')//se o pedido HTTP terminou
{

readString="";//limpa string para a próxima leitura
client.stop(); // parar cliente
}
}
}
}
}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço