How to debounce for multiple buttons

How can I debounce for multiple buttons using millis() function in Arduino? I have trouble managing timestamps. What is the easiest way to do it?

Answer

Debouncing for the button is very important in some applications such as detecting button press, counting... Managing timestamps when debouncing for multiple buttons is not easy for newbies. Fortunately, the ezButton library supports the debouncing function. The timestamp is managed by the library. Therefore, we can use this library to debouncing for multiple buttons without managing timestamps. Further more, you can use an array of buttons to make code clean and short

Arduino Code - Debouncing for Multiple Button

The below example code is for three buttons.

/* * Created by ArduinoGetStarted.com * * This example code is in the public domain * * Tutorial page: https://arduinogetstarted.com/tutorials/arduino-button-library * * This example: * + uses debounce for multiple buttons. * + reads state of multiple buttons * + detects the pressed and released events of multiple buttons */ #include <ezButton.h> ezButton button1(6); // create ezButton object that attach to pin 6; ezButton button2(7); // create ezButton object that attach to pin 7; ezButton button3(8); // create ezButton object that attach to pin 8; void setup() { Serial.begin(9600); button1.setDebounceTime(50); // set debounce time to 50 milliseconds button2.setDebounceTime(50); // set debounce time to 50 milliseconds button3.setDebounceTime(50); // set debounce time to 50 milliseconds } void loop() { button1.loop(); // MUST call the loop() function first button2.loop(); // MUST call the loop() function first button3.loop(); // MUST call the loop() function first if(button1.isPressed()) Serial.println("The button 1 is pressed"); if(button1.isReleased()) Serial.println("The button 1 is released"); if(button2.isPressed()) Serial.println("The button 2 is pressed"); if(button2.isReleased()) Serial.println("The button 2 is released"); if(button3.isPressed()) Serial.println("The button 3 is pressed"); if(button3.isReleased()) Serial.println("The button 3 is released"); }

The wiring diagram for above code:

Arduino Button Library Wiring Diagram

This image is created using Fritzing. Click to enlarge image

Hardware for above code

1 × Arduino UNO Buy on Amazon
1 × USB 2.0 cable type A/B Buy on Amazon
3 × Button Buy on Amazon
1 × Breadboard Buy on Amazon
1 × Jumper Wires Buy on Amazon
Disclosure: Some links in this section are Amazon affiliate links. If you make a purchase through these links, we may earn a commission at no extra cost to you.
Additionally, some links direct to products from our own brand, DIYables.

Array of Buttons

When you use many buttons, you can use an array of buttons to make code clean and short. The below example code use an array for 5 buttons.

/* * Created by ArduinoGetStarted.com * * This example code is in the public domain * * Tutorial page: https://arduinogetstarted.com/faq/how-to-debounce-for-multiple-buttons */ #include <ezButton.h> const int BUTTON_NUM = 5; const int BUTTON_1_PIN = 2; const int BUTTON_2_PIN = 3; const int BUTTON_3_PIN = 4; const int BUTTON_4_PIN = 5; const int BUTTON_5_PIN = 6; ezButton buttonArray[] = { ezButton(BUTTON_1_PIN), ezButton(BUTTON_2_PIN), ezButton(BUTTON_3_PIN), ezButton(BUTTON_4_PIN), ezButton(BUTTON_5_PIN) }; void setup() { Serial.begin(9600); for (byte i = 0; i < BUTTON_NUM; i++) { buttonArray[i].setDebounceTime(50); // set debounce time to 50 milliseconds } } void loop() { for (byte i = 0; i < BUTTON_NUM; i++) buttonArray[i].loop(); // MUST call the loop() function first for (byte i = 0; i < BUTTON_NUM; i++) { if (buttonArray[i].isPressed()) { Serial.print("The button "); Serial.print(i + 1); Serial.println(" is pressed"); } if (buttonArray[i].isReleased()) { Serial.print("The button "); Serial.print(i + 1); Serial.println(" is released"); } } }

The Best Arduino Starter Kit

※ OUR MESSAGES