Arduino 到 Python:如何使用 ser.readline() 将读数导入到具有指定起点的列表中?
Posted
技术标签:
【中文标题】Arduino 到 Python:如何使用 ser.readline() 将读数导入到具有指定起点的列表中?【英文标题】:Arduino to Python: How to import readings using ser.readline() into a list with a specified starting point? 【发布时间】:2017-01-08 08:05:35 【问题描述】:这是一个非常具体的问题,请多多包涵。
我有 14 个超声波传感器连接到 Arduino,将实时读数发送到串行监视器(或插入时的 Pi)。读数按如下方式发送,每 2 位数字之间换行(Z 除外)。
Z 62 61 64 63 64 67 98 70 69 71 90 XX 75 XX
这些尺寸以厘米为单位。 “XX”表示读数超出两位数范围。 Z 已被指定为起点,因为 pi 非常快速且重复地读取传感器,达到 80 秒左右读数的点。所以 ser.readline() 给出了相同传感器的多个样本
当 python 读取 ser.readline() 中的读数时,它没有起点。它可能从 70、XX 或 Z 开始。我想将它分配到一个可访问的列表中,以便:
数组 [0] = Z (总是)
数组 [1] = 62 (前两位数)
数组 [2] = 61 (后两位数)
..
数组[14] = XX (第十四二位数)
这是我的代码,不幸的是由于列表超出范围而无法正常工作:
import serial
ser = serial.Serial('/dev/ttyACM0',115200)
print ("Start")
overallcount=1 #initialise 2 counters
arraycount =1
array = [] #initialise 2 lists
line = []
while True:
while overallcount<30: #read 30 random readings from Arduino
ser.readline()
print(str(overallcount)) #print reading number
while arraycount<15: #Number of readings to fill the array to be made
for line in ser.readline():
if line == 'Z': #If element in ser.readline is "Z"
array[0] == line #Assign first list element as Z (starting point)
arraycount=arraycount+1 #Iterate through until 14 sensors are read
arraycount=1 #reset counter
overallcount=overallcount+1 #Iterate through 30 random Arduino readings
overallcount=1 #iterate random counter
如果你能告诉我我做错了什么,或者如果有更好的方法,我真的很感激!
谢谢
【问题讨论】:
【参考方案1】:这个怎么样?请注意,您的检查overallcount
import serial
ser = serial.Serial('/dev/ttyACM0',115200)
readings = [] # Array to store arrays of readings
reading_id = 1 # Id of current reading
random_lines_expected = 30 # NUmber of random lines
num_sensors = 14 # Number of sensors
def read_random():
for _ in range(random_lines_expected):
ser.readline()
read_random() # Read initial random lines
while True:
print "Reading #", reading_id
reading = [] # Initialize an array to collect new reading
while ser.readline().strip() != 'Z': # Keep reading lines until we find 'Z'
pass
reading.append('Z') # Add Z to reading array
for _ in range(num_sensors): # For 14 sensors...
reading.append(ser.readline().strip()) # Add their value into array
readings.append(reading) # Add current reading to the array or readings
reading_id += 1 # Increment reading ID
#read_random() #Uncomment this if random follows each series of readings
【讨论】:
非常感谢您!它没有错误,我已经通过打印阅读对其进行了测试。愿你有一个美好的一天先生/女士 太好了,因为我还没有尝试运行它。另外,你能接受答案吗?谢谢,祝你的项目好运!以上是关于Arduino 到 Python:如何使用 ser.readline() 将读数导入到具有指定起点的列表中?的主要内容,如果未能解决你的问题,请参考以下文章
Pyqt5 接口 Arduino 伺服 ErrorType“对象没有属性‘ser’”
python里 serial.write()输出到另一端时是啥格式的 比如说我用ser