我正在创建一个可以通过Android应用程序控制的基于Arduino的无人机。 为了改善用户体验,我想在应用程序上显示加速计/指南针传感器的值,因此我需要通过蓝牙将它们从Arduino发送到Android。值是0到180之间的简单整数。
我认为最好的解决方案是在一个字符串中连接所有值(用逗号分隔),并将其发送到应用程序,这将分隔单个值(字符串将仅在应用程序需要时发送,在这种情况下,当Arduino收到' z&#39字节时。
if (Serial.available() > 0) {
if (Serial.read()=='z'){
Serial.println(String((int)sensor1) + ',' + String((int)sensor2) + ',' + String((int)sensor3));
}
}
以下是App Inventor块:
似乎接收到的值非常好,但是存在一个关键问题:某些时候字符串收不好,导致很多错误。有时收到的字符串是(例如)10,10,10,但有时候是10,10,1010或者只有10,10 ecc ...
我也尝试逐个发送值,但结果几乎相同。 我甚至试图设置' numberOfBytes'使用分隔符字节到-1,但遗憾的是,这也不成功。
我非常生气,所以我希望还有另一种方法可以将thoose整数发送到Android,或修复我已经使用过的系统。
答案 0 :(得分:0)
问题是你没有发信号通知字符串的结尾 我在一个项目中使用了他的例子,就像这样:
while(Serial.available()>0){
Serial.println(String((int)Sensor1) + ',' + String((int)Sensor2)+ ',');
}
如果你比较两个代码,差异将是“,”在打印结束时最多,它解决了你的问题
答案 1 :(得分:0)
我使用Serial.print发送每个结果,然后使用Serial.write('>');
作为结束标记。
在appinventor
设计器窗口中,将Bluetooth客户端的Delimiter字节设置为62(>字符的ASCII值)。
在“块”窗口中,使用蓝牙cliant1.Receive
文本并将字节数设置为-1
App将读取,直到找到分隔符。
但是,如果找不到该应用,它将导致该应用挂起。