微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CircuitPython supervisor.runtime.serial_bytes_available 在阅读

如何解决CircuitPython supervisor.runtime.serial_bytes_available 在阅读

我正在处理一个涉及 Node 网站和 Adafruit 8x8 按钮矩阵的项目 使用 Feather M4 Express 微控制器和 CircuitPython。我正在尝试排序 通过 USB 在网站和按钮网格之间进行干净的串行通信。

这是我在微控制器上的电流回路,应该只是检查 用于串行输入,如果存在则打印。

while True:
    # the trellis can only be read every 17 millisecons or so
    trellis.sync()

    if supervisor.runtime.serial_bytes_available:
        data = input()
        print(data)

    time.sleep(0.02)

这适用于第一次迭代。问题是,在第一个 input() 调用之后, supervisor.runtime.serial_bytes_available 没有被重置为 False。 因此,在第二次迭代中,微控制器在 input() 处挂起,直到我发送它 串行的东西。每次后续迭代都会发生这种情况。

如何确保在我读取输入后将 supervisor.runtime.serial_bytes_available 设置回 False?

解决方法

supervisor.runtime.serial_bytes_available 为您提供 number 个字节以作为 int 读取,但仍可用作布尔值,其中零等于 Falseinput() 是否读取所有数据取决于您发送的数据,即 "a line\na partial line" 之类的数据将挂在第二行。您可以使用 sys.stdin.read() 读取任何数据,但您必须做一些额外的工作来合并/解析该数据。还需要注意行尾字符,您可能会在数据中找到像 CRLF 这样的序列。

根据你发送你可能会碰到一些问题,控制字符。对于有问题的 Control-C(0x03 导致 KeyboardInterrupt),根据 micropython.kbd_intr()

使用 Adafruit Forums: replace ctrl-c,e.g. by ctrl-g 可以禁用此功能

此处与 How to do non blocking usb serial input in circuit python?

中的问题/答案有一些重叠

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。