嘿,伙计们,我正在通过Arduino向我的树莓派发送测压传感器数据。Arduino将数据以块的形式发送到串行,如下所示:
0,0
2,3
5,6
0,0 所以我想要做的是使用split函数和下面的python代码将左边的读数从右边的读数中分离出来:
import serial
ser = serial.Serial('/dev/ttyACM0',9600)
while True:
read_serial=ser.readline()
x = read_serial
y = x.split(",")
left = y[0]
right = y[1]
print(left)
print(' ')
print(right)我得到以下错误:
File "arduino_communication.py", line 10, in <module>
right = y[1]
IndexError: list index out of range当我注释掉这一行,也注释掉了right = y[1]时,我得到了左侧称重元件的正确读数。所以我有点不确定为什么我不能得到正确的称重单元(它已经被拆分到一个数组的位置1)
发布于 2020-08-08 17:02:41
可能串行数据没有逗号或空字符串。拆分前打印x。
如果有时串行数据没有逗号或空字符串,请使用try/except。
try:
y = x.split(",")
left = y[0]
right = y[1]
except IndexError:
right = 0(or use the other value)发布于 2020-10-01 02:31:14
我认为问题在于您的python脚本试图读取序列行的速度比arduino写入值的速度要快,这意味着有时python脚本会将序列作为空字符串读取,就像这样:'‘。
如果您将所有代码放在try/block中,则只有当arduino实际写入了一些值时,代码才会运行。
希望这能对你有所帮助:
while True:
try:
read_serial=ser.readline()
x = read_serial
y = x.split(",")
left = y[0]
right = y[1]
print(left)
print(' ')
print(right)
except Exception as e:
raisehttps://stackoverflow.com/questions/63313470
复制相似问题