主題: Arduino問題..
瀏覽單個文章
fpe
Major Member
 

加入日期: Aug 2011
文章: 251
引用:
作者poo123
void setup() {
pinMode(2, INPUT); // 對照式紅外線
pinMode(3, OUTPUT); // 停止(B接點)
pinMode(4, OUTPUT); // 上升(A接點)
}

void loop() {
if (digitalRead(2 == HIGH) ){


digitalWrite(3, HIGH); digitalWrite(4, LOW); // 停止(B接點)
delay(1000);
digitalWrite(3, LOW);digitalWrite(4, LOW);
delay(1000);
digitalWrite(3, LOW);digitalWrite(4, HIGH); // 上升(A接點)
delay(1000);
digitalWrite(3, LOW);digitalWrite(4, LOW);

}

else {
digitalWrite(3, LOW);digitalWrite(4, LOW);
} }


loop紅字內怎樣跑一次就停止..想用NodeMCU做個車道閘門停止(3)上升(4)加對照式紅
外線(2)控制.加上wifi+App Inventor2 用手機開閘門..紅外線(2)遮住不放一直輪迴.
...紅字拿到setup內沒動作....


談邏輯就好

void setup() {
pinMode(2, INPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
}

PIN3,PIN4為輸出電位
在設定裡定義好
順便把電位直接改成LOW,比較保險

pin2為紅外線,有遮蔽物電位就為HIGH,無遮蔽物就為LOW
沒有錯的話

void loop() {
if (digitalRead(2 == HIGH) ){

digitalWrite(3, HIGH); digitalWrite(4, LOW); // 停止(B接點)
delay(1000);
digitalWrite(3, LOW);digitalWrite(4, LOW);
delay(1000);
digitalWrite(3, LOW);digitalWrite(4, HIGH); // 上升(A接點)
delay(1000);
digitalWrite(3, LOW);digitalWrite(4, LOW);

}

else {
digitalWrite(3, LOW);digitalWrite(4, LOW);
} }


上面LOOP的寫法可以精簡一點

void loop() {
if (digitalRead(2 == HIGH) ){ //紅外線有遮蔽物擋住會變高電位HIGH

digitalWrite(3, HIGH); // 停止(B接點) PIN4已經在低電位LOW,不須要再寫
delay(1000); // 停止1秒
digitalWrite(3, LOW); // 將PIN3改成低電位LOW,PIN4還是保持在低電位
delay(1000); // 停止1秒
digitalWrite(4, HIGH); // 上升(A接點) 將PIN4改成高電位,這時PIN3保持低電位
delay(1000); // 停止1秒
digitalWrite(3, LOW); // 將PIN3改成低電位LOW
digitalWrite(4, LOW); // 將PIN4改成低電位LOW

}

}

ELSE就不須要寫了
不管PIN2有沒有成高電位 if digitalRead(2 == HIGH)
在void setup {}裡就將PIN3,PIN4先預設低電位LOW

PIN2如果是高電位HIGH
if條件成立
跑完void loop {}時
在末段會將PIN3,PIN4設定成低電位LOW

上述只是提供邏輯參考
可以幫助你分析看看程式有沒有寫錯方向
不代表正確無誤
舊 2018-09-09, 02:58 PM #10
回應時引用此文章
fpe離線中