【发布时间】:2019-01-12 17:20:54
【问题描述】:
我有一个连接到 Raspberry Pi 的 Arduino,我正在使用 python 和串行从 Arduino 获取数据。我有 6 个传感器连接到 Arduino,但是当我从 pi 打印数据时,第一行总是 2 或 3 个传感器,然后所有 6 个传感器都打印出来。我将如何跳过从串口读取的第一行?
我的输出如下所示:
0 2 3
2 4 6 7 8 54
2 3 5 65 7 7
2 3 4 5 6 7
第一行总是少于 6 个传感器,并且值来自一个数组。因此,如果我要访问arr[4],它将超出范围。
这是python代码。我试图在不使用 while 循环的情况下执行此操作,我将创建另一个定期调用 sensorVals() 的函数来更新传感器值。我知道我可以使用循环,检查数组长度为 6 然后打印。
import serial
datetime.datetime.now()
ser=serial.Serial('/dev/ttyACM0',115200)
def sensorVals():
while True:
read_serial=ser.readline()
val= read_serial.decode()
val =val.strip()
row = [x for x in val.split(' ')]
if len(row) == 6:
sensor1 = row[0]
sensor2 = row[1]
sensor3 = row[2]
sensor4 = row[3]
sensor5 = row[4]
sensor6 = row[5]
print (sensor4)
sensorVals()
【问题讨论】:
-
只需添加类似
first = True的内容,然后在您的while 中执行:if first:(然后通过)、else:(然后是您的代码)。在if中,您需要更新first的值,以便在下一次循环迭代中输入else。 -
我试图不为此使用 while 循环。相反,我将创建另一个调用 sensorVals() 来获取传感器数据的函数。问题是第一行读取总是少于 6 个传感器,但之后它将全部是 6 个。所以我需要跳过第一行读取
-
无论如何,我给你的关于有一个变量来避免第一行处理的想法也适用于这种方法。
-
while True:,junk=ser.readline(),read_serial=ser.readline() -
@MarkSetchell 那不是每两行获取一次吗?
标签: python arduino raspberry-pi