O que esta errado?
Digito a palavra TESTANDO no Serial Monitor e clico "enviar", mas na hora do Arduino processar o código que escrevi usando a função Serial.available() o mesmo informa pro Arduino que tem apenas um caracter disponível na primeira passada no loop do programa.
O Arduino roda o loop do programa uma vez e mostra apenas a primeira letra "T" da palavra que esta no buffer. Ele tem que rodar uma segunda vez para completar a palavra, ai ele mostra de uma só vez o restante da palavra "ESTANDO".
Resultado que aparece no Serial Monitor, rodando o programa abaixo e enviando a palavra TESTANDO para o Arduino processar.
Qtde caracteres a serem lidos na serial:1
Palavra do buffer: T
Qtde caracteres a serem lidos na serial:7
Palavra do buffer: ESTANDO
Já tentei de tudo q é forma e não estou conseguindo entender o pq?
Deem uma olhada no código abaixo:
char palavraSerial[20];
char caracterBufferSerial;
int qtdeCaracter;
int nI=0;
byte imprimePalavra=0;void setup()
{
Serial.begin(9600);
}void loop()
{// Verifica quantos caracteres tem disponivel na serial para serem lidos
qtdeCaracter= Serial.available();// Se existir algum informa na tela a quantidade
if( qtdeCaracter > 0 )
{Serial.print( "Qtde caracteres a serem lidos na serial:" );
Serial.println( qtdeCaracter );
delay( 2000 );
}
// Laço pra ler caracter por caracter e armazenar em uma matriz
while( nI < qtdeCaracter )
{
// Lê o caractere da vez no buffer da serial
caracterBufferSerial = Serial.read();
// Monta a palavra que esta na serial dentro da matriz "palavraSerial[]"
// caractere por caractere
palavraSerial[nI] = caracterBufferSerial;
// incremente o contador
nI++;
// Variavel de controle para impressão da palavra recebida pela serial
imprimePalavra=1;
}// Zera o contador após sair do loop acima
nI=0;
// Verifica se entrou no loop acima para imprimir a palavra recebida pela serial
if( imprimePalavra )
{
Serial.print( "Palavra do buffer: " );
Serial.println( palavraSerial );
Serial.println("");
// Laço para zerar o conteúdo da matriz "palavraSerial"
for( int nJ=0; nJ<20; nJ++ )
{
// Zera a matriz "palavraSerial"
palavraSerial[nJ]=0;
}
// Após a impressão da palavra recebida na serial, desliga a variável de
// controle de impressão
imprimePalavra=0;
}
}
Tags:
Ve este codigo e compara com o teu... basicamente fazem a mesma coisa... este esta a funcionar... ;)
void setup() {
Serial.begin(9600);
}
/**
* Função que lê uma string da Serial
* e retorna-a
*/
String leStringSerial(){
String conteudo = "";
char caractere;
// Enquanto receber algo pela serial
while(Serial.available() > 0) {
// Lê byte da serial
caractere = Serial.read();
// Ignora caractere de quebra de linha
if (caractere != '\n'){
// Concatena valores
conteudo.concat(caractere);
}
// Aguarda buffer serial ler próximo caractere
delay(10);
}
Serial.print("Recebi: ");
Serial.println(conteudo);
return conteudo;
}
void loop() {
// Se receber algo pela serial
if (Serial.available() > 0){
// Lê toda string recebida
String recebido = leStringSerial();
}
}
Valeu Pedro
O seu funcionou sem problema, agora vou comparar com o meu pra saber o q q tava pegando.
Esse Arduino tem q fazer o q eu mando e não o q ele quer.... rrrssssss...
Cara..as vezes eu também acho que meu Arduino tem vida própria...rsrsrrsrs
Provavelmente e muito claro...(não vi seu código direito)..."println"(responsável pela quebra de linha) no lugar do simples "print"..
Abração e boa sorte!!!
Pois é Rubens,
Estou domando meu Arduino devagarzinho, afinal "AQUI QUEM MANDA SOU EU" hahahaha.
Quanto ao código dei uma otimizada como o Pedro sugeriu, separei em uma função, deixei o void loop enxuto, só quando tem algo na serial que vou pra função.
Mas o que tava pegando mesmo e pelo que entendi após várias pesquisas é que a função serial.available() tem q ter um retardo usando a função delay(), se não o Arduino atropela as informações que estão chegando na serial, vi em outras explicações que a velocidade de processamento do Arduino é bem superior ao processamento da porta serial. Bom pelo menos foi o que eu entendi.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por