2016-01-23 75 views
0

我正在爲使用GPIO庫的樹莓派創建一個python程序,並使用它來控制LED閃爍到音樂。儘管如此,我仍然無法保持閃爍和音樂同步。我當前的代碼:Python準確定時器,用於在Rasberry Pi上切換LED

for wval, bval, gval, yval, rval in data_gen: 
    set_leds(whites, wval) 
    set_leds(blues, bval) 
    set_leds(greens, gval) 
    set_leds(yellows, yval) 
    set_leds(reds, rval) 
    sleep(GRAPH_TIME) 

在這段代碼,

  • GRAPH_TIME是LED的以秒計的刷新率。目前設置爲0.01,給我100Hz的刷新率。
  • data_gen是一個nx5x3數組,其中n表示歌曲的長度(以秒爲單位)除以GRAPH_TIME。5x3表示每種顏色5種顏色和3個LED。每個條目都是從0到100,代表LED的值。這些是通過將歌曲分成n個部分,然後在每個部分上執行fft並將結果分離以獲得LED的值來實現的。
  • set_leds是一種將某種顏色的所有LED設置爲各自的值的功能。

這個問題,你可以猜到,set_led函數需要時間來執行,睡眠函數不是很準確。因此,由於該歌曲是由外部程序連續播放的,所以在一分鐘左右之後LED就會明顯偏離音樂。

Python中是否有任何東西,也許使用某種多線程,可以讓我準確地保持定時器運行?

+1

你有那麼它適應於設置LED所花費的時間來計算睡眠時間。基本上計算直到理想的喚醒點和睡眠時間的時間。 –

+0

相關:[如何在python中定期運行函數](http://stackoverflow.com/q/24174924/4279) – jfs

回答

0

使線程做到這一點:

import threading 

def blabla: 
time.sleep (1) 

thread = threading.Thread(target=blabla)#set the target to the function we made 
thread.start()#start thread