带LED的Arduino按钮

时间:2016-05-20 17:04:53

标签: arduino arduino-uno

我已经组装了一个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);
   }
  }

2 个答案:

答案 0 :(得分:1)

如果你想要的只是这样做,你可以使用其中一个中断引脚并注意RISING(或FALLING)事件。

this example类似的东西:

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

请注意,您可能仍需要一些debouncing strategy

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

答案 1 :(得分:1)

/*
  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;
}