2017-10-28 17 views
1

基本上,我在我的代码中设置了以下笨重的一组if语句,以将任何错误的传感器读数设置为零。如何在Arduino中循环多个变量?

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_temperature,soil_moisture等变量的数组,然后在for循环中嵌入if语句循环这些变量?

+0

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

+0

如果0是一个有效的入界值,为什么你会把值设为0?我预见到一些潜在的可怕的错误。 –

回答

0

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

+0

感谢您的反馈! 对我来说,我认为效率会来自增加更多的传感器;所以如果我添加第五个传感器,比如说,我宁愿不必写第五个if语句。如果我可以将它追加到一个数组,那将会很棒。这个数组然后会通过-100/150 for循环来清除任何错误的值。 –

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. 

很干净我的眼睛。

至于你的循环,是的,这是可行的,但它意味着将值复制到一个数组,然后循环它们,从而干扰你正在做的事情的开销。这几乎就像机构主义正在看到发生的事情。只是我的观点。

玩得开心!