METHOD 5. SOFTWARE DELAY DEBOUNCE



 

// Arduino debounce – credits at 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 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;

}


 Method 5: Software Delay Debounce