使用 Python 将传感器数据添加到列表中



我正在做一个项目,我试图将传感器数据(温度、湿度等(存储在列表中。 我的程序是用python编写的(我仍然是Python的新手(。 我将以不同的速率提供传感器样本。 我希望将十个最新的传感器样本存储在一个列表中,并取十个值的平均值。 这将有助于平滑来自传感器的数据。

不过,我无法让它以我想要的方式正确工作。 我的输出不断将一个传感器读数附加到列表的末尾,并且只有一个。 我希望它继续推出旧数据并将新数据带入列表。 例如,如果给定的传感器只采集了十个样本,那么列表将如下所示 [1,2,3,4,5,6,7,8,9,10],然后第 11 个样本将从传感器进入,它将变为 [2,3,4,5,6,7,8,9,10,11],然后是第 12 个 [3,4,5,6,7,8,9,10,11,12] ,依此类推。 任何帮助将不胜感激!

以下是我尝试用于将传感器数据附加到列表中的代码,使该列表仅包含十个最新样本,并定期计算这十个样本的移动平均值。

import time
import spidev
def getReading(channel):
rawData = spi.xfer([1,(8+channel)<<4,0])
processesData = (rawData[1]&3)<<8)+rawData[2]
return processedData
voltage = (getReading(7)/1023.0)*3.3
readings = []
reading = round(voltage, 2)
max_samples = 10
def mean(nums):
return float(sum(nums)) / max(len(nums), 1)
avg = mean(readings)
while True:
print ('current average = ' , avg)
print ('readings used for average' , readings)

readings.append(reading) 
if len(readings) == max_samples:
readings.pop(0)

print ('readings saved for next time:' , readings)

time.sleep(10)

如果你每次都想要一个新的读数,那么对getReading的调用不应该在循环中吗?像这样:

import time
import spidev
def getReading(channel):
rawData = spi.xfer([1,(8+channel)<<4,0])
processesData = (rawData[1]&3)<<8)+rawData[2]
return processedData

readings = []
max_samples = 10
def mean(nums):
return float(sum(nums)) / max(len(nums), 1)

while True:
voltage = (getReading(7)/1023.0)*3.3
reading = round(voltage, 2)
readings.append(reading) 
avg = mean(readings)     
print ('current average = ' , avg)
print ('readings used for average' , readings)
if len(readings) == max_samples:
readings.pop(0)

print ('readings saved for next time:' , readings)

time.sleep(10)

最新更新