【问题标题】:Using one button at a time in arduino with multiple buttons在具有多个按钮的 arduino 中一次使用一个按钮
【发布时间】:2021-03-15 07:57:25
【问题描述】:

我编写了一个代码,我可以使用我的 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);
}

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

【问题讨论】:

    标签: arduino nodemcu


    【解决方案1】:

    我这样做的方法是定义一个全局变量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 个按钮。

    【讨论】:

    • 谢谢。让我试试这个,然后我一定会告诉你它是怎么回事。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2019-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多