努力从 UART 读取数据
Struggling reading data from UART
我最近才在 Python 开始编程,但我已经完成了我的第一个问题,那就是:
uart.readline()
我正在通过 UART 发送多行数据来控制家里的 LED 灯,所以我的想法是发送类似“r255”、“g255”、“b255”、“br5”的内容。发送的数据格式对我来说并不重要,重要的是获得 0-255 之间的红色、绿色和蓝色值以及 1-10 之间的亮度值,并以某种方式解码和处理 Python 中的数据。顺便提一句。我正在从我的 Android 应用程序发送数据,格式和这方面的一切都应该没问题。
但问题来了。我有一个代码如下:
uart = UART(0,9600)
while True:
if uart.any():
data = uart.readline()
print(data)
这个 returns 红色值是这样的:
b'r'
b'2'
b'5'
b'5'
这对我来说很好,我理解为什么会这样。我可能会弄清楚如何将数据放在一起,以便它们有意义并与它们一起使用,但问题是每一行实际上都在经历另一个循环,所以我不能在 while 循环中真正执行任何操作来将数据放在一起,或者我可以吗?
如果我尝试这样的事情:
while True:
if uart.any():
data = uart.readline()
data2 = uart.readline()
data3 = uart.readline()
print(data)
print(data2)
print(data3)
我得到:
b'r'
None
None
这个问题的解决方案是什么?我错过了一些非常明显的东西吗?为什么我不能在该循环中阅读超过一行?为什么循环总是要重复读取另一行?我该如何处理才能将数据整合在一起?我试过 uart.read() 但它总是 returns 像 b'red2' b'55' 或 b'red255' 或 b'red' b'255' 这样的东西,所以它更加混乱并且太多了,我无法理解那里发生了什么。
出于显而易见的原因我无法对此进行测试,但这应该可以解决在每个 uart.readline()
之前不调用 uart.any()
的问题。我定义了一个单独的函数来执行此操作并多次调用它。
import time
import uart
def read_line():
while not uart.any():
time.sleep(0.0001)
return uart.readline()
while True:
lines = [read_line() for _ in range(3)] # Read 3 lines.
print(b''.join(lines)) # Join them together.
我最近才在 Python 开始编程,但我已经完成了我的第一个问题,那就是:
uart.readline()
我正在通过 UART 发送多行数据来控制家里的 LED 灯,所以我的想法是发送类似“r255”、“g255”、“b255”、“br5”的内容。发送的数据格式对我来说并不重要,重要的是获得 0-255 之间的红色、绿色和蓝色值以及 1-10 之间的亮度值,并以某种方式解码和处理 Python 中的数据。顺便提一句。我正在从我的 Android 应用程序发送数据,格式和这方面的一切都应该没问题。
但问题来了。我有一个代码如下:
uart = UART(0,9600)
while True:
if uart.any():
data = uart.readline()
print(data)
这个 returns 红色值是这样的:
b'r'
b'2'
b'5'
b'5'
这对我来说很好,我理解为什么会这样。我可能会弄清楚如何将数据放在一起,以便它们有意义并与它们一起使用,但问题是每一行实际上都在经历另一个循环,所以我不能在 while 循环中真正执行任何操作来将数据放在一起,或者我可以吗?
如果我尝试这样的事情:
while True:
if uart.any():
data = uart.readline()
data2 = uart.readline()
data3 = uart.readline()
print(data)
print(data2)
print(data3)
我得到:
b'r'
None
None
这个问题的解决方案是什么?我错过了一些非常明显的东西吗?为什么我不能在该循环中阅读超过一行?为什么循环总是要重复读取另一行?我该如何处理才能将数据整合在一起?我试过 uart.read() 但它总是 returns 像 b'red2' b'55' 或 b'red255' 或 b'red' b'255' 这样的东西,所以它更加混乱并且太多了,我无法理解那里发生了什么。
出于显而易见的原因我无法对此进行测试,但这应该可以解决在每个 uart.readline()
之前不调用 uart.any()
的问题。我定义了一个单独的函数来执行此操作并多次调用它。
import time
import uart
def read_line():
while not uart.any():
time.sleep(0.0001)
return uart.readline()
while True:
lines = [read_line() for _ in range(3)] # Read 3 lines.
print(b''.join(lines)) # Join them together.