当我尝试在蓝牙后立即将命令字符串从Android发送到Arduino时
连接已建立,Arduino 不发送响应字符串[我认为也许
Arduino一无所获]。
但是如果我在写方法之前放一个 Thread.sleep(1000( 方法,它可以工作......
问题出在哪里?
我是否正在尝试在蓝牙连接设置尚未之前发送消息
准备?
可以这样想:乒乓球发生得太快,以至于球丢失了。
如果在读取之前写入和在写入之前读取,则会发生错误并且字符串将丢失。
所以是的,解决这个问题的一种方法是在两者之间留一些时间,比如 Thread.sleep
详细:
所以发生这种情况是因为你的arduino
仍然sending
,因为它没有认识到你的android
实际上收到了。 在该thread.sleep (1000)
期间,您的arduino
识别出android
已收到并更改为receive
模式。这就是为什么一秒钟后可以从您的arduino
中读取字符串的原因。
如果需要,您可以循环发送,以便arduino尽快接收。但是,循环可能会带来某些情况,例如接收冗余字符串。
但是如果我在写方法之前放一个 Thread.sleep(1000( 方法
尝试在 Thread.sleep 之后执行多次写入,以检查问题是否仅在建立连接的正确时刻发生,还是在每次写入时发生!
无论如何,根据我的经验,我会警告你一些事情:
- 波特率太高,请尝试降低它。
- 请注意一些便宜的Arduino蓝牙模块,它不实现任何类型的I/O缓冲。
- 从Arduino上的应用程序读取数据的部分正在做一些需要时间的事情(如I/O操作(,或者只是它做了太多的事情,所以串行上的一些数据丢失了(一旦它发生在我身上(。
- 请注意,如果您使用的是低功耗蓝牙,则限制为 20 字节!如果您发送更多数据,它将丢失。
你的一段代码会很有用!