【问题标题】:Arduino I2C Wire master available read outputs -1 255 if slave sends less bytesArduino I2C Wire 主机可用读取输出 -1 255 如果从机发送更少的字节
【发布时间】:2014-05-01 11:55:44
【问题描述】:

我试过这个例子: http://arduino.cc/en/Reference/WireRead

但如果我从从机发送的字节数少于 6 个字节,主机仍会尝试读取所有 6 个字节,然后读取函数输出 -1/255。所以实际上可用的功能在这种情况下有点没用,我宁愿使用 for until 6.

知道我做错了什么或如何解决这个问题吗?我不能简单地过滤所有 255 个值,因为有时我会发送它们。我只是不明白这里的图书馆行为。

编辑:奇怪的是 read 函数返回一个 int,而不是一个字节。所以我可以看到它是 -1 还是 255。它肯定是 255 而不是 -1。如果我尝试阅读 7 次而不是使用可用功能,那么最后一次读数为 -1。从机发送错误的字节还是我可能需要上拉或这里发生了什么?

我的解决方案是读取直到读取为 -1,而不是使用可用函数。但必须有其他解决方案。

【问题讨论】:

    标签: arduino i2c


    【解决方案1】:

    虽然这看起来很尴尬,但这是预期的行为。 I2C 协议不提供从机的任何方法来结束请求的传输。 长度仅由Wire.requestFromquantity 参数定义。通过这种方式,主机决定并且必须知道从机将发送多少字节。 Wire.available 仅在达到之前给定的长度时发出信号。

    要提供可变长度的消息,您可以选择一个分隔符,例如 \0 用于字符串传输,或者在消息前面加上一个字节,存储后面的字节数,如果达到指定的数量,则停止读取。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多