[英]Why 2nd PIR sensor is always HIGH?
我從串行監視器上的“ inputPintwo”獲得了恆定的高電平。 當“ inputPin”變為高電平時,繼電器將觸發並正常工作,因為“ inputPintwo”也始終為高電平。
我有一個非常類似的設置: 2個PIR運動傳感器+ Arduino
我沒有像上面回答的問題那樣使用引腳0或1。 萬一它是不良的硬件,我已經用另一種傳感器代替了。 我也拔下了傳感器的插頭,它仍然顯示為HIGH。 跳線正在兩個傳感器上重新觸發。
int ledPin = 13;
int inputPin = 2;
int inputPintwo = 4;
int pirState = LOW;
int val = 0;
int valtwo = 0;
#define RELAY1 7
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(inputPin, INPUT);
pinMode(inputPintwo, INPUT);
pinMode(RELAY1, OUTPUT);
Serial.begin(9600);
}
void loop(){
val = digitalRead(inputPin);
valtwo = digitalRead(inputPintwo);
if (val == HIGH && valtwo == HIGH) {
digitalWrite(ledPin, HIGH);
if (pirState == LOW) {
Serial.println("Motion detected!");
pirState = HIGH;
Serial.println("Light ON");
digitalWrite(RELAY1,1);
delay(500);
digitalWrite(RELAY1,0);
delay(500);
digitalWrite(RELAY1,1);
delay(500);
digitalWrite(RELAY1,0);
delay(500);
digitalWrite(RELAY1,1);
}
}
else {
digitalWrite(ledPin, LOW);
if (pirState == HIGH){
Serial.println("Motion ended!");
digitalWrite(RELAY1,0);
pirState = LOW;
Serial.println("Light OFF");
}
}
}
我希望兩個傳感器僅在檢測到運動時才會變高,這將導致繼電器打開和關閉幾次,然后保持打開狀態直到傳感器上的計時器用盡。
為了確定問題,我建議您首先檢查硬件。 您將需要電壓表/萬用表。
如果一切正常,或者您沒有電壓表,請嘗試斷開PIR傳感器的連接,並在Arduino引腳4和地面之間連接導線。 digitalRead(inputPintwo)返回LOW嗎? 如果是,則您知道讀取引腳狀態很好。
下面請查看與您的代碼相關的一些建議:
例:
#define LED_PIN 13
#define INPUT_PIN 2
#define INPUT_PINTWO 4
要么
static const int ledPin = 13;
static const int inputPin = 2;
static const int inputPintwo = 4;
要激活輸入引腳中的上拉電阻,請使用
pinMode(inputPin, INPUT_PULLUP);
pinMode(inputPintwo, INPUT_PULLUP);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.