【发布时间】:2016-01-23 03:32:38
【问题描述】:
我正在使用 GPIO 库为树莓派创建一个 python 程序,并使用它来控制 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 函数执行需要时间,而 sleep 函数不是很准确。因此,由于歌曲是由外部程序连续播放的,一分钟左右后 LED 会明显偏离音乐。
python 中是否有任何东西,可能使用某种多线程,可以让我准确地保持计时器运行?
【问题讨论】:
-
您必须计算睡眠时间,使其适应设置 LED 所需的时间。基本上计算到所需的唤醒点并睡那么久的时间。
标签: python timer raspberry-pi