Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ if函数的另一种解决方案,用于减少写入_C++_Arduino - Fatal编程技术网

C++ if函数的另一种解决方案,用于减少写入

C++ if函数的另一种解决方案,用于减少写入,c++,arduino,C++,Arduino,您好,我正在寻找一个解决方案,以一个功能写得少,混乱的代码:D 问题是:是否有其他函数或IF函数的其他用法来编写更少的代码?因为我需要写多达50行的IF函数 添加一个代码,说明我是如何操作的,还有其他方法吗?因为我需要它,函数才能工作,我从mqtt获取值,difrent值需要在程序的内存中 if (TESTAS == 30 && soilmoisturepercent == TESTAS) { digitalWrite(LED_PIN, HIGH); // turn on

您好,我正在寻找一个解决方案,以一个功能写得少,混乱的代码:D

问题是:是否有其他函数或IF函数的其他用法来编写更少的代码?因为我需要写多达50行的IF函数

添加一个代码,说明我是如何操作的,还有其他方法吗?因为我需要它,函数才能工作,我从mqtt获取值,difrent值需要在程序的内存中

if (TESTAS == 30 && soilmoisturepercent == TESTAS) {
    digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
     delay(5000);
     digitalWrite(LED_PIN, LOW);
  }
  else if (TESTAS == 29 && soilmoisturepercent == TESTAS) {
    digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
     delay(5000);
     digitalWrite(LED_PIN, LOW);
    }
    else if (TESTAS == 28 && soilmoisturepercent == TESTAS) {
    digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
     delay(5000);
     digitalWrite(LED_PIN, LOW);
    }
具有相同的内部功能:

    digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
     delay(5000);
     digitalWrite(LED_PIN, LOW);
因此,您可以将其放在它自己的函数中,以简化为:

  if (TESTAS == 30 && soilmoisturepercent == TESTAS) {
    myFunction();
  }
  else if (TESTAS == 29 && soilmoisturepercent == TESTAS) {
    myFunction();
  }
    else if (TESTAS == 28 && soilmoisturepercent == TESTAS) {
    myFunction();
}
其中myFunction是:

    void myFunction() {
       digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
       delay(5000);
       digitalWrite(LED_PIN, LOW);
    }
然后你可以看到这三种情况非常相似:

if(soilmoisturepercent == TESTAS) {
      if (TESTAS == 30) {
        myFunction();
      }
      else if (TESTAS == 29) {
        myFunction();
      }
      else if (TESTAS == 28) {
        myFunction();
    }
}
然后可以使用
|
或运算符再次简化:

if(soilmoisturepercent == TESTAS) {
      if (TESTAS == 30 || TESTAS == 29 || TESTA == 28) {
        myFunction();
      }
}
另一个选项是使用小于或大于运算符来比较范围,例如,如果希望任何
TESTAS
等于或小于30。e、 g:

if (TESTAS <= 30) {
    myFunction();
} 

if(TESTAS您可以使用开关盒

switch(TESTAS){
    case 30:
         digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
         delay(5000);
         digitalWrite(LED_PIN, LOW);
         break;
    case 29:
         digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
         delay(5000);
         digitalWrite(LED_PIN, LOW);
         break;
    case 28:
         digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
         delay(5000);
         digitalWrite(LED_PIN, LOW);
         break;
    default:
         your_fuction();
    
}

您不需要在所有3种情况下都使用
soilmoisturepercent==TESTAS
。组合:
if(TESTAS>=28&&TESTAS Ok感谢您让我知道:)等等,你的3个代码片段有什么不同?要回答这个问题:是的,当然有一种方法可以用一个
if
语句来代替它。这在逻辑上等同于
soilmoisturepercent==TESTAS&&TESTAS>=28&&TESTAS,这对你来说应该不是很明显的
switch(TESTAS){
    case 30:
         digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
         delay(5000);
         digitalWrite(LED_PIN, LOW);
         break;
    case 29:
         digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
         delay(5000);
         digitalWrite(LED_PIN, LOW);
         break;
    case 28:
         digitalWrite(LED_PIN, HIGH); // turn on led 5 seconds
         delay(5000);
         digitalWrite(LED_PIN, LOW);
         break;
    default:
         your_fuction();
    
}