2

我正在做一个涉及 Node 网站和使用 Feather M4 Express 微控制器和 CircuitPython 的 Adafruit 8x8 按钮矩阵的项目。我正在尝试通过 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?

4

1 回答 1

1

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

根据您发送的内容,您可能会遇到控制字符的一些问题。这可以根据Adafruit 论坛使用micropython.kbd_intr()0x03禁用有问题的 Control-C(导致) :替换 ctrl-c,例如通过 ctrl-gKeyboardInterrupt

这里与如何在电路 python 中进行非阻塞 USB 串行输入中的问题/答案有一些重叠?

于 2021-04-11T14:47:08.193 回答