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