Skip to content

Add array of struct ezButtonExample #22

Description

@drf5n

Expanding on the examples in https://forum.arduino.cc/t/for-beginners-the-simple-way-to-program-for-multiple-buttons-code-example/629651 and https://github.com/ArduinoGetStarted/button/blob/master/examples/07.ButtonArray/07.ButtonArray.ino , I wrote an example using an array of structs with ezButtons as elements. It might be nice to add as an example.

/* an ezButton demo using an array of structures
  Build from https://forum.arduino.cc/t/for-beginners-the-simple-way-to-program-for-multiple-buttons-code-example/629651
  and its array of buttons example from
  https://github.com/ArduinoGetStarted/button/blob/master/examples/07.ButtonArray/07.ButtonArray.ino

  Wokwi demo: https://wokwi.com/projects/405606656376410113
*/

#include <ezButton.h> // https://github.com/ArduinoGetStarted/button

struct MyButtonsStruct {
  ezButton ezb;
  byte pin;
  char * name;
  char * desc;
  char * pressMessage;
  char * releaseMessage;
};

MyButtonsStruct myButtons[] = {
  { ezButton(2), 2, "Green/2", "Start the device", "starting...", "started."},
  { ezButton(3), 3, "Red/3", "Stop the device", "stopping...", "stopped"},
  { ezButton(4), 4, "Blue/4", "Increment", "filling...", "filled"},
  { ezButton(5), 5, "Yellow/5", "Decrement", "draining...", "drained"},
  { ezButton(6), 6, "Gray/6", "Accept", "Submitting...", "accepted"}
};

const int BUTTON_NUM = sizeof(myButtons) / sizeof(myButtons[0]);

void setup() {
  Serial.begin(115200);

  for (byte i = 0; i < BUTTON_NUM; i++) {
    Serial.print("Enabling ");
    Serial.print(myButtons[i].name);
    Serial.print(" as ");
    Serial.println(myButtons[i].desc);
    myButtons[i].ezb.setDebounceTime(50); // set debounce time to 50 milliseconds
  }
}

void loop() {
  for (byte i = 0; i < BUTTON_NUM; i++) { // read all the input buttons
    myButtons[i].ezb.loop(); // MUST call the loop() function first
  }

  for (byte i = 0; i < BUTTON_NUM; i++) { // process all the buttons
    if (myButtons[i].ezb.isPressed()) {
      Serial.print("The ");
      Serial.print(myButtons[i].name);
      Serial.print(" button ");
      Serial.print(myButtons[i].pin);
      Serial.print(" is pressed. ");
      Serial.println(myButtons[i].pressMessage);
    }
    if (myButtons[i].ezb.isReleased()) {
      Serial.print("The ");
      Serial.print(myButtons[i].name);
      Serial.print(" button ");
      Serial.print(myButtons[i].pin);
      Serial.print(" is released. ");
      Serial.println(myButtons[i].releaseMessage);
    }
  }
}

There is a live demo here:

https://wokwi.com/projects/405606656376410113

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions