0
問題我有兩個IC其將連接到樹莓裨傳感器信號:如何處理這個多線程任務,與邏輯結構
- IC1發送每2秒他的數據作爲串行電報。
- IC2是在接收到某個控制信號後發送其數據的ADC。
我已經編寫了單獨的代碼,可以讓我從串行報文中提取測量值以及請求和接收ADC值,並且它們都可以正常工作。但是,他們阻止了我的主程序,我想同時獲得傳感器值。此外,在串行報文之間等待時,我想不斷總結ADC的輸出,並在收到報文時計算模擬數據的平均值。
此刻,我的平均值計算這樣進行:
class ADC():
# [...]
def startAvg(self):
self._recording = 1
interrupt = threading.Thread(target=self.stopAvg())
recording = threading.Thread(target=self._record())
recording.start()
interrupt.start()
return self._avgs
def _record(self):
sum1 = 0
sum2 = 0
counts = 0
while self.recording:
sum1 += ADC[0] # ADC channel 0
sum2 += ADC[1] # ADC channel 1
counts += 1
self._avgs = [ sum1/counts, sum2/counts ]
def stopAvg(self):
time.sleep(1)
self._recording = 0
我創建了一個虛擬函數,僅僅睡(stopAvg)來模擬一個串行報文的到來。後來,在我的主要課程中,應該從課外停止求平均值。但是,即使現在,在 stopAvg()完成後,_record()僅被稱爲。我的錯誤在哪裏?我已經閱讀了一些關於線程的教程,但我不知道如何將它應用於我的問題,尤其是平均。我知道它可以簡單地讓我的任務一個接一個地完成,但是我想得到平均值,以便我的信號中的峯值得到照顧。畢竟線程是正確的解決方案嗎?
我想我只是需要一個很好的建議,關於如何構造我的線程,因爲我從來沒有使用線程之前。