Robofun 機器人論壇
標題:
用人體紅外線感測器判斷人體進門和出門 問題
[打印本頁]
作者:
frongle
時間:
2018-11-18 20:58
標題:
用人體紅外線感測器判斷人體進門和出門 問題
本帖最後由 frongle 於 2018-11-18 20:58 編輯
小弟我想用兩個人體紅外線感測器來(HC-SR501)判斷人是<進門>還是<出門>,有看到網路上有人做出這樣的功能,但沒有給出程式碼,我想到破頭都想不出來,希望有大神能幫我指點一下,對於寫程式我還只是新手,很多還不太懂,懇請賜教!以下是依我個人想法寫的程式
int sensor1 = 9; //訊號線
int sensor2 = 8;
int led1 = 2;
int led2 = 4;
void setup()
{
Serial.begin(9600);
pinMode(sensor1, INPUT);
pinMode(sensor2, INPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
}
void loop()
{
int a , b ;
a = digitalRead(sensor1);
b = digitalRead(sensor2);
if(a == 1)
{
if(b == 1)
digitalWrite(led1,HIGH);
}
else if(b == 1)
{
if(a == 1)
digitalWrite(led2,HIGH);
}
else
{
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
}
}
我會這樣寫是想判斷是哪邊的感測器先感測到1,然後換另一邊再感測到1,以判段是進門還是出門,可是每次都兩個燈都不亮,我很確定我的原件沒有壞掉,接線也沒有錯誤,因為我測試很多次了(原件測試),都沒有問題,我想知道我這程式真的可以達到我的目的嗎?是哪裡需要改嗎?還是說我這樣寫根本不行?
希望有人能幫助我, 謝謝!
作者:
超新手
時間:
2018-11-19 09:05
這樣寫有問題,
你的寫法可以簡化成
f((a == 1) && (b == 1)) {
digitalWrite(led1,HIGH);
} else if((b == 1) && (a == 1)) {
digitalWrite(led2,HIGH);
} else {
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
}
然後第一個判斷式和第二個判斷式根本一樣, 所以又變成
f((a == 1) && (b == 1)) {
digitalWrite(led1,HIGH);
} else {
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
}
所以才不會亮
只要同時遮住兩個就會亮了
當通過的時候, 步驟應該是
(sensor1, sensor2) = (0, 0)
(sensor1, sensor2) = (1, 0)
(sensor1, sensor2) = (0, 1)
(sensor1, sensor2) = (0, 0)
如果從另一邊,
(sensor1, sensor2) = (0, 0)
(sensor1, sensor2) = (0, 1)
(sensor1, sensor2) = (1, 0)
(sensor1, sensor2) = (0, 0)
你要記住前一次 sensor1 和 sensor2 的狀態,
當有變化的時候再處理
才有辦法判斷
作者:
frongle
時間:
2018-11-19 10:08
謝謝你幫我找出錯誤,我知到要用你說的方式這樣判斷,但是我不知道要怎麼用程式表達出來,可以的話麻煩告訴我方法,我也會繼續嘗試。
作者:
超新手
時間:
2018-11-19 10:47
另外宣告兩個變數, 代表上一次的狀態
初始值給 -1
int pa = -1, pb = -1;
如果 pa 不等於 a, 或 pb不等於 b (表示狀態改變)
{
如果 pa = 1, 且 pb = 0, 且 a = 0, b = 1; 就是進門
如果 pa = 0, 且 pb = 1 , 且 a = 1, b = 0; 就是出門
然後更新 pa 和 pb 的值, 也就是
pa 等於 a
pb 等於 b
}
前提是..不能兩個紅外線感測器同時被遮到
作者:
frongle
時間:
2018-11-19 21:22
我試了您的方法,但是還是不行,兩個燈都沒有亮,元件動作正常,就是沒辦法觸發判斷式裡的東西,QQ
作者:
超新手
時間:
2018-11-20 05:50
改成
if(a == 1, 或 b== 1)
{
if( pa == 1, 且 pb == 0, 且 a == 0, b == 1){
就是進門
pa=-1
pb=-1
} else if(pa == 0, 且 pb == 1 , 且 a == 1, b == 0){
就是出門
pa=-1
pb=-1
}
else {
pa = a
pb = b
}
}
如果還不行,請把程式碼貼出來看看
作者:
frongle
時間:
2018-11-21 14:20
有成功了
作者:
frongle
時間:
2018-11-21 15:29
有成功了
作者:
frongle
時間:
2018-11-21 19:44
謝謝你熱心的幫忙~
歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/)
Powered by Discuz! X3.2