我正在尝试让 LED 灯随着特定歌曲的节拍闪烁。这首歌恰好有 125 bpm。
我编写的代码一开始似乎可以工作,但它运行的时间越长,LED 闪烁和下一节拍开始之间的时间差异就越大。 LED 似乎闪烁得有点太慢了。
我认为发生这种情况是因为 lastBlink 有点依赖于之前发生的闪烁来保持同步,而不是使用一个静态初始值来同步到...
unsigned int bpm = 125;
int flashDuration = 10;
unsigned int lastBlink = 0;
for(;;) {
if (getTickCount() >= lastBlink+1000/(bpm/60)) {
lastBlink = getTickCount();
printf("Blink!\r\n");
RS232_SendByte(cport_nr, 4); //LED ON
delay(flashDuration);
RS232_SendByte(cport_nr, 0); //LED OFF
}
}
最佳答案
将值添加到 lastBlink
,而不是重新读取它,因为 getTickCount
可能跳过了比想要等待的确切节拍更多的内容。
lastblink+=1000/(bpm/60);
关于c++ - 每 x 秒运行一次代码,无论在循环内执行多长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35468032/