C中的Arduino编程:为什么输出不是它应该的样子?

时间:2016-11-29 12:40:58

标签: arduino-uno

我的arduino程序有问题。我是初学者。 每次上传此程序时,“henti”始终为HIGH。它应该在5秒后低。

请帮帮我!!

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 个答案:

答案 0 :(得分:1)

在ArduinoLand中,loop函数在循环中被调用,令人惊讶: - )

换句话说,就像你有主要功能一样:

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

这意味着henti变高,等待五秒,然后变低。然后,假设digitalRead条件仍为真(a),它会循环并且立即再次变高。

如果你希望它在再次变高之前保持低位,你应该在delay(something)函数的右大括号之前放置另一个keadaan1()

如果您希望该位代码仅运行一次,请将其放入setup()函数或停止循环函数返回,例如:

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

(a)这是一些调试经验。在代码中填充一些调试语句可以极大地帮助找出问题所在,例如:

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();
  }
}