CircuitPython supervisor.runtime.serial_字节_在读取后仍然为真

CircuitPython supervisor.runtime.serial_字节_在读取后仍然为真,python,stdin,adafruit,adafruit-circuitpython,Python,Stdin,Adafruit,Adafruit Circuitpython,我正在做一个项目,涉及一个节点网站和一个Adafruit 8x8按钮矩阵 使用Feather M4 Express微控制器和CircuitPython。我正在努力分类 通过USB在网站和按钮网格之间进行干净的串行通信 这是我在微控制器上的电流回路,应该只是检查一下 用于串行输入,如果存在,则打印 while True: # the trellis can only be read every 17 millisecons or so trellis.sync() if

我正在做一个项目,涉及一个节点网站和一个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\u bytes\u available
未重置为False。 因此,在第二次迭代中,微控制器挂起在
input()
连载的东西。这会发生在接下来的每一次迭代中

我如何确保在读取输入后,
supervisor.runtime.serial\u bytes\u available
将被设置回False?

提供了作为
int
读取的字节数,但仍然可以用作零等于
False
的布尔值。它将取决于您发送的数据,
input()
是否读取所有数据,即像
“一行\n一部分行”
这样的数据将挂在第二行。您可以使用
sys.stdin.read()
读取任何数据,但是您需要做一些额外的工作来合并/解析这些数据。还需要注意行尾字符,您可能会在数据中找到类似
CRLF
的序列

根据您发送的内容,您可能会遇到一些控制字符问题。对于有问题的控件-C(
0x03
导致
键盘中断
),可以根据使用禁用此选项

这里与中的问题/答案有些重叠