c++ - 如何独立检查多个变量?
问题描述
这是有错误的代码部分:
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,电机不转。
这样做的原因是当我一个接一个地检查一个变量时,有没有一种方法可以独立检查每个变量?
解决方案
你的逻辑检查一件事并做出反应,然后检查另一件事。
您可以同时检查两件事,确定 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);
}
这样,湿度决定不会覆盖温度决定,如果温度还没有导致它可能会决定使用电机。如果需要电机,它将打开,否则关闭。
请注意,我不确定液晶打印的目的。我将其保留在您的代码中。
推荐阅读
- vim - 是双
在 VS Code 中不可映射? - ruby - 为什么一个明显的条件没有满足?
- java - 错误代码:1822。添加外键约束失败。引用表“地址”中的约束“employee_ibfk_1”缺少索引
- angular - 以 NgForm 作为参数的 typescript 方法的 Karma 单元测试
- reactjs - 过滤器在几个词后改变TextInput的焦点,不允许输入长词
- ios - 如何知道已安装的应用程序是通过 TestFlight 或 AppStore 安装的?
- c - 这个汇编 x86 代码的反编译 (C) 代码结构是什么?
- java - 如何解决com.itextpdf.text.ExceptionConverter:-1
- ios - 在访问我的核心数据模型之前,如何确保所有网络调用都已进行?
- python - 如果发生冲突,在元数据(日期)的帮助下合并两个 XML 文件