программная задержка для PIR HC-SR501
- Войдите на сайт для отправки комментариев
Вс, 10/11/2013 - 22:41
Привет, не могу сообразить как можно программно уменьшить задержку включения диода после появления движения. Минимальная задержка после срабатывания сенсора - 2-3 секунды, все это время диод горит.
01 | int led = 13; |
02 | int sensor = 11; |
03 |
04 | void setup () { |
05 | pinMode(led, OUTPUT); |
06 | pinMode(sensor, INPUT); |
07 | } |
08 |
09 | void loop () { |
10 | if (digitalRead(sensor) == 1) { |
11 | digitalWrite(led, 1); |
12 | } |
13 | else { |
14 | digitalWrite(led, 0); |
15 | } |
16 | } |
Как можно погасить диод раньше? Буду признателен за любые ответы, спасибо.
Резисторы на плате покрутить? (если я правильно помню, один настраивает дальность, а другой - время удержания)
Уже подкручены на минимум.
Да, есть такое неудобство, сталкивался. Про задержки до и после срабатывания HC-SR501 неплохо написано в его даташите (http://elecfreaks.com/store/download/datasheet/sensor/DYP-ME003/Specification.pdf).
Даташит я читал. Скажем так, я готов смириться с тем, что по факту, в сумме всех задержек, выходит, что минимальное значение, после которого диод загорится второй раз - порядка 5-6 секунд. Но меня интересует немного другое: как погасить диод раньше, например через секунду после срабатывания сенсора?
Нужен аналог millis(), только чтобы он считал время не с начала работы программы, а с начала срабатывания сенсора.
Это вам в теорию автоматов, отслеживать разные состояния
Навскидку получается так (не тестировал, могут быть ошибки (в том числе и логические)):
01
// led_enable - зажигание led разрешено
02
// led_on - led горит
03
if
(!led_on&&led_enable&&(digitalRead(sensor) == 1)) {
04
digitalWrite(led, 1);
05
led_on=
true
; time_mark=millis();
06
}
07
else
if
(led_on&&(millis()-time_mark>1000)) {
// 1000 = 1 сек
08
digitalWrite(led, 0); led_on=
false
; led_enable=
false
;}
09
else
if
(!led_enable&&(digitalRead(sensor) == 0)){
10
led_enable=
true
;
11
}
Да нет, все верно. Работает именно так, как и необходимо.
Спасибо большое за помощь!