我正试图让某个歌曲的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
}
}
Run Code Online (Sandbox Code Playgroud)
小智 3
添加值lastBlink
,而不是重新读取它,因为getTickCount
可能跳过的节拍数量超过了想要等待的确切节拍数量。
lastblink+=1000/(bpm/60);
Run Code Online (Sandbox Code Playgroud)