Как в if проверить три параметра?
- Войдите на сайт для отправки комментариев
Пт, 04/03/2016 - 23:15
Приветсвую, задача вот в чем, в данном коде постоянно выполняется первый 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); } }
Если по существу вопроса, то да, нужно добавить проверку переменной stat, например, как в последнем if-е.
По реализации не совсем понятно. Значения портов Вы считываете в начале цикла, затем всегда делается три проверки условий и, в случае успеха, выполняется действие и задержка, но переменные перед следующей по порядку проверки - не обновляются. Если Вы хотите что бы за один цикл выполнялось только одно условие, то нужно использовать конструкцию else if.