无论循环内执行多长时间,每x秒运行一次代码

For*_*vin 5 c++ loops

我正试图让某个歌曲的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)