如何在Arduino中循环多个变量?
基本上,我在我的代码中设置了以下笨重的一组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
语句循环这些变量?
虽然一个循环也可以工作,但这样做完全没问题。取决于你的“高效”的想法。更小的代码更有效率?少写或少说明。对于第一个标准来说,循环会更有效率。第二,这也适用。每条指令的指令尽管如此,这是一个非常有效的方法。
感谢您的反馈! 对我来说,我认为效率会来自增加更多的传感器;所以如果我添加第五个传感器,比如说,我宁愿不必写第五个if语句。如果我可以将它追加到一个数组,那将会很棒。这个数组然后会通过-100/150 for循环来清除任何错误的值。 –
你可以使用一个辅助函数修剪下来的代码:
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.
很干净我的眼睛。
至于你的循环,是的,这是可行的,但它意味着将值复制到一个数组,然后循环它们,从而干扰你正在做的事情的开销。这几乎就像机构主义正在看到发生的事情。只是我的观点。
玩得开心!
这样做虽然循环也可以,但完全没问题。取决于你的“高效”的想法。更小的代码更有效率?少写或少说明。对于第一个标准来说,循环会更有效率。第二,这也适用。每条指令的指令尽管如此,这是一个非常有效的方法。 –
如果0是一个有效的入界值,为什么你会把值设为0?我预见到一些潜在的可怕的错误。 –