2016-11-29 33 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。 –