引用:
作者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
上述只是提供邏輯參考
可以幫助你分析看看程式有沒有寫錯方向
不代表正確無誤