在arduino中一次使用一个按钮和多个按钮

问题描述

我制作了一个代码,我可以使用我的 arduino 一次使用多个按钮。但是,我现在想要的是修改代码,这样当按下一个按钮时,其他按钮都不能工作,直到第一个按钮被释放。

谁能帮我解决这个问题?代码如下:

#include <ezButton.h>
#include <SoftwareSerial.h>


ezButton button1 (22);
ezButton button2 (24);
ezButton button3 (26);
ezButton button4 (28);
ezButton button5 (30);


SoftwareSerial espSerial(18,19);
String str;
int Myval = 255;


void setup() {
// put your setup code here,to run once:
Serial.begin(9600);
espSerial.begin(9600);
button1.setDebounceTime(50);
button2.setDebounceTime(50);
button3.setDebounceTime(50);
button4.setDebounceTime(50);
button5.setDebounceTime(50);


} 

void loop() {
// put your main code here,to run repeatedly:
button1.loop();
button2.loop();
button3.loop();
button4.loop();
button5.loop();


int btn1S = button1.getState();
int btn2S = button2.getState();
int btn3S = button3.getState();
int btn4S = button4.getState();
int btn5S = button5.getState();

Serial.print("button 1 state: ");
Serial.println(btn1S);
Serial.print("button 2 state: ");
Serial.println(btn2S);
Serial.print("button 3 state: ");
Serial.println(btn3S);
Serial.print("button 4 state: ");
Serial.println(btn4S);
Serial.print("button 5 state: ");
Serial.println(btn5S);
  
if(button1.ispressed())
Serial.println("Fucntion for 22 is Now on");

if(button1.isReleased())
Serial.println("Function for 22 is Now off");

if(button2.ispressed())
Serial.println("Fucntion for 24 is Now on");

if(button2.isReleased())
Serial.println("Function for 24 is Now off");

if(button3.ispressed())
Serial.println("Fucntion for 26 is Now on");

if(button3.isReleased())
Serial.println("Function for 26 is Now off");

if(button4.ispressed())
Serial.println("Fucntion for 28 is Now on");

if(button4.isReleased())
Serial.println("Function for 28 is Now off");

if(button5.ispressed())
Serial.println("Fucntion for 30 is Now on");

if(button5.isReleased())
Serial.println("Function for 30 is Now off");

str = String("Coming from arduino: ")+String("Button 1 is Now: ")+String(btn1S)+String("Button 2 is  
Now: ")+String(btn2S)+String("Button 3 is Now: ")+String(btn3S)+String("Button 4 is Now: 
")+String(btn4S)+String("Button 5 is Now: ")+String(btn5S);  
 espSerial.println(str);


 delay(1000);
}

代码正在运行,但唯一剩下的就是我想放置的条件。谁能做修改或告诉我怎么做?

解决方法

我的做法是定义一个全局变量 int buttonDown = 0;,然后每当按下按钮且没有按下其他按钮时,将按钮编号分配给 buttonDown。释放按钮后,将 buttonDown 重置为 0。然后您可以轻松检查 buttonDown 是否为 0,这意味着当前没有其他按钮被按下。

这是一个最小的例子:

#include <ezButton.h>
#include <SoftwareSerial.h>

ezButton button1 (22);
ezButton button2 (24);

SoftwareSerial espSerial(18,19);
String str;
int Myval = 255;
int buttonDown = 0; // Tracks the button state.

void setup() {
    Serial.begin(9600);
    espSerial.begin(9600);
    button1.setDebounceTime(50);
    button2.setDebounceTime(50);
} 

void loop() {
    button1.loop();
    button2.loop();

    int btn1S = button1.getState();
    int btn2S = button2.getState();

    Serial.print("button 1 state: ");
    Serial.println(btn1S);
    Serial.print("button 2 state: ");
    Serial.println(btn2S);
  
    if(button1.isPressed() && buttonDown == 0){
        Serial.println("Function for 22 is now on");
        buttonDown = 1;
    }

    if(button1.isReleased() && buttonDown == 1){
        Serial.println("Function for 22 is now off");
        buttonDown = 0;
    }

    if(button2.isPressed() && buttonDown == 0){
        Serial.println("Function for 24 is now on");
        buttonDown = 2;
    }

    if(button2.isReleased() && buttonDown == 2)
        Serial.println("Function for 24 is now off");
    }

    delay(1000);
}

我认为应该很清楚如何为您的 5 个按钮进一步扩展。

,

也许通过使用设置为 false 的布尔值可以工作。释放按钮时将布尔值设置为 true/1。