如果if语句重复为真,直到false,则仅增加一个计数器(++)?

时间:2018-03-11 15:39:03

标签: c if-statement counter

对于可怕的标题感到抱歉,不知道如何正确解释它。

我正在研究一个监控随环境变化的值的项目。我的if语句监视某个值何时超过一个数字并增加一个计数器以显示它已被触发。

我的问题是,当值超过目标值时,每次检查if语句并证明true时,它都会递增计数器。理想情况下,我希望增加计数器一次,并且if语句true只增加一次,直到它证明false }。然后一旦它再次被触发,它只会再次递增,无论它被证明是多少次都是真的。

让我更好地解释一下:if语句检查温度值,有时长时间高于targetValue,导致计数器每次检查时递增(在我的情况下,它)在if语句证明为真时,每秒递增多次。这是我想要的。

int targetValue = toInt(temperature);
if (targetValue > 30) 
{
    counterx ++;
}

2 个答案:

答案 0 :(得分:3)

如果要在状态发生变化时增加某些内容,则必须跟踪旧状态和新状态。当它们不相同时,递增并将旧状态设置为新状态,如下所示:

int state = get_state();
int old_state = state;

// starting control loop
while(1)
{
    state = get_state();
    if(old_state != state)
    {
        digitalWrite(led, HIGH);
        digitalWrite(relay, HIGH);
        counterx++;

        old_state = state;
    }

    // other stuff
    ...
}

答案 1 :(得分:1)

您可以使用变量来测试:

if (difference > 30.0 && !triggered) 
{
    triggered = true;
    digitalWrite(led, HIGH);
    digitalWrite(relay, HIGH);
    counterx ++;
} else 
{
    triggered = false;
}