如何解决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
读取,但仍可用作布尔值,其中零等于 False
。 input()
是否读取所有数据取决于您发送的数据,即 "a line\na partial line"
之类的数据将挂在第二行。您可以使用 sys.stdin.read()
读取任何数据,但您必须做一些额外的工作来合并/解析该数据。还需要注意行尾字符,您可能会在数据中找到像 CRLF
这样的序列。
根据你发送你可能会碰到一些问题,控制字符。对于有问题的 Control-C(0x03
导致 KeyboardInterrupt
),根据 micropython.kbd_intr()
此处与 How to do non blocking usb serial input in circuit python?
中的问题/答案有一些重叠版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。