[英]Adding sensor data to a list with Python
我正在做一個項目,我試圖將傳感器數據(溫度、濕度等)存儲在列表中。 我的程序是用 python 編寫的(我還是 Python 新手)。 我將以各種速率獲取傳感器樣本。 我希望將十個最近的傳感器樣本存儲在一個列表中,並取十個值的平均值。 這將有助於平滑來自傳感器的數據。
我無法讓它按照我想要的方式正確工作。 我的 output 一直在列表末尾附加一個傳感器讀數,而且只有一個。 我希望它不斷推出舊數據並將新數據帶入列表。 例如,如果給定的傳感器只采集了十個樣本,那么列表將如下所示 [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],以此類推。 任何幫助將不勝感激!
這是我嘗試使用 append 將傳感器數據添加到列表中的代碼,讓該列表僅包含十個最近的樣本,並定期計算這十個樣本的移動平均值。
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.