Estou trabalhando em um projeto no qual uso um telefoneaplicativo que eu criei para usar o Speech Recognizer do Google, conecte meu telefone ao meu Arduino via Bluetooth e, quando digo uma palavra, ela envia a palavra para exibi-la em um LCD.
O aplicativo do telefone funciona muito bem, sem problemas. O problema está no código do Arduino. Quando eu digo a palavra Olá por exemplo, o Arduino recebe ello. Eu sei que ele recebe porque eu também usoo monitor Serial para exibir os dados na tela do meu computador, exceto o LCD. Depois que o Arduino receber o primeiro pedaço de dados, se eu enviar uma segunda palavra como mundo Arduino recebe elloorld. Portanto, não apenas perde novamente a primeira letra da palavra, mas também a porta serial não a esvazia no final do loop.
Eu tentei com data += c;
ao invés de data.concat(c);
e a diferença é que a segunda palavra não é "t elloorld e é apenas orld
Aqui está o meu código:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 9, 8, 7, 6, 5, 4, 3, 2);
char c;
String data = "";
void setup() {
lcd.begin(16, 2);
Serial.begin(9600);
}
void loop() {
lcd.clear(); //clean the lcd
lcd.home(); // set the cursor in the up left corner
while(Serial.available() > 0){
c = Serial.read();
data.concat(c);
}
if(data.length() > 0){
Serial.println(data);
}
lcd.print(data);
delay(3000);
data = "";
}
Se no final do loop eu tentar limpar a porta serial com este código:
while(Serial.available() > 0){
Serial.read();
}
Então o arduino não recebe dados.
Respostas:
1 para resposta № 1Seu código é ativado a cada 3000 ms, depois processa tudo o que está pendente no buffer de entrada serial e adormece novamente.
Se você remover os dados feios da String, o atraso feio (3000) e o tempo desnecessário, tente este loop simples:
unsigned long lastreceived;
void loop() {
if (Serial.available()) {
lcd.write(Serial.read());
lastreceived=millis();
}
if (millis() - lastreceived > 1000) {
// after one second of silence, prepare for a new message
lcd.clear();
lcd.home();
lastreceived=millis(); // don"t clear too often
}
}