Как в 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.