问题描述
我制作了一个代码,我可以使用我的 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。