【发布时间】:2016-08-05 20:49:04
【问题描述】:
我正在做一个项目,我使用我构建的手机应用程序来使用谷歌的语音识别器,通过蓝牙将我的手机与我的 Arduino 连接,然后当我说一个词时,它会发送这个词以显示它在 LCD 中。
手机应用程序运行良好,没有任何问题。问题出在 Arduino 代码中。例如,当我说 hello 这个词时,Arduino 会收到 ello。我知道它会收到它,因为我还使用串行监视器在我的电脑屏幕上显示数据,除了 LCD。然后在 Arduino 收到第一块数据后,如果我发送第二个词,如 world,Arduino 会收到 elloorld。所以它不仅再次错过了单词的第一个字母,而且串行端口在循环结束时也没有为空。
我尝试使用data += c; 而不是data.concat(c);,不同之处在于第二个单词不是elloorld,它只是 orld
这是我的代码:
#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 = "";
}
如果在循环结束时我尝试使用以下代码清理串行端口:
while(Serial.available() > 0){
Serial.read();
}
然后arduino根本不接收数据。
【问题讨论】:
-
如果你把那个 android SpeechToText 移除到蓝牙噱头并用 SerialMonitor 测试它会怎样?
-
它会死掉 3 秒,直到您清除数据并重新开始。这个可以吗?这是有原因的吗?
-
如果我断开蓝牙模块并使用串行监视器,它会显示整个单词,但最后会添加 2 ΞΞ 。即你好ΞΞ。
-
延迟功能只是在 3 秒内看到 lcd 中的单词。我应该用标志来代替,以免使用延迟吗?
-
helloΞΞ 可能显示了 SerialMonitor 添加的 CR / LF - 您可以在 SerialMonitor 中控制它
标签: bluetooth arduino serial-port arduino-uno