簡體   English   中英

使用 Python 將傳感器數據添加到列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM