如何在Arduino中循环遍历许多变量?

时间:2017-10-28 20:19:55

标签: arduino

基本上,我的代码中有以下笨重的if语句集,用于将任何错误的传感器读数设置为零。

if (soil_moisture > 150 || soil_moisture <-100){
    soil_moisture = 0;
}
if (soil_temperature > 150 || soil_temperature < -100 ){
    soil_temperature = 0;
}
if (ambient_temperature > 150 || ambient_temperature < -100 ){
    ambient_temperature = 0;
}
if (ambient_humidity > 150 || ambient_humidity <-100){
    ambient_humidity = 0;
}

它的编写方式似乎多余且低效,我想知道,如果有更好的方法可以做到这一点。是否可以创建变量数组soil_temperaturesoil_moisture等...然后在for循环中循环遍历这些变量,该循环具有if语句嵌入其中?

2 个答案:

答案 0 :(得分:0)

这样做完全没问题,尽管循环也可以。取决于你的“高效”的想法。较小的代码更有效吗?少写或少说明。对于第一个标准,循环会更有效。对于第二个,这也适用。但是,每条指令的指令,这是一种非常有效的方法。

答案 1 :(得分:0)

您可以使用辅助例程来减少代码:

boolean outOfBounds(int value, int low, int high)
{
    if ( value < low || value > high ) 
        return true;
    else
        return false;
}

然后在你的代码中......

if ( outOfBounds(soil_moisture, -100, 150) ) {
    soil_moisture = 0;
}
if ( outOfBounds(soil_temperature, -100, 150) ) {
    soil_temperature = 0;
}
// etc.

如果您的限制始终为-100和150,那么您可以传递指向变量的指针,并在例程中将其设置为零:

void resetBounds(int *pvar)
{
    if ( *pvar < -100 || *pvar > 150 ) {
        *pvar = 0;
    }
}

在您的代码中:

resetBounds(&soil_moisture);
resetBounds(&soil_temperature);
// etc.

我的眼睛很干净。

至于你的循环,是的,那会起作用,但它意味着将值复制到数组中,然后循环遍历它们的开销,这会分散你对它们所做的事情。这几乎就像机器人在看到正在发生的事情。只是我的意见。

玩得开心!