Как в if проверить три параметра?

shemovoi
Offline
Зарегистрирован: 15.09.2013

Приветсвую, задача вот в чем, в данном коде постоянно выполняется первый if, но его нужно выполнять только когда нужно опустить уровень oneled с 255 до 30 и ждать следующего срабатывания датчика движения. То есть, мне либо в этом же if проверить выход oneled на высокий уровень или поступить как-то по другому. Прошу объяснить. Хочу понять. 

void setup() 
{
  //Serial.begin(9600);
  pinMode(oneled, OUTPUT);
  pinMode(pirsens, INPUT);
  pinMode(fotosens, INPUT);
}

void loop()
 {
  pir = digitalRead(pirsens);
  fot = analogRead(fotosens);
  stat = analogRead(oneled);
  //Serial.println(fot);



  
  
  if(pir == false && fot <=300) // Движения нет и темно
  {
  for(value = 255; value >=30; value-=5) 
  { 
    analogWrite(oneled, value); 
    delay(30);   
  }  
  delay(1000);
  }
  



  
  if(pir == true && fot <=300 && stat <= 150) // движение есть и темно
  {
    for(value = 30 ; value <= 255; value+=5) 
  { 
    analogWrite(oneled, value);           
    delay(30);                            
  }
  delay(5000);
  }



  
  if(pir == false && fot >=500 && stat >= 150) // движения нет и светло
  {
    analogWrite(oneled, 0);
    delay(100);
  }
 }

 

fogary
Offline
Зарегистрирован: 05.03.2016

Если по существу вопроса, то да, нужно добавить проверку переменной stat, например, как в последнем if-е.

По реализации не совсем понятно. Значения портов Вы считываете в начале цикла, затем всегда делается три проверки условий и, в случае успеха, выполняется действие и задержка, но переменные перед следующей по порядку проверки - не обновляются. Если Вы хотите что бы за один цикл выполнялось только одно условие, то нужно использовать конструкцию else if.