c - 如何检测同时按下按钮
问题描述
我想让按钮 1 和 2 同时按下时静音。它有效......但只是有时。有时它只会打印“simpressed”,有时它会显示“Button-1 Clicked”和“Simpressed”
我想这样做,当同时按下 btn 1 和 btn 2 时,它们不会打印“button-1 clicked”或“button-2 clicked”,但会打印“sim pressed”
我怎么能做到这一点?
我试过研究同时按下按钮,但我自己找不到任何用于接线的东西
包括
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <wiringPi.h>
#define sd 200
#define pin1 8
#define pin2 7
int a, b, c = 1;
按钮 1 按钮 按下
void *btn1() {
while(1) {
if(!digitalRead(pin1) && digitalRead(pin2) && a) {
a = 0;
printf("Button-1 pressed\n");
delay(sd);
}
if(digitalRead(pin1) && !a) {
a = 1;
}
}
}
按钮 2 按钮按下
void *btn2() {
while(1) {
if(!digitalRead(pin2) && digitalRead(pin1) && b) {
b = 0;
printf("Button-2 pressed\n");
delay(sd);
}
if(digitalRead(pin2) && !b) {
b = 1;
}
}
}
同时按下按钮
void *simbtn() {
while(1) {
if(!digitalRead(pin1) && !digitalRead(pin2) && c) {
c = 0;
printf("Sim pressed\n");
delay(sd);
}
if(digitalRead(pin1) && digitalRead(pin2) && !c) {
c = 1;
}
}
}
创建线程
int main(void) {
wiringPiSetupGpio();
pthread_t tid[2];
pthread_create(&tid[0], NULL, btn1, NULL);
pthread_create(&tid[1], NULL, btn2, NULL);
pthread_create(&tid[2], NULL, simbtn, NULL);
while(1) {}
return 0;
}
同时按下 btn 1 和 2 后的预期结果:
Sim pressed
两者都被按下时的实际结果(6次给出一个很好的例子):
Button-1 pressed
Sim pressed
Button-1 pressed
sim pressed
button-2 pressed
sim pressed
Button-1 pressed
Sim pressed
Button-2 pressed
sim pressed
button-2 pressed
sim pressed
解决方案
推荐阅读
- java - 使用 Maven 的 Java 应用程序没有被编译和运行?
- excel - Excel VBA - VBA中工作表之间的动态数据查找
- javascript - 如何在 GeoNames 数据库中获取国家/地区的城市相关区域
- c# - 如何在代码隐藏文件中绑定 ListBox 的属性?
- arduino - 如何使用 arduino json 设置正确的 POST 正文
- javascript - Vue this.$refs 返回一个看起来为空但在检查器中有值的对象
- python - AttributeError:“MininetRouter”对象没有属性“名称”
- python - 我想在我的网页上显示和运行 .ipynb 文件
- javascript - classList 在 for 循环中无法按预期工作
- assembly - 七段显示多路复用