2016-01-23 81 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