用戶接近超聲/紅外傳感器連接到Arduino的烏諾,如果接近距離小於20cm,的超聲triggerPin /紅外傳感器將從低電平切換到高電平 - > 0列表將切換到'1列表。
當超聲波/紅外傳感器從「0」切換到「1」時,狀態LED和狀態MotorFan將從低電平切換到高電平。只要超聲波傳感器的返回數據爲'1',兩種狀態都將保持不變。
當用戶離開超聲波/紅外傳感器的距離時,超聲波/紅外傳感器的觸發脈衝將從高電平切換到低電平 - > 1列表將被切換到0列表。
但是,此時,狀態LED和狀態MotorFan將保持在高電平狀態10秒,然後切換到低電平狀態。如果另一個用戶靠近接近傳感器並且超聲波/紅外傳感器在10s的延遲內切換回'1',則狀態LED和狀態MotorFan應保持在高電平狀態而不切換。
因此,正確的流量如下:
超聲/紅外傳感器返回「0' - >但是,當感測用戶(距離< 20)超聲/紅外傳感器內切換爲」 1'的超聲波時/紅外傳感器切換到1,MotorFan狀態和LED狀態將從LOW超聲波/紅外切換到HIGH傳感器返回1時感測接近度 - >但當感測用戶更多(距離> 20)超聲波/紅外線傳感器切換爲0,此時,MotorFan狀態和LED狀態將保持在高電平狀態10秒鐘,然後切換至低電平。條件:當另一個用戶在延遲10s之前接近時,MotorFan狀態和LED狀態將保持高電平狀態。
我所做:
我已經分配了以下數字引腳以下vairable:
超聲波傳感器的trigPin是數字引腳8的超聲波傳感器的echoPin是數字引腳9返聘電機風扇是數字引腳5 LED分配給繼電器4.
其次,我試圖利用millis()來獲得時間,如果它應該超過10000的限制,它將數字寫入兩個狀態到LOW從高。
代碼: const int的trigPin = 8; const int echoPin = 9; //電機風扇連接到arduino針腳號 const int FanPin = 5; 字節中繼= 4;
long duration;
int distance;
unsigned long Timer;
unsigned long Interval = 10000; //teh repeat Interval
void setup() {
Timer = millis();
pinMode(FanPin, OUTPUT); // Set pinMode for FanPin as OUTPUT, display
pinMode(trigPin, OUTPUT);
pinMode(relay, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600); // Open serial port to communicate with the Ultrasaonic Sensor
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034/2;
if (distance < 20) {
// Write a pin of HIGH
Serial.println("1");
//Set motor-fan to operate
digitalWrite(FanPin, HIGH);
digitalWrite(relay, HIGH);
} else {
Serial.println("0");
//Check if Timer is longer than 10s
if ((millis() - Timer) > Interval) {
digitalWrite(FanPin, LOW);
digitalWrite(relay, LOW);
}
}
delay(100);
}
問題:
所述傳感器是能夠從「0」切換到「1」時讀出的接近,其次,它也能夠切換兩個LED狀態和motorFan狀態從低到高。
然而,無論是LED狀態和motorFan切換回低時,從高分到低分的Arduino傳感器切換,無需等待10秒延遲
我想索取這方面的一些援助,我完全卡住在這個問題上。
感謝
0)您將在設置階段獲取startTime(timer)的值。 (1)你的間隔設置爲1000,即1千毫秒 - 一秒。 (2)您可能希望重新觸發10秒延遲。如果是這樣,每次最後的差值超過10,000時(即,在您的代碼的最後一個if塊中執行),獲取計時器的新值。 – enhzflep
@enhzflep,我已編輯,但沒有得到結果 – Luke
@enhzflep so你是什麼意思?因爲我編輯並更改了間隔變量爲10000,並且它仍然沒有顯示正確的行爲 – Luke