我正在使用一个微控制器,它有一个中断,自启动以来每1毫秒计数一次。
我有一个介于0和999之间的变量,如果经过的时间小于x
毫秒(在下面的示例中是500毫秒),我想切换另一个值。所以在时间0到500之间我希望shouldActivate
是真的,在500到1000之间应该是假的,然后在1000到1500之间应该是真的,以此类推。
int activeTime = 500; // 500ms active
int shouldActivate = 0;
int elapsed = 0; //how many ticks we had so far
// This function gets automatically called every 1ms
void tick() {
if(elapsed < activeTime) {
elapsed++;
shouldActivate = 1;
} else {
shouldActivate = 0;
elapsed--;
}
}
上面的代码在我刚开始的时候就可以工作,当消耗超过500时,我会遇到问题,因为它只执行一次减量操作。
为了达到预期的效果,我应该在我的功能中加入什么条件?
最佳答案
有两种解决方案,创建新变量“direction”(用于指定是递减还是递增),但我认为更好的方法是:
void tick() {
elapsed++;
if(elapsed < activeTime) {
shouldActivate = 1;
} else {
shouldActivate = 0;
}
if(elapsed>999)
elapsed = 0;
}
关于c - 一秒钟内每X毫秒在一个值之间循环的条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48785067/