我目前使用测量elapsed time的代码测量我的草图中的已用时间,就像在此处看到的那样。代码需要准确到大约1秒,但我想编程它尽可能健壮。
unsigned long currentMillis = millis();
if ((unsigned long)(currentMillis - previousMillis) >= interval)
{foo;}
我想知道添加暂停功能的最佳方式是什么,以便bool pause == true
previousMillis
或interval
进行调整以确保foo
之后触发pause==false
interval
//global setup
bool pause=false;
unsigned long previousMillis = 0;
unsigned long interval = 1000;
_________
unsigned long currentMillis = millis();
RClock();
if ((unsigned long)(currentMillis - previousMillis) >= interval)
{
interval=1000;
foo;
}
void RClock()
{
if(pause)
{
unsigned long runtime = millis()-previousMillis;
unsigned long timeleft= interval-runtime;
previousMillis=millis();
interval=timeleft;
}
}
现在我正在思考以下几点:
foo
有更好的方法吗?我觉得它应该是一个更简单的操作。
修改
为了清理问题,我的目标是pause==true
在interval
总共interval=1000
时触发,如果pause==true
(ms),那么foo
500(毫秒)pause==true
将在1500毫秒后出现
修改2
为了进一步澄清,在interval = 1000
需要进入帐户之前运行的时间可以说:
pause == true
(ms)。 Pause == false
3小时后foo
Pause == false
(function() {
var unfollowButtons = $('button.Unfollow');
var index = unfollowButtons.length - 1;
function unfollow(callback) {
if (index >= 0) {
$(unfollowButtons[index--]).click();
}
callback();
}
function handleUnfollow(maxIter, iter) {
iter = typeof iter === "number" ? iter : 0;
if ( iter >= maxIter ) {
// base case reached, stop further recursive calls
return true;
}
// call unfollow once
unfollow(function() {
setTimeout(function() {
// recursive call
handleUnfollow(maxIter, ++iter);
}, Math.floor((Math.random() * 1000) + 500));
});
}
// execute recursive function, which will iterate 2 times
handleUnfollow(2);
})();
答案 0 :(得分:0)
if (pause && ((unsigned long)(currentMillis - previousMillis) >= interval))
答案 1 :(得分:0)
millis()每50天返回零一毫秒。因此额外的测试。 PreviousMillis != 0
控制触发
void Loop()
{
//...
if (pause)
{
previousMillis = millis();
if (previousMillis == 0)
previousMillis = 1; // avoid the one in a billion chance of missing a trigger
}
if (previousMillis && ((millis() - previousMillis) > interval))
{
previousMillis = 0; // prevents retriggering
foo();
}
//...
}
计时器与当前的时间连续设置'而pause == true
。
当不处于暂停状态时,计时器将在interval
ms之后通过第二次测试。
完成后,计时器设置为零;这可以避免误触发。
答案 2 :(得分:0)
目前我已经编写了以下具有我想要的功能的代码,但我确定它不是最好的方法
(Global Vars)
Cannot read property 'set' of undefined
(代码)
unsigned long time_B =0
unsigned long time_E = 0