Arduino IDE - 按下按钮时停止重复'Serial.println'

时间:2015-03-30 13:57:01

标签: c++ c arduino arduino-ide

我正在开发一个项目,当你按下一个按钮并在串行监视器中显示一个值(不是最激动人心的但是这是我的第一个非教程项目)时,代码是:< / p>

void loop() {

   if(digitalRead(firstButton) == HIGH) {    
      digitalWrite(firstLed, HIGH);    
      Serial.println("First button pressed");
      delay(250);
   }

   if(digitalRead(secondButton) == HIGH) {    
      digitalWrite(secondLed, HIGH);    
      Serial.println("Second button pressed");
      delay(250);
   }

}

这在很大程度上符合您的预期,但是如果按住该按钮,它会连续重复“Serial.println”值,直到按钮被释放。理想情况下,我需要按每次按下一次来声明'Serial.println'值,无论它是按下一秒还是一分钟。

非常感谢任何帮助......

不知道这是否重要,但我正在使用带有Wi-Fi屏蔽的Arduino Uno R3(这给了我各种各样的悲伤,但那是另一天)。

1 个答案:

答案 0 :(得分:2)

为了检测按键更改,您需要检测按钮状态更改事件。在这种情况下,您需要跟踪上一个按钮状态:

void loop() {

    static int firstPrevious = LOW;
    static int secondPrevious = LOW;

    int first = digitalRead(firstButton);
    int second = digitalRead(secondButton);

    if((first == HIGH) && (firstPrevious == LOW)) {
        digitalWrite(firstLed, HIGH);
        Serial.println("First button pressed");
        delay(250);
    }

    if((second == HIGH) && (secondPrevious == LOW)) {
        digitalWrite(secondLed, HIGH);
        Serial.println("Second button pressed");
        delay(250);
    }

    firstPrevious = first;
    secondPrevious = second;
}

在此之后,您将要查看切换&#34; de-bounce&#34;所以你不能为每个按键获得多个事件......