#1 Re: Програмування Arduino » Обработка длительной сработки PIR-датчика » 2018-04-09 18:39:45

Тема закрыта. Спасибо Госпади за помощь. Код был переписан благодаря NoName, за что ему особая благодарность.

#3 Re: Програмування Arduino » Обработка длительной сработки PIR-датчика » 2018-04-06 10:38:53

Поменял if (PirOff - PirOn > 10000) на if (PirOn - PirOff > 10000). Теперь в переменную Pir10Sec записываются правильные значения, но сработка PIR-датчика происходит как попало. На короткое движение может среагировать как на длительное.
Вот лог serial:

PirOn: 158519
PirOff: 150694
Motion LONG ON!: 10:28
Pir10Sec: 1

Motion OFF: 10:28
DigitpirState: 0
PirOff: 161361
Pir10Sec: 0

Motion ON!: 10:28
DigitpirState: 1
PirOn: 163071

Motion OFF: 10:28
DigitpirState: 0
PirOff: 165968
Pir10Sec: 0

#4 Програмування Arduino » Обработка длительной сработки PIR-датчика » 2018-04-05 22:05:34

demonstrius
відповідей: 6

Нужно чтобы при 10-секундной сработке PIR-датчика в переменную Pir10Sec заносилась 1, а при отключении датчика -0.
Написал такой код:

void pirmonitoring() {

  val = digitalRead(inputPin);
  if (val == HIGH) {
     digitalWrite(ledPin, HIGH);

     if (pirState == LOW) {      // пир-датчик включен
         pirState = HIGH;
         PirOn = millis();
         DigitpirState = 1;
     
         Serial.print("Motion ON!: ");
         Serial.print(h); Serial.print(":"); Serial.println(m);
         Serial.print("DigitpirState: ");
         Serial.println(DigitpirState);
         Serial.println();

        }
    }

     else {
         digitalWrite(ledPin, LOW);

         if (pirState == HIGH) {      // пир-датчик отключен
             pirState = LOW;
             PirOff = millis();
             Pir10Sec = 0;
             DigitpirState = 0;
     
             Serial.print("Motion OFF: ");
             Serial.print(h); Serial.print(":"); Serial.println(m);
             Serial.print("DigitpirState: ");
             Serial.println(DigitpirState);
             Serial.print("Pir10Sec: ");
             Serial.println(Pir10Sec);
             Serial.println();

            }
        }

      if (PirOff - PirOn > 10000) {    // длительная сработка пир-датчика
         Pir10Sec = 1;
         Serial.print("Motion LONG ON!: ");
         Serial.print(h); Serial.print(":"); Serial.println(m);   
         Serial.print("Pir10Sec: ");
         Serial.println(Pir10Sec);
         Serial.println();
        }

}

Но он не работает так как надо. А именно - при коротком срабатывании и отключении датчика переменная DigitpirState записывается правильно (0 или 1), а вот при длительной сработке датчика в  переменную Pir10Sec записывается 1, но при отключении так и остается 1 пока не произойдет короткая сработка.
Прошу помощи спецов. Заранее спасибо.

Підвал форуму