arduino正在使用HC-05与Android设备通信。使用串行蓝牙终端应用程序发送数据。
SoftwareSerial BT(10, 11); //TX, RX respetively
String readdata;
char c = "" ;
void setup() {
BT.begin(9600);
Serial.begin(9600);
Serial.println("Waiting for command...");
}
//-----------------------------------------------------------------------//
void loop() {
if (BT.available() > 0) { //Check if there is an available byte to read
delay(10); //Delay added to make thing stable
c = BT.read(); //Conduct a serial read
readdata.concat(c); //build the string- "forward", "reverse", "left" and "right"
Serial.println(readdata);
}
if (readdata.length() > 0) {
if (readdata == "Up")
{
Serial.println("Hello there");
}
readdata = "";
}
}
[Serial Monitor][1]
It shows a random character for any input
[1]: https://i.stack.imgur.com/nhTh5.png
答案 0 :(得分:0)
首先,您需要检查所看到的垃圾的模式。如果您无论输入如何随机查看字符,那么您应该检查物理连接和应该提供输入数据的蓝牙对应SW。然后,如果您在输出中看到输入的顺序,那么您
在行readdata = "";
中创建了问题。在上面的if
语句中,只调用了一次read()
函数,您永远不能保证在第二个if
语句中获取整个命令字符串。此外,缓冲区重置为空。
如果你想简单地解决这个问题,除非Arduino和其他设备之间的连接和接口有任何问题(我不知道),然后用if
更改while
语句loop()
并将Serial.println(readdata)
移出while语句,如下所示。
while (BT.available() > 0) { //Check if there is an available byte to read
delay(10); //Delay added to make thing stable
c = BT.read(); //Conduct a serial read
readdata.concat(c); //build the string- "forward", "reverse", "left" and "right"
//Serial.println(readdata);
}
Serial.println(readdata);
或者,您也可以使用BT.readline()
代替while
,BT.read()
和readdata.concat(c)
,如下所示。我推荐这个,因为根据我的经验,上述解决方案仍然存在缺陷。
if (BT.available() > 0) {
readdata = BT.readline();
}
我不知道你是否在每个命令结束时期待新线路。然后你最好选择第二个选项。如果你为每个命令使用另一个终结符,那么你应该在第一个选项中的read()函数调用之后发出另一个if
语句。