Pessoal vou compartilhar com vcs uma função onde é possivel  verificar se qualquer  palavra que vc deseja esta em uma frase qualquer Ex.:

vc recebe ou escreve na serial algo tipo: "lfldkjlsensor perssionado led onkjkglegfl" ou

"lfldkjlsensor perssionado kjkglegflled on" ou "led onlfldkjlsensor perssionado kjkglegfl", tanto faz

e vc quer saber se o led é on ou off, a função te retorna 0 ou 1, verdadeiro ou falso.

 Segue o exemplo:

String txt="";

String txtOn="led on";
String txtOff="led off";

void setup() {

Serial.begin(9600);

pinMode(13,OUTPUT);



}


void loop() {

while(Serial.available()<=0);

while(Serial.available()>0){

txt+=(char)Serial.read();

}


if(txtFind(txt,txtOn)==1){ digitalWrite(13,HIGH); txt="";}

if(txtFind(txt,txtOff)==1){ digitalWrite(13,LOW); txt="";}


}


/** FUNÇÃO QUE VERIFICA SE A PALAVRA DESEJADA ESTA NA FRASE **/

boolean txtFind(String txt, String txtVer ){


char txtChar [int (txtVer.length())-1]; // ARRAY PARA ARMAZENAR OS CARACTERES ENCONTRADOS
String finds=""; // STRING FINAL


// FOR QUE MOSTRA LETRA POR LETRA DA FRASE

for(int j=0; (j+txtVer.length())-1<txt.length(); j++){


// VERIFICA SE A LETRA É IGUAL A DA DESEJADA

if(txt.charAt(j)==txtVer.charAt(0)){

// ARMAZENA AS PROXIMAS LETRAS PARA COMPARAR

for(int k=j; k<(j+txtVer.length()); k++){
finds+=txt.charAt(k); // ARMAZENA EM UMA STRING
}

// VERIFICA SE A STRING ARMAZENADA É IGUAL A DESEJADA

if(finds==txtVer){ return(true); } // SE SIM RETORNA VERDADEIRO 1
finds="";

}

}

return(false); // SE NÃO RETORNA FALSO 0
}

Exibições: 1909

Responder esta

Respostas a este tópico

Sem querer desmerecer seu trabalho, mas acho que esta reinventando a roda. Da uma olhada nisso: http://arduino.cc/en/Tutorial/StringSubstring

Entendo, um dos problemas dessa função é que vc tem que indicar em que posição começa e termina, a menos que esteja no final, isso nao é viavel quando vc recebe varias informações aleatorias sem conhecimento prévio do tamanho e ordem da string pela serial, ou seja essa função indica se a sub string esta na string esteja ela em qualquer posição.

 No próprio link da função diz:

"Atenção: certifique-se seus valores de índice são de comprimento da corda ou você vai ter resultados imprevisíveis. Este tipo de erro pode ser particularmente difícil de encontrar com a segunda instância do substring () se a posição inicial é menor do que o comprimento da corda, mas a posição final não é."

Da string.h:

  • char* strpbrk( const char* dest, const char* str );
Retorna o primeiro caractere que está em ambas strings recebidas, ou NULL se não existe caractere comum.
  • char *strstr( const char* str, const char* substr );
Retorna um ponteiro que indica a primeira ocorrencia da string 'substr' na string 'str'.

Muito boa a sua função.Parabéns !!

Seria bom se todos nós pudéssemos criar as nossas próprias funções de acordo com nossas necessidades.

Você pode, nada impede de faze-lo, as funções para tratar char, muitas vezes, realmente eu tenho que refazer, pois incluir uma lib inteira, para o uso em um momento apenas é perda de espaço de memória...

Quando vc inclui uma lib no seu programa o linker não inclui todas as funções da lib no programa compilado, mas sim apenas aquelas as quais vc usa. Assim, tanto faz usar a lib ou refazer a função, pelo menos do ponto de vista da memória consumida.

Legal, acho q entendi errado o lance de incluir libs, vou tentar rever o que ocorreu, quando fiz isso e o tamanho do programa excedeu o tamanho da memória do ATMEGA

Pessoal a intenção é dar suporte ao pessoal que esta iniciando na plataforma arduino e

respectivamente a sua programação e não inventar nada, ultimamente a procura de ajuda nesse segmento

esta intensa e como uma forma de ajudar eu estou postando esse código, quem puder ajudar tbm blz Att

Talvez meu post tenha soado "agressivo", se foi o caso, desculpas.

Concordo plenamente com a intencao de ajudar e acho que todos devemos fazer isso (estou em divida nessa parte).

Mas, na minha opiniao, aprender a programar em uma linguagem inclui aprender a usar corretamente as bibliotecas e gastar tempo com o que realmente importa: a logica do programa.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço