救救孩子
arduino两个按键顺序不一样(但是后面都要长按),产生的事件不一样,框架怎么写呢。
救救孩子
arduino两个按键顺序不一样(但是后面都要长按),产生的事件不一样,框架怎么写呢。
定义两个变量 num1 和 num2 用于记录按键顺序,初始值都为0。
定义两个布尔型变量 button1State 和 button2State 分别记录两个按键当前的状态,初始值都为 HIGH。
在 loop 函数中,使用 digitalRead() 函数读取两个按键的状态,并保存在上面定义的变量中。
如果按键1被按下,且 num1 的值为0,那么将 num1 的值设置为1,并记录当前时间为 startTime1。
如果按键2被按下,且 num2 的值为0,那么将 num2 的值设置为1,并记录当前时间为 startTime2。
如果按键1和按键2都被按下,并且 num1 和 num2 都为1,那么判断 startTime1 和 startTime2 的时间差,如果时间差小于一定值,执行事件A;否则执行事件B。
在事件A或事件B被执行后,将 num1 和 num2 的值都设置为0,以便下一次操作。
int button1Pin = 2; // 按键1的引脚号
int button2Pin = 3; // 按键2的引脚号
int button1State = HIGH; // 按键1当前状态
int button2State = HIGH; // 按键2当前状态
unsigned long startTime1; // 记录按键1被按下的时间
unsigned long startTime2; // 记录按键2被按下的时间
int num1 = 0; // 记录按键1的顺序
int num2 = 0; // 记录按键2的顺序
unsigned long debounceTime = 50; // 消除按键抖动的时间
void setup() {
pinMode(button1Pin, INPUT_PULLUP);
pinMode(button2Pin, INPUT_PULLUP);
}
void loop() {
int button1Reading = digitalRead(button1Pin);
int button2Reading = digitalRead(button2Pin);
if (button1Reading != button1State) { // 检测按键1状态改变
if (millis() - startTime1 >= debounceTime) { // 消除按键抖动
button1State = button1Reading;
if (button1State == LOW && num1 == 0) { // 检测按键1被按下
num1 = 1;
startTime1 = millis();
}
}
}
if (button2Reading != button2State) { // 检测按键2状态改变
if (millis() - startTime2 >= debounceTime) { // 消除按键抖动
button2State = button2Reading;
if (button2State == LOW && num2 == 0) { // 检测按键2被按下
num2 = 1;
startTime2 = millis();
}
}
}
if (num1 == 1 && num2 == 1) { // 检测两个按键都被按下
if (millis() - startTime2 <= debounceTime) { // 检测按键2是被按下后先释放
// 事件A执行
num1 = 0;
num2 = 0;
} else {
// 事件B执行
num1 = 0;
num2 = 0;
}
}
}
这个例子中,两个按键的顺序必须是按键1先被按下,然后按键2被按下,否则事件A和事件B将无法执行。
您可以根据需要更改 debounceTime 的值来调整消除按键抖动的时间。同时,如果需要改变按键的顺序,您只需要修改 num1 和 num2 的值即可。