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?

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...