if else命令只停留在第一个逻辑门上

时间:2014-07-21 15:45:47

标签: if-statement arduino arduino-uno

这段代码是制作一个简单的rgb led温度计。我遇到的问题是我有三种颜色的温度层,而我的语法中的一些东西正在制作它所以它只看第一个逻辑门。代码如下所示。

// code by luke aka lazerfire15
const int temp= (A0);
int (red)=(2);
int (green)=(3);
int (blue)=(4);
int (tempread); //holds a value for the temp read

void setup() 
{
pinMode (red,OUTPUT); //set inputs and outputs
pinMode (green,OUTPUT);
pinMode (blue,OUTPUT);
pinMode (temp,INPUT);
}
void loop()
{
  tempread=(analogRead(temp)/(2.05)); // i used serial print here to test the temp sensor
  analogRead(temp);
  delay (100);
    if ((tempread) >= (50) && (tempread) < (74)) {
   pinMode(blue,HIGH);  
 } 
else if ((tempread) >= (74) && (tempread) < (76)) {
   pinMode(green,HIGH);
 }
 else if ((tempread) >= (76)) {
   pinMode(red,HIGH);
 }
 }

1 个答案:

答案 0 :(得分:0)

 if ((tempread) >= (50)) {
   pinMode(blue,HIGH);  
 } 
else if ((tempread) >= (74)) {
   pinMode(green,HIGH);
 }
 else if ((tempread) >= (76)) {
   pinMode(red,HIGH);
 }

一个简单的逻辑错误。如果因为其他的if-ifs永远不会到达,它将始终进入第一个。

  • 假设75 - &gt;大于50,首先是 - 忽略其他人
  • 假设77 - &gt;大于50,首先是 - 忽略其他人

你应该改变你的逻辑

 if ((tempread) >= (50) && (tempread) < (74)) {
   pinMode(blue,HIGH);  
 } 
else if ((tempread) >= (74) && (tempread) < (76)) {
   pinMode(green,HIGH);
 }
 else if ((tempread) >= (76)) {
   pinMode(red,HIGH);
 }