我正在尝试使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);