首页 > 解决方案 > 如何独立检查多个变量?

问题描述

这是有错误的代码部分:

  int value = analogRead(LM351);
  float Temperature = value * 500.0 / 1023.0;
  lcd.setCursor(6,0);
  lcd.print(Temperature); 
  lcd.setCursor(11,1);
  int value1 = analogRead(LM352);
  float Humidity = value1 * 500.0 / 1023.0;
  lcd.setCursor(10,1);
  lcd.print(Humidity); 
  

  if (Temperature > 24){
    digitalWrite(motor, HIGH);
    digitalWrite(LedRed, HIGH);
    digitalWrite(LedGreen, LOW);
    lcd.print("");
  }
  else {
    digitalWrite(motor, LOW);
    digitalWrite(LedRed, LOW);
    digitalWrite(LedGreen, HIGH);
    lcd.print("");
  }
  
  if (Humidity > 10){
    digitalWrite(motor, HIGH);
    lcd.print("");
  }
  else {
    digitalWrite(motor, LOW);
    lcd.print("");
  }
  
   delay(1000);
}

正确的是,如果温度超过 24 或湿度超过 10,电机应该旋转。但是当我运行这段代码时,电机只有在湿度超过 10 时才会旋转。但是当湿度小于 10 并且温度为超过24,电机不转。

这样做的原因是当我一个接一个地检查一个变量时,有没有一种方法可以独立检查每个变量?

标签: c++if-statementvariablesarduinosensors

解决方案


你的逻辑检查一件事并做出反应,然后检查另一件事。
您可以同时检查两件事,确定 4 种情况中的一种,然后做出反应,或者一个接一个地检查,但只做出决定,而不是立即做出反应,然后再做出反应。

我认为您专门询问了有关单独检查的问题,因此请进行决策。

// no decisions yet
bool NeedMotor = false;

if (Temperature > 24)
{ 
    NeedMotor = true;
    digitalWrite(LedRed, HIGH);
    digitalWrite(LedGreen, LOW);
    lcd.print("");
} else
{
    digitalWrite(LedRed, LOW);
    digitalWrite(LedGreen, HIGH);
    lcd.print("");
}
  
if (Humidity > 10){
    NeedMotor = true;
    lcd.print("");
} else
{
    lcd.print("");
}

if (NeedMotor)
{
    digitalWrite(motor, HIGH);
} else
{
    digitalWrite(motor, LOW);
}

这样,湿度决定不会覆盖温度决定,如果温度还没有导致它可能会决定使用电机。如果需要电机,它将打开,否则关闭。

请注意,我不确定液晶打印的目的。我将其保留在您的代码中。


推荐阅读