2016-11-29 34 views
1

我有一個arduino程序的問題。我是初學者。 每次我上傳這個程序,「henti」總是高。它在5秒後應該是低的。Arduino C編程:爲什麼輸出不是它應該的方式?

請幫幫我!!

void loop() 
{ 
    if digitalRead(manual)==HIGH && digitalRead(pln_in)==HIGH && digitalRead(gen_in)==LOW) 
    { 
    keadaan1(); 
    } 
} 

void keadaan1() 
{ 
    digitalWrite(henti, HIGH); 
    digitalWrite(gen_out, LOW); 
    digitalWrite(normal, LOW); 
    digitalWrite(emergency, LOW); 
    digitalWrite(start, LOW); 
    digitalWrite(busi, LOW); 
    delay(5000); 
    digitalWrite(pln_out, HIGH); 
    digitalWrite(henti, LOW); 
} 

回答

1

在ArduinoLand,該loop函數被調用時,令人震驚的是,在一個循環:-)

換句話說,這是因爲如果你有主要功能:

int main (void) { 
    setup(); 
    for (;;) {   // just call loop() over and over. 
     loop(); 
    } 
    return 0; 
} 

那意味着henti變高,等待5秒鐘,然後變低。然後,假設digitalRead條件仍然爲真(a),它循環並且立即再次變高。

如果您希望在再次變高之前保持低位一點,您應該在keadaan1()函數的大括號之前加上另一個delay(something)

如果你想要的代碼,只有位運行一次,無論是把它放在setup()功能或返回停止循環功能,如用:

for (;;); // do nothing, forever. 

(一)這是一些調試體驗自帶的地方。灑通過了你的代碼一些調試語句可以搞清楚的問題是什麼,比如用極大的幫助:

void setup() 
{ 
    Serial.begin(9600); 
    Serial.println("Starting..."); 
    delay(1000); 
} 

void loop() 
{ 
    if (digitalRead(manual) == HIGH && 
     digitalRead(pln_in) == HIGH && 
     digitalRead(gen_in) == LOW) 
    { 
    Serial.println("Calling keadaan1"); 
    keadaan1(); 
    } 
} 
+0

我知道現在該做什麼。非常感謝paxdiablo。 –

相關問題