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!! :)
Tags:
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..
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
}
}
}
}
}
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por