带 LED 的 Arduino 按钮



我组装了一个Arduino电路,当按下按钮时,它会关闭led。我如何编码它,以便在它打开并保持打开时按下它,并且只有在再次按下后才会关闭?任何帮助将不胜感激

我当前的代码是:

  int ledred = 12;
  int ledgreen = 8;
  int BUTTON = 4;
  int speakerPin = 1;
  void setup() {
   // initialize the digital pin as an output.
   Serial.begin(9600);
   pinMode(ledgreen, OUTPUT);
   pinMode(ledred, OUTPUT);
   pinMode(BUTTON,INPUT);
  }
void loop() {
 if(digitalRead(BUTTON) == HIGH){
  digitalWrite(ledred,HIGH);
  digitalWrite(ledgreen,HIGH);
   }else
   {
    digitalWrite(ledred,LOW);
    digitalWrite(ledgreen,LOW);
   }
  }

如果您只想这样做,则可以使用其中一个中断引脚并监视RISING(或FALLING)事件。

类似于此示例的内容:

const byte ledPin = 13;
const byte interruptPin = 2;
volatile byte state = LOW;
void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(interruptPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(interruptPin), blink, RISING);
}
void loop() {
  digitalWrite(ledPin, state);
}
void blink() {
  state = !state;
}

请注意,您可能仍然需要一些去抖策略。

此外,您不需要为此使用中断,但是您需要一些边缘检测算法。这些在上面的去抖动文章中得到了很好的解释。我个人更喜欢这些,因为UNO板中的中断引脚足够珍贵,不能与不起眼的按钮按下一起使用...... :o)

/*
  Debounce
  Each time the input pin goes from LOW to HIGH (e.g. because of a push-button
  press), the output pin is toggled from LOW to HIGH or HIGH to LOW. There's a
  minimum delay between toggles to debounce the circuit (i.e. to ignore noise).
  The circuit:
  - LED attached from pin 13 to ground
  - pushbutton attached from pin 2 to +5V
  - 10 kilohm resistor attached from pin 2 to ground
  - Note: On most Arduino boards, there is already an LED on the board connected
    to pin 13, so you don't need any extra components for this example.
  created 21 Nov 2006
  by David A. Mellis
  modified 30 Aug 2011
  by Limor Fried
  modified 28 Dec 2012
  by Mike Walters
  modified 30 Aug 2016
  by Arturo Guadalupi
  This example code is in the public domain.
  http://www.arduino.cc/en/Tutorial/Debounce
*/
// constants won't change. They're used here to set pin numbers:
const int buttonPin = 2;    // the number of the pushbutton pin
const int ledPin = 13;      // the number of the LED pin
// Variables will change:
int ledState = HIGH;         // the current state of the output pin
int buttonState;             // the current reading from the input pin
int lastButtonState = LOW;   // the previous reading from the input pin
// the following variables are unsigned longs because the time, measured in
// milliseconds, will quickly become a bigger number than can be stored in an int.
unsigned long lastDebounceTime = 0;  // the last time the output pin was toggled
unsigned long debounceDelay = 50;    // the debounce time; increase if the output flickers
void setup() {
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
  // set initial LED state
  digitalWrite(ledPin, ledState);
}
void loop() {
  // read the state of the switch into a local variable:
  int reading = digitalRead(buttonPin);
  // check to see if you just pressed the button
  // (i.e. the input went from LOW to HIGH), and you've waited long enough
  // since the last press to ignore any noise:
  // If the switch changed, due to noise or pressing:
  if (reading != lastButtonState) {
    // reset the debouncing timer
    lastDebounceTime = millis();
  }
  if ((millis() - lastDebounceTime) > debounceDelay) {
    // whatever the reading is at, it's been there for longer than the debounce
    // delay, so take it as the actual current state:
    // if the button state has changed:
    if (reading != buttonState) {
      buttonState = reading;
      // only toggle the LED if the new button state is HIGH
      if (buttonState == HIGH) {
        ledState = !ledState;
      }
    }
  }
  // set the LED:
  digitalWrite(ledPin, ledState);
  // save the reading. Next time through the loop, it'll be the lastButtonState:
  lastButtonState = reading;
}

最新更新